我在“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 可能会对性能产生积极或消极的影响。请对您的特定配置进行基准测试,以决定使用哪种设置。