Jef*_*man 6 mysql innodb mysql-5.5 buffer-pool
我innodb_buffer_pool_size
在具有 12 个 CPU 内核的服务器上将其设置为 20GB。我的完整数据库是 11gb,但其中大部分是几乎从未使用过的存档表。总查询数据约为 3 gb,频繁查询的数据约为 1.25 gb。
我应该设置什么innodb_buffer_pool_instances
?
innodb_buffer_pool_size
/ 总查询数据 = 6 个池实例innodb_buffer_pool_size
/ 经常查询的数据 = 16 个池实例通常我会选择选项 #2,但从逻辑上讲,任何时候可以使用的缓冲池数量似乎不超过 CPU 内核的总数。
设置innodb_buffer_pool_instances
为超过 CPU 核数是一种浪费吗?
小智 1
我认为您不需要为查询的数据设置太多的缓冲池,因为频繁查询的数据的大小并不能完全证明它的合理性。这当然取决于“经常”的定义。
您应该参考有关 innodb 缓冲池的页面的相应文档,此处:
http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-buffer-pools.html
我在这里关注的数字是
经常查询的数据约为 1.25 GB。
当试图保持 InnoDB 缓冲区正确的大小时,我的经验法则是将它们保持在 1GB 或大约 1GB 一块,为了使块列表尽可能短,但又不让缓冲区列表太牵强,这将但始终取决于您的实际需求。
这符合 MySQL 的建议:
为了获得最佳效率,请指定 innodb_buffer_pool_instances 和 innodb_buffer_pool_size 的组合,以便每个缓冲池实例至少为 1 GB。
多个缓冲池的目的是确保您的 CPU 线程在访问数据时不会出现高争用。或者正如他们所说:
您可能会遇到多个线程同时尝试访问缓冲池的瓶颈。您可以启用多个缓冲池来最大限度地减少这种争用。
然而,此功能更适合经常访问的大量数据,而不是系统经常使用的 1.25GB。最终,如果我处在你的位置,我不会认为需要比 CPU 数量更多的缓冲池,假设所有 CPU 都只执行 MySQL 相关任务。我还将研究使用来innodb_old_blocks_time
防止偶尔查询归档表来代替反复使用的数据块的影响。
我希望这有帮助,让我知道一切进展如何。