Mysql 动态 InnoDB 缓冲池大小

Mysql 动态 InnoDB 缓冲池大小

从 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,)

相关内容