Mysql
MyISAM 表的性能設置 - 將所有內容保存在記憶體中
我有一個 8 核 MySQL 伺服器和 32 GB RAM,擁有 40 個 MyISAM 表(總計:~4GB 數據)。由於數據庫大小比可用記憶體小幾倍,我怎樣才能充分利用我的伺服器資源?
- 我應該嘗試在 my.cnf 中配置哪些設置?
- 我可以強制數據+索引留在記憶體中嗎?
MySQL 只記憶體 MySQL 記憶體中的索引,而不是數據。數據僅由底層作業系統的文件系統記憶體記憶體。在 my.cnf 中調整的最重要的值是
key_buffer_size
它將為 MyISAM 分配記憶體以記憶體索引。但是,除非您有使用 MyISAM 表的特定原因,否則您應該將這些表轉換為 InnoDB。在當今時代,使用 MyISAM 的理由不多,而 MyISAM 不利於並發性、數據完整性或崩潰恢復。
如果您切換到 InnoDB,最重要的設置是
innodb_buffer_pool_size
將記憶體數據頁和索引的內部記憶體記憶體。其他要考慮的事情是innodb_log_file_size
並確保設置innodb_file_per_table=1
。4GB數據+索引,設置innodb_buffer_pool_size=4G
合理。如果您在高度並發的環境中執行,您可以嘗試使用innodb_thread_concurrency
. 我的建議是從 innodb_thread_concurrency=0 開始,但您可能會發現有必要根據您的工作負載和 MySQL 版本將其顯式設置為 4-8 之間的某個位置。