• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 配置多个缓冲池实例

    对于缓冲池在数千兆字节范围内的系统,将缓冲池划分为多个单独的实例可以通过减少争用不同线程读写缓存页面的争用来提高并发性。此功能通常用于缓冲池大小在数GB范围内的系统。使用innodb_buffer_pool_instances配置选项配置了多个缓冲池实例,您也可以调整该innodb_buffer_pool_size值。

    InnoDB缓冲池很大时,可以通过从内存中检索来满足许多数据请求。您可能会遇到多个线程同时尝试访问缓冲池的瓶颈。您可以启用多个缓冲池以最小化此争用。使用散列函数,将存储在缓冲池中或从缓冲池读取的每个页面随机分配给其中一个缓冲池。每个缓冲池管理自己的空闲列表,刷新列表,LRU以及连接到缓冲池的所有其他数据结构。在MySQL 8.0之前,每个缓冲池都由其自己的缓冲池互斥体保护。在MySQL 8.0和更高版本中,缓冲池互斥锁被多个列表和哈希保护互斥锁所取代,以减少争用。

    要启用多个缓冲池实例,请将innodb_buffer_pool_instances配置选项设置为大于1(默认)的值,最大为64(最大)。仅当您将innodb_buffer_pool_size大小设置为1GB或更大时,此选项才生效。您指定的总大小将分配给所有缓冲池。为了获得最佳效率,指定的组合innodb_buffer_pool_instancesinnodb_buffer_pool_size,使得每个缓冲池实例是至少为1GB。

    有关修改InnoDB缓冲池大小的信息,请参见“配置InnoDB缓冲池大小”。