假设有一个以 InnoDB 表为主的生产 OLTP 系统
任何详细说明特定变量和诊断的轶事status将不胜感激。
status
我学到了一些关于 MySQL 的惊人的东西。如果您分配的单个单体 InnoDB 缓冲池大于Total Installed Divided By Number of Physical CPUs,则由于 InnoDB 缓冲池已满,您将促使操作系统定期进行内存交换。MySQL 5.5 的选项称为innodb_buffer_pool_instances可用于拆分缓冲池。昨天,我为我去年在回答中提到的客户正确实施了这一点。我仍然有 162GB 用于客户端的缓冲池。我已将服务器的 innodb_buffer_pool_instances 选项设置为 2,因为每个数据库服务器都是双六核。
numactl --hardware
我看到 192GB 的服务器 RAM 映射为 96GB 到每个物理内核。因此,我将 innodb_buffer_pool_instances 设置为 2。现在情况看起来不错。我将更新我的答案,看看这如何影响接下来 2 个月的内存交换。