2017-02-20 43 views
1

我有一個擁有超過一百萬個表的MySQL(Percona)5.7實例。 當我啓動數據庫時,啓動可能需要一個多小時。 Errorlog不顯示任何內容,但是當我跟蹤mysqld_safe時,發現MySQL正在獲取數據庫中每個文件的統計信息。MySQL可能需要一個多小時才能啓動

任何想法爲什麼會發生這種情況? 另外,請不要修復我的架構,這是一個黑匣子。

謝謝

+0

哇,這是很多表。在附註中,這個問題可能更適合於http://dba.stackexchange.com/ –

+1

100萬個表格?獲取一個新的黑匣子。 – JNevill

+0

偉大的數據庫設計 - 1Million表* 3處理1 InnoDB表= 3Million文件句柄。 –

回答

1

這原來是2個問題(除了數百萬表)!

  1. 當MySQL啓動並且需要崩潰恢復時,從5.7.17開始,它需要遍歷數據庫以構建它的字典。這將在未來版本(8.0)中被解除,因爲MySQL將擁有自己的目錄,並且不再依賴數據目錄內容。 Doc指出這不再做。這是真的和錯誤的。它不會讀取ibd文件的第一頁,但會執行文件統計。 Filed Bug
  2. 完成(1)後,它開始一個新進程,「執行'SELECT * FROM INFORMATION_SCHEMA.TABLES';'獲取使用不推薦使用的分區引擎的表的列表。「當然,再次打開所有文件。如果你認爲你不需要它,使用disable-partition-engine-check。 Doc

所有這一切都可以使用sysdig來觀察。非常強大的方便dtrace像工具。

sysdig proc.name = mysqld | grep「open fd =」

好的,現在是時候減少文件的數量了。

相關問題