选择正确的 innodb_buffer_pool_size

选择正确的 innodb_buffer_pool_size

我有一台运行 MySQL(仅 InnoDB 表)的 24GB 机器。

我的 innodb 数据集有 11.5GB 大,我已将 innodb_buffer_pool_size 设置为 14GB,以允许一定增长。因此,整个 innodb 数据集都加载到内存中,这很好。

但今天我注意到我的索引大小也超过了 11GB。

增加 innodb_buffer_pool_size 以便索引空间也能容纳,这是一个好主意吗?或者这与此无关?

答案1

不要忘记 InnoDB 缓冲池存储数据和索引

请运行此查询

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 3 PowerOf1024) B;

这将告诉您 InnoDB 缓冲池需要多大。由于您只安装了 24GB 的 RAM,因此 innodb_buffer_pool_size 需要为 18G(安装 RAM 的 75%)或查询的建议,以较小者为准。

答案2

增加我的 innodb_buffer_pool_size 以便索引空间也能适合是一个好主意吗?

是的。

如果您的数据大小为 11.5GB 并且您的索引超过 11GB,则您可能索引了太多数据,或者索引不正确,并且可能需要找人查看一下。

答案3

如果是具有 24 GB RAM 的 mysql 专用系统,您甚至可以尝试将 innodb_buffer_pool_size 提高到 20 GB。我观察到,如果 RAM 大小增加到 16 GB 以上,我们可以按比例增加 innodb_buffer_pool_size,使其超过 RAM 大小的 75% 这一经验法则。我已在此记录了我的一些观察结果博客并且还提供了 innodb_buffer_pool_size 在线计算器。

相关内容