2012-09-11 90 views
2

我不熟悉mysql的後端,並且遇到以下情況。mysql重啓後的第一個查詢很慢

每晚我有一個腳本,關閉我們的mysql數據庫和rsyncs mysql文件夾到另一個。之後mysql打開。

後來,mysql被bash腳本或web應用程序訪問。

每次重新啓動後,通過bash腳本或webapp進入的前幾個查詢都很慢(需要10秒的時間需要3分鐘)。一旦緩慢的查詢完成或超時,查詢以正常速度運行。另外,當我通過命令行登錄到mysql時,所有事情都很好,查詢以預期的速度運行。

我認爲,經濟放緩是因爲通常 MySQL的讀取,當我登錄的所有表信息(假設沒有-A選項時)或第一查詢後已獲得必要的元表信息。

我的問題是:如何通過bash腳本加速此過程,以避免查詢緩慢/手動登錄?我只是在必要的表格上做一個虛擬選擇,還是有更明智的方式獲取表格信息?

環境:

  • 的CentOS 5.8
  • MySQL 5.1中使用MyISAM引擎

謝謝!

+0

你試過了'ANALYZE TABLE'嗎? – Kermit

回答

1

聽起來像你的數據庫正在失去它的緩存查詢。也許嘗試使用存儲過程進行查詢,您需要在首次運行時快速查詢。

1

您的查詢緩存可能太大或碎片化。

看看這this guide,這有助於調整您的數據庫。

2

我會推測查詢時間這麼長的延遲是由於服務器重新啓動時頁面緩存被清空。查詢運行後,表格會加載到頁面緩存中,並且所有內容都運行得更快。

第一個建議是爲更大的表重新加載頁面緩存。 。 。您只需在腳本中執行select * from <table>即可完成此操作。

但是這引發了一個問題:爲什麼查詢正在進行全表掃描?如果是,您可能有機會通過使用索引來加速查詢。

+0

感謝您的迴應。 查詢未執行全表掃描。這些表格上也有索引以及分區。 我注意到,如果我殺了其中一個查詢並再次運行它,它將以正常速度運行。所以我猜想,頁面緩存是問題所在。 現在我會嘗試在大桌子上做個虛擬選擇。 – Dinoo