我仍然会将 innodb_buffer_pool_size 设置为远高于 400M。原因?InnoDB 缓冲池仍然会缓存你经常访问的表所需的数据和索引页面。
运行此查询以获取推荐的 innodb_buffer_pool_size(以 MB 为单位):
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(pw<0,0,IF(pw>3,0,pw)))+0.49999),SUBSTR('KMG',IF(pw<0,0,IF (pw>3,0,pw))+1,1)) Recommended_innodb_buffer_pool_size FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables WHERE engine='InnoDB') A,(SELECT 2 pw) B;
只需使用此查询的结果或 80% 的已安装 RAM(在您的情况下为 19660M),以较小者为准。
我还将 innodb_log_file_size 设置为 InnoDB 缓冲池大小的 25%。不幸的是,innodb_log_file_size 的最大值是 2047M。(2G 不足 1M)因此,将 innodb_log_file_size 设置为 2047M,因为我推荐设置的 innodb_buffer_pool_size 的 25% 是 4915M。
另一个建议是禁用 ACID 合规性。对 innodb_flush_log_at_trx_commit 使用 0 或 2(默认为 1,支持 ACID 合规性)这将产生更快的 InnoDB 写入,但在发生崩溃时有丢失多达 1 秒事务的风险。