调整 InnoDB 相关 MySQL 配置后磁盘 I/O 利用率高达 100%

调整 InnoDB 相关 MySQL 配置后磁盘 I/O 利用率高达 100%

我在“my.conf”中添加了以下几行:

query_cache_size=128M
innodb_buffer_pool_size=512M
innodb_flush_method=O_DIRECT

此后,磁盘利用率开始上升,达到 100% 并保持稳定,并且由于磁盘 I/O 相关任务,CPU 也略有上升,但物理内存仅使用了 50%。

我有点不明白这里发生了什么?

答案1

根据经验法则,innodb_log_file_size应该是innodb_buffer_pool_size。对于您来说,您应该按如下方式添加该变量:

[mysqld]
query_cache_size=128M
innodb_buffer_pool_size=512M
innodb_log_file_size=128M
innodb_flush_method=O_DIRECT

单击此处了解如何调整 innodb_log_file_size 的大小 ->https://dba.stackexchange.com/a/1265/877

您可以通过以下方法根据当前拥有的 InnoDB 数据量设置正确的 innodb_buffer_pool_size 大小。运行此查询:

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+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 PowerOf1024) B; 

如果recommended_innodb_buffer_pool_size返回结果超过已安装 RAM 的 75%,则使用已安装 RAM 的 75% 作为推荐值。如前所述,相应地设置 innodb_log_file_size。

答案2

根据innodb_flush_method 文档使用 O_DIRECT 可能会对你的性能产生积极或消极的影响

引用自文档:

根据硬件配置,将 innodb_flush_method 设置为 O_DIRECT 可能会对性能产生积极或消极的影响。请对您的特定配置进行基准测试,以决定使用哪种设置。

相关内容