Buffer Pool Tuning

Buffer Pool Instances, Warm-Up, and the Removed Query Cache

innodb_buffer_pool_instances splits the pool into regions with their own mutexes. At startup it is 1 up to a 1 GB pool, otherwise the smaller of half the chunk count and a quarter of the logical CPUs (9 with 36 CPUs visible, 1 with four). Keep the default.

A restart empties the pool, so at shutdown InnoDB saves the page IDs of the hottest 25% (innodb_buffer_pool_dump_pct) to ib_buffer_pool (93 KB here) and reloads them at startup. innodb_buffer_pool_dump_now dumps on demand. After docker restart:

Warm-up status after a restart, and the query cacheSQL
SELECT VARIABLE_NAME, VARIABLE_VALUE FROM performance_schema.global_status
WHERE VARIABLE_NAME IN ('Innodb_buffer_pool_load_status', 'Innodb_buffer_pool_pages_data');
SET GLOBAL query_cache_size = 0;
Output
+--------------------------------+--------------------------------------------------+
| VARIABLE_NAME                  | VARIABLE_VALUE                                   |
+--------------------------------+--------------------------------------------------+
| Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 260923  8:12:47 |
| Innodb_buffer_pool_pages_data  | 12324                                            |
+--------------------------------+--------------------------------------------------+
ERROR 1193 (HY000) at line 3: Unknown system variable 'query_cache_size'

The query cache stored result sets keyed by exact SQL text behind one global mutex, and any write discarded the table's entries, so busy servers ran slower with it. It was removed in 8.0. Only have_query_cache (always NO) remains, and an option file that still sets query_cache_type stops mysqld with unknown variable. Cache results in Redis 2,763 or Memcached 4,600 (APCu, Redis, Memcached and Cache Drivers), in ProxySQL 359,995 , or in a summary table (Scheduled Events).