The reason to break the InnoDB buffer pool into instances is straightforward. By dividing the buffer pool, concurrency is improved so there is less contention between threads. Every instance takes an equal section of the buffer pool, so if innodb_buffer_pool_size
is set to 8GB and innodb_buffer_pool_instances is set to 4, then each instance is 2GB. Ideally, each instance should be a minimum of 1GB in size.
This innodb_buffer_pool_instances variable is depreciated in MariaDB 10.5.1 and completely removed from MariaDB 10.6.0 on, as there are no longer any good reasons to split the buffer pool.
In general, when setting innodb_buffer_pool_instances, it's a good idea to match the maximum number of MySQL threads that will be running simultaneously. It's also important to recognize that setting innodb_buffer_pool_instances too low will cause threads to get stuck and latency will skyrocket.