我必須每 6 小時刷新一次查詢記憶體以保持快速查詢,這是否正常?
我正在執行 MySQL 5.5.37。我有一個 cronjob 設置為每 6 小時執行一次以刷新查詢記憶體。我意識到,如果我不這樣做,那麼記憶體就會變得支離破碎,平均查詢響應時間可能會增加一倍或三倍。我 95% 的數據都保存在 MyISAM 表中。
只要我執行 cronjob,我的平均響應時間在 15 毫秒到 30 毫秒之間。
這是正常行為嗎?或者它是否表明我有一個應該解決的潛在問題?也許我的 query_cache_min_res_unit 值太低,導致碎片?或者碎片是不可避免的並且刷新記憶體是完全正常的?
QUERY CACHE Query cache is enabled Current query_cache_size = 4.08 G Current query_cache_used = 1.05 G Current query_cache_limit = 3.24 G Current Query cache Memory fill ratio = 25.79 % Current query_cache_min_res_unit = 4 K
根據儲存引擎,刷新查詢記憶體是可以的
InnoDB 花時間對數據更改進行微觀管理。這包括交叉檢查查詢記憶體。
我有一個 2 年前的文章(
Sep 05, 2012
:頻繁查詢記憶體失效的成本值得嗎?)我建議FLUSH QUERY CACHE
通過 crontab 執行。我也有最近的文章
Jun 07, 2014
:為什麼從 MySQL 5.6 開始預設禁用 query_cache_type?Jun 30, 2014
:優化 MySQL query_cache_min_res_unit解釋如果真正了解數據、結果集的平均大小以及查詢記憶體中應該有多少條目,如何嘗試設置query_cache_size和query_cache_min_res_unit 。
除了對數據有這種預知之外,碎片化是不可避免的。
另一方面,如果您的所有數據都是 MyISAM,您應該花時間通過了解您的數據來設置 set query_cache_size和query_cache_min_res_unit 。畢竟,MyISAM 不記憶體數據。它只記憶體索引。
結語
無論儲存引擎如何,執行
FLUSH QUERY CACHE;
都無需設置query_cache_size和query_cache_min_res_unit。它可以快速消除碎片問題。如果您的數據集不是很大,請花時間調整數據和結果集的大小。您可以消除 crontab。以下是更大的優勢
調整查詢
添加適當的索引以支持查詢
調整 MyISAM
- 如果 MyISAM 表有 VARCHAR 列,請將行格式更改為 FIXED。
- 確保 key_buffer_size 可以容納所有 MyISAM 索引(請參閱InnoDB 和 MyISAM 之間的主要區別是什麼?)