2011-11-23 69 views
3

最近我們看到一些在MySQL(主)日誌中的查詢,但不知道爲什麼他們在那裏顯示: 查詢是select/update table where id = <some integer>完美的查詢我的sql超過5秒


  1. 上有ID索引
  2. 表的大小是低於100個000
  3. 行掃描是在數百(有時< 100)
  4. 服務器上運行非常良好的硬件
  5. 有沒有參與聯合
  6. 我們沒有看到當時在數據庫上運行的任何大量活動
  7. 表是InnoDB的
  8. 相同的查詢一般不會連取50毫秒,但有時這些查詢的執行需要大約4-8秒

一個觀察是所有類似的「非慢但是很奇怪的是,高時間「查詢在一段時間內花費的時間幾乎相同。即像頂部所述的查詢全部花費大約4.35秒,變化0.05秒。

網絡延遲/數據包丟失是否會影響mysql查詢時間?

+0

如何在生產的代碼中建立mysql連接?本地驅動程序或某種odbc?你是否試圖直接在數據庫上執行查詢,或者只是在你的應用程序中執行查詢? – Grrbrr404

+0

你的id列的確切數據類型是什麼? – Bohemian

+1

僅供參考[lakh](http://en.wikipedia.org/wiki/Lakh)是'100K' – Bohemian

回答

0
  • 您是否在本地或通過網絡看到這些問題?如果是後者,那麼顯然數據包丟失會影響你的性能,如果你是從客戶端進行測量。
  • 它是否在可影響性能的虛擬機中運行?
  • 磁盤問題?
  • 如何設置序列化?訪問同一行的許多進程可能是爭用問題嗎?
  • 您可能希望啓用查詢/慢速查詢日誌以查看是否有任何形式的原因導致此問題。
0

Mysql慢日誌不是有代表性的來源來了解您的慢查詢。如果某事使服務器工作變慢,則所有查詢通常都會導致日誌變慢

E.g.如果你在MyISAM上選擇了一些緩慢的阻塞,很多PK更新將會進入緩慢的日誌。

您需要搜索其他慢速查詢或服務器問題。這臺特定機器的平均負載如何?是不是mysql被移入交換內存?其他應用?每秒查詢?

1
show processlist; 
show global status like '%onnect%'; 
show global status like '%open%'; 

是否備份了什麼?它是否在隊列中等待?等待文件句柄?什麼是你的max_connections,open-files-limit,thread_concurrency?

一方面的問題:網絡延遲/數據包丟失影響MySQL查詢時間? 是的,超時必須發生在客戶端重新發送查詢之前