#### 15.8.3.2 配置多个缓冲池实例

[](<>)[](<>)[](<>)

对于具有数 GB 范围内缓冲池的系统，将缓冲池划分为单独的实例可以通过减少不同线程读取和写入缓存页面时的争用来提高并发性。此功能通常适用于具有[缓冲池](glossary.html#glos_buffer_pool)大小在数 GB 范围内。多个缓冲池实例使用[`innodb_buffer_pool_instances`](innodb-parameters.html#sysvar_innodb_buffer_pool_instances)配置选项，你也可以调整[`innodb_buffer_pool_size`](innodb-parameters.html#sysvar_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_instances`](innodb-parameters.html#sysvar_innodb_buffer_pool_instances)和[`innodb_buffer_pool_size`](innodb-parameters.html#sysvar_innodb_buffer_pool_size)使每个缓冲池实例至少为 1GB。

有关修改的信息`InnoDB`缓冲池大小，请参阅[第 15.8.3.1 节，“配置 InnoDB 缓冲池大小”](innodb-buffer-pool-resize.html).
