我们有一个 MySQL 5.7 AWS RDS 实例在 db.m4.large 实例上运行。该实例类型的基本资源是:
- 7.5GB 内存
- 2个虚拟CPU
RDS 默认为将 75% 的 RAM 分配给 innodb_buffer_pool_size 的计算。
{DBInstanceClassMemory*3/4}
这最终是一个 6GB 的分配:
mysql> SELECT @@innodb_buffer_pool_size/1024/1024/1024;
+------------------------------------------+
| @@innodb_buffer_pool_size/1024/1024/1024 |
+------------------------------------------+
| 6.000000000000 |
+------------------------------------------+
在 MySQL 5.7 中,如果您不设置缓冲池实例的数量,那么MySQL 现在默认为 8 个池。但是MySQL 5.7 手册在讨论缓冲池实例时指出了这一点:
您指定的总大小在所有缓冲池中分配。为了获得最佳效率,请指定 innodb_buffer_pool_instances 和 innodb_buffer_pool_size 的组合,以便每个缓冲池实例至少为 1GB。
出于这个原因,我计划将 innodb_buffer_pool_instances 减少到 <= 6。
以下是我的问题:
- CPU 的数量和 buffer_pool_instances 设置之间是否存在某种关联?
- 在这种情况下,使用 4,5 或 6 个 buffer_pool_instances 会更好吗?如果是这样,该建议背后的原因是什么?我的简单反应是将设置更改为 6 个缓冲池实例以满足“至少 1GB”的建议,但我很想听听任何进一步研究过此设置或对此设置进行基准测试的人的意见RDS 与否。