Mysql

mysqltuner - 寫鍵緩衝區命中率

  • August 16, 2017

我正在粘貼有關 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_sizeWrite 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 緩衝池了嗎?它有一個負責索引更改的插入部分。InnoDB 會自動為您刷新索引更改。MyISAM 不存在這樣的機制。所以,請盡快轉換為 InnoDB。

更新 2017-08-07 15:25 EDT

如果你必須繼續使用 MyISAM,你應該考慮使用 Dedicated MyISAM Ke​​y 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是您使用的大小。

請查看我關於如何創建專用 MyISAM 密鑰記憶體的文章

我不會太擔心這一點,因為 INSERT 和 UPDATE 似乎很少見。

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