Mysql

MyISAM 表的性能設置 - 將所有內容保存在記憶體中

  • December 21, 2021

我有一個 8 核 MySQL 伺服器和 32 GB RAM,擁有 40 個 MyISAM 表(總計:~4GB 數據)。由於數據庫大小比可用記憶體小幾倍,我怎樣才能充分利用我的伺服器資源?

  1. 我應該嘗試在 my.cnf 中配置哪些設置?
  2. 我可以強制數據+索引留在記憶體中嗎?

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 之間的某個位置。

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