mysqltuner - 寫鍵緩衝區命中率
我正在粘貼有關 MyISAM Metrics的MySQL Tuner結果部分。
[OK] Currently running supported MySQL version 5.5.57-0ubuntu0.14.04.1-log [OK] Operating on 64-bit architecture -------- Performance Metrics ----------------------------------------------------- [--] Up for: 25d 1h 40m 20s (6M q [3.149 qps], 170K conn, TX: 15G, RX: 1G) [--] Reads / Writes: 90% / 10% -------- MyISAM Metrics ---------------------------------------------------------- [!!] Key buffer used: 20.1% (80M used / 402M cache) [OK] Key buffer size / total MyISAM indexes: 384.0M/31.6M [OK] Read Key buffer hit rate: 99.9% (7M cached / 4K reads) [!!] Write Key buffer hit rate: 1.2% (2M cached / 25K writes)
我正在尋找改進或優化Write Key 緩衝區命中率的方法。或者為什麼這麼糟糕?
我不知道哪些伺服器變數可能在此結果中起作用,所以請告訴我應該在此處粘貼哪些變數,或者您是否需要任何具體細節。
感謝幫助!
更新 2017-08-11 13:56 CET
我根據@RolandoMySQLDBA 的建議做了更多測試,看來我真的不應該擔心這個指標。在我降低 後
key_buffer_size
,Write buffer 鍵的命中率直接提高了。但是,我無法衡量讀取速度的任何改進。我認為這是因為沒有足夠的記憶體用於記憶體,所以幾乎所有的寫入都通過了。我仍然不太了解Write buffer key hit rate的好壞,但它似乎與基於數據庫中的數據和索引的 key buffer 的最佳大小有關。
你還在使用 MyISAM ??? 哎喲!!!
開玩笑的,你需要兩個狀態變數:
- Key_write_requests:將密鑰塊寫入 MyISAM 密鑰記憶體的請求數
- Key_writes:從 MyISAM 密鑰記憶體到磁碟的密鑰塊的物理寫入次數
您希望Key_writes / Key_write_requests的比率盡可能接近 1 (100%)。我寫了一組很好的查詢,你可以執行它來查看這樣的比率。您可以在我對文章MyISAM 密鑰緩衝區
Jun 17, 2013
的回答中找到它也許只是執行
FLUSH TABLES;
將清除任何揮之不去的索引更改。如果您的系統不進行大量寫入,那麼這可能就是您所需要的。我建議將您擁有的所有內容都轉換為 InnoDB,這樣您的數據庫就可以在崩潰中倖免於難。畢竟,您不希望對索引進行任何更改。
快速瀏覽一下 InnoDB Plumbing(圖片來自 Percona CTO Vadim Tkachenko)
看到左邊的 InnoDB 緩衝池了嗎?它有一個負責索引更改的插入部分。InnoDB 會自動為您刷新索引更改。MyISAM 不存在這樣的機制。所以,請盡快轉換為 InnoDB。
更新 2017-08-07 15:25 EDT
如果你必須繼續使用 MyISAM,你應該考慮使用 Dedicated MyISAM Key Caches。您可以為特定的一組 MyISAM 表創建一個鍵緩衝區。在您的情況下,您將為具有 FULLTEXT 索引的一個表創建一個專用的鍵記憶體。您必須判斷記憶體的大小。
假設您的具有 FULLTEXT 索引的表是
mydb.myfull
.然後,您可以執行它以找到四捨五入到最接近 MB 的正確大小
SELECT index_length,((FLOOR(index_length / 1048576) + 1) * 1048576) index_length_rounded FROM information_schema.tables WHERE table_schema='mydb' and table_name='myfull';
無論數字返回
index_length_rounded
是您使用的大小。我不會太擔心這一點,因為 INSERT 和 UPDATE 似乎很少見。