Mysql

MySQL 可能需要一個多小時才能啟動

  • February 23, 2017

我有一個 mysql (Percona) 5.7 實例,有超過 100 萬個表。當我啟動數據庫時,可能需要一個多小時才能啟動。錯誤日誌沒有顯示任何內容,但是當我跟踪 mysqld_safe 時,我發現 MySQL 正在獲取數據庫中每個文件的統計資訊。

知道為什麼會發生這種情況嗎?另外,請不要建議修復我的架構,這是一個黑盒。還要記住,我聽說過所有關於設計有多糟糕的消息……

謝謝

解決方案是大幅減少文件數量。我看到 3 種方法,具體取決於您的版本:

計劃 A(5.6 及更早版本的唯一選項):

設置innodb_file_per_table=OFF,重新啟動您的客戶端,然後執行ALTER TABLE ... ENGINE=InnoDB除 1000 個最大表之外的所有操作。這會將所有非大表鏟入ibdata1.

計劃 B(如果您至少有 5.7,並且您有 10-1000 個數據庫):

如果您有多個數據庫,請為每個數據庫創建一個通用表空間。將非大表放入這些表空間。

將大表留在它們自己的表空間中。

為了方便計劃 A 或 B,請編寫一個SELECT反對information_schema以創建所需的ALTER語句,然後執行它們。

計劃 C:遷移到 8.0,由於它的數據字典,它實際上可以相當快地處理一百萬個表。(或者,您可能需要計劃 C 與 A 或 B 的組合。)

聽起來您的數據庫管理員已將該innodb_stats_persistent=值設置為OFF. 將此值更改為ON,然後重新啟動。重啟將像往常一樣需要很長時間,但接下來的重啟應該會快得多。

如果這個設備對你來說真的是一個“黑匣子”,我懷疑你可以自己改變它。我會聯繫你的 DBA。

有關更多詳細資訊,請參閱文件

引用自:https://dba.stackexchange.com/questions/164911