
我有一台运行 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 在线计算器。