Mysql

始終將 MySQL 數據庫管理到記憶體中

  • December 27, 2009

不是系統管理員,所以…我們在 MySQL 5.0.22 實例上有一個大小約為 4GB 的數據庫。該表是 InnoDB / UTF-8。基本上有一個針對索引列執行的查詢。硬體有16GB記憶體。理想情況下,我想進行管理,以便數據文件和索引文件都應該始終在記憶體中(寫入被刷新到磁碟)。此伺服器上的活動很少。

假設它有足夠的記憶體(我認為確實如此),這應該是不交換到磁碟的預期行為嗎?

我如何確認這種行為正在發生?

提前致謝

如果您沒有執行任何其他需要大量記憶體的應用程序,那麼在記憶體中安裝“工作集”應該沒有問題。完全地。我有幾個 sql 伺服器正在這樣做。它們提供了出色的讀取性能並且沒有造成任何麻煩。

要做的事情:

  1. 確保 mysql 被告知為 innodb 分配足夠的緩衝池 - 在 my.cnf 中放置:

innodb_buffer_pool_size=8GB 2. 前提是您沒有任何其他需要記憶體的應用程序

$$ apache / any appservs, custom stuff $$- 最小化可用交換$$ there are different contradicting ‘schools’ about this subject. i would put 1GB swap + monitor and make sure it’s not used. $$; [你可以在這裡閱讀一些關於交換的意見] 3. 確保 mysql 在啟動後“預熱” - 執行查詢,強制 mysql 讀取表中的每一行/列

$$ s $$. 簡單的: 從表中選擇 md5(col1)、md5(col2)

應該做的伎倆。重複修改此查詢

$$ eg length(col1) $$確保數據確實是從記憶體中讀取的。要進行更科學的檢查,您可以並行執行 iostat 並確保未觸及磁碟。更科學 - 你可能想看看 innodb 的統計數據$$ to ensure there is no I/O when executing new version of queries one after another $$通過執行 顯示引擎 INNODB 狀態\G

更多關於在這里這裡解釋輸出。

引用自:https://serverfault.com/questions/97577