2012-10-29 51 views
1

對於某些報告需求,我們有很多MySQL選擇查詢。大多數並不複雜,通常包括1.五六個連接語句2. select子句中的三到四個內部查詢。mysql選擇查詢中的響應時間不一致

所有指標在生產環境中都適當。我們多次檢查瞭解釋查詢語法,他們都沒問題。

某些查詢在響應時間方面表現得非常奇怪。相同的查詢返回時間少於500毫秒(這表明所有索引都正常工作),並且當我們在1分鐘左右運行它時 - 它會給出高響應時間的結果(從5秒到30秒不等)有一段時間(大約有一次20次..)它會導致超時錯誤。

這可能是由於服務器負載 - 但高差異非常頻繁,我們認爲還有別的辦法可以解決它。

有人可以告訴我一些方向,還有什麼可以做的!

感謝,

薩米特

回答

3

這種行爲通常是由您的堆棧的瓶頸造成的。

這就像建築物中的旋轉門 - 一次可以處理一個人,每個人需要3秒;只要人們不會每3秒鐘超過1人,你就不知道這是一個瓶頸。如果人們在短時間內以更快的速度到達,隊列會增長一些,但會很快消失。如果人們每2.5秒鐘以1人的速度到達一個小時,則隊列變得難以管理,並且可能花費比這1小時更長的時間消失。

您的數據庫系統由帶有旋轉門的長走廊組成 - 大多數門可以並行運行,但都是有限的。

(對垃圾比喻抱歉,但我發現它有助於使用真實世界的圖像可視化這些東西)。

如果查詢的性能曲線顯示出高度的變化,我會查看系統性能監視器(Linux中的top,Windows中的Perfmon),並嘗試將慢速性能與系統行爲相關聯。如果查詢速度減慢時發現CPU利用率突然激增,那很可能是您的瓶頸;如果您看到磁盤吞吐量突然激增,那麼您可能會看到。

一旦你有關於瓶頸的假設,你可以看看解決它們的方法 - 拋擲硬件的問題通常是最便宜的。

+1

+1 - 我喜歡這個比喻:) – webnoob

+0

感謝您指導Neville。將密切關注服務器負載與查詢響應時間,並在此處進行更新。 – dhalsumit