MySQL 5.6下table_open_cache引數合理配置詳解
table_open_cache指定表快取記憶體的大小。每當MySQL訪問一個表時,如果在表緩衝區中還有空間,該表就被開啟並放入其中,這樣可以更快地訪問表內容。
通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_open_cache的值。
如果你發現open_tables等於table_open_cache,並且opened_tables在不斷增長,那麼你就需要增加table_open_cache的值了(上述狀態值可通過SHOW GLOBAL STATUS LIKE ‘Open%tables’獲得)。
注意,不能盲目地把table_open_cache設定成很大的值,設定太大超過了shell的檔案描述符(通過ulimit -n檢視),造成檔案描述符不足,從而造成效能不穩定或者連線失敗。
測試環境:騰訊雲CDB,記憶體4000M,在控制檯檢視到table_open_cache=512,監測table_open_cache設定是否合理,是否需要優化。
發現open_tables等於table_open_cache,都是512,說明mysql正在將快取的表釋放以容納新的表,此時可能需要加大table_open_cache的值,4G記憶體的機器,建議設定為2048
比較適合的值:
Open_tables / Opened_tables >= 0.85
Open_tables / table_open_cache <= 0.95
如果對此引數的把握不是很準,有個很保守的設定建議:把MySQL資料庫放在生產環境中試執行一段時間,然後把引數的值調整得比Opened_tables的數值大一些,並且保證在比較高負載的極端條件下依然比Opened_tables略