2014-02-25 50 views
0

我知道慢速查詢會惹惱客戶端,或者花費很長時間才能完成。 除了讓他們更快,你應該優化一個查詢是否有一個原因? 換句話說,長時間在服務器上運行的查詢是否會對服務器造成任何損害或引起問題?是慢速查詢損壞?

+1

不是由它自己,但它取決於實際查詢,如果它寫得嚴重或惡意,然後可能。 – ggdx

+0

我想如果你運行一個查詢來連接服務器的CPU幾個小時,你可能會稍微加快正常的磨損過程。 – Blorgbeard

回答

0

慢速查詢,即使讀取也會產生很多問題。正如symcbean所提到的那樣,服務器上的資源(I/O,內存等)使用率會很高。 我主要處理InnoDB表。上週,由於某些配置問題,所有報告查詢都開始擊中主數據庫而不是從屬數據庫。一些我們所面臨的問題是

  1. 的I/O非常高
  2. 在服務器上的連接數高達700+(其通常保持在低於200,很幸運我們仍然能夠連接到MySQL!)
  3. 即使INSERT INTO .. VALUES()速度很慢,最頻繁的表有100多個INSERT查詢在等待,其中很多很快就會超時。 (這從來不會發生在正常的日子裏)
  4. 其他查詢簡單SELECT上的ID也很慢。

另外需要注意的是,如果您正在進行WRITE操作,將會發出MyISAM(表級)/ InnoDB(行級)鎖。那會讓你的生活更糟。

是的,這是最壞的情況,但緩慢的查詢可能會拖累整個系統。

1

如果您對具有大量寫入活動的系統有很長時間的查詢,那麼維護MVCC完整性可能會逐漸變得更加昂貴。由於對InnoDB的查詢發生在數據的一致快照上,所以後續寫入以查詢關閉的方式排隊。

如果您經常這樣做,通常最好創建一個用於報告目的的副本數據庫。 MySQL的主/從系統使這非常簡單。

1

使用MyISAM表(在某些情況下與其他引擎)它會阻止其他查詢啓動 - 因此它們需要很長時間才能完成。在其他地方(例如,網絡服務器和用戶的耐心)可能會導致連接終止 - 在沒有事務的情況下,這會導致數據完整性問題。

即使在沒有阻塞的情況下,長查詢也會消耗資源,這意味着服務器上同時發生的其他事情會減慢。

在配置錯誤的服務器上,它可能會消耗太多的內存 - 首先進入交換並大量減速,並可能觸發OOM殺手。