从 5.7 开始,可以使用以下命令设置“动态”缓冲池大小:
innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
这究竟是如何工作的?我有一台相当小的服务器,有 4 个核心和 16GB RAM,上面有一个 PHP 业务应用程序。我现在已将 8GB 设置为静态池缓冲区(密钥效率约为 70-80%,缓冲区使用率为 99%)。
服务器上还有一个 Java MassMailer,平均每天运行一次,因此我为邮件程序保留了约 8GB 的可用空间。我对 MassMailer 进行了编程,使其只加载内存允许的尽可能多的电子邮件。
我可以使用新的动态缓冲池功能在正常工作负荷期间分配大约 12GB 的内存,并在发送邮件时占用一些内存吗?我可以手动调整它还是 MySQL 服务器会自动调整?如果邮件发送者需要更多内存,服务器会归还一些内存吗,还是会抛出“内存不足”异常?
答案1
chunk_size 设置用于动态更改innodb_buffer_pool_size
。我认为除了实验之外,更改 buffer_pool_size 没有任何用处。
记忆:
- 16GB RAM
- Java 占用 8GB——这包括 MassMailer 以外的其他 Java 用途吗?
- 剩下 8GB 给 MySQL
- 将buffer_pool设置为其中的70%左右,即
5.6G
。 - 如果您看到交换,则缓冲池应该进一步缩小。
- 动态改变buffer_pool_size将会阻塞MySQL活动(在一定程度上)。
如果你动态地为 MySQL 提供更多空间,则需要同时从 Java 中撤出 RAM。这似乎太笨拙且容易出错。
我认为邮件程序是网络绑定的,因此尝试优化 RAM 可能不值得。
(MySQL DBA 问题位于 dba.stackexchange.com,)