Rie*_*sio 40 mysql innodb performance
假设一个主要包含 InnoDB 表的生产 OLTP 系统
任何详述特定status变量和诊断的轶事将不胜感激。
Rol*_*DBA 20
有趣的是,在 MySQL 5.5 中,您现在可以拥有多个 innodb 缓冲池。
你关心的参数是
在大约一个月后,我计划为一个客户端实现 112 个 innodb 缓冲池。我会让你知道它是怎么回事。
我发现 innodb_buffer_pool_instances 的最大值是 64 我决定配置 144 GB,所以我将 innodb_buffer_pool_instances 设置为 18,将 innodb_buffer_pool_size 设置为 8。我目前正在为服务器加载 450GB
我尝试了多个 InnoDB 缓冲池。线程锁定和争用过多。我改为使用单个 162GB 缓冲池 + 将 read_io_threads 和 write_io_threads 设置为 64(最大值)。这工作得更好。
我学到了一些关于 MySQL 的惊人知识。如果您分配的单个 InnoDB 缓冲池大于Total Installed Divided By Number of Physical CPUs,由于完整的 InnoDB 缓冲池,您将促使操作系统定期进行内存交换。MySQL 5.5 的innodb_buffer_pool_instances选项可用于拆分缓冲池。昨天,我为去年回答中提到的客户正确实施了这一点。我仍然有 162GB 用于客户端的缓冲池。我已将服务器的 innodb_buffer_pool_instances 选项设置为 2,因为每个数据库服务器都是双六核。我想将它设置为 12,但后来一位同事向我展示了Jeremy Cole 关于 MySQL 和 Swappiness的博客. 读完后,我立即为我的客户付诸实践。我运行了这个命令
numactl --hardware
Run Code Online (Sandbox Code Playgroud)
我看到 192GB 的服务器 RAM 映射为 96GB 到每个物理核心。因此,我将 innodb_buffer_pool_instances 设置为 2。现在看起来不错。我将更新我的答案,看看这如何影响接下来 2 montns 的内存交换。