MySQL

InnoDB Buffer Pool Thrashing

warning
Resource ContentionUpdated May 13, 2025

Working set exceeds available buffer pool memory, forcing excessive disk reads. Buffer pool efficiency drops as pages are constantly evicted and reloaded, causing disk I/O saturation and query latency increases.

How to detect:

mysql.buffer_pool.data_pages shows low hit ratio (<95%) with mysql.innodb.buffer_pool_read_requests >> mysql.buffer_pool.operations (reads), mysql.innodb.data_reads elevated, and mysql.innodb.pending_normal_aio_reads > 0 sustained

Recommended action:

Check buffer pool utilization: calculate (mysql.buffer_pool.pages - mysql.buffer_pool.pages{state='free'}) / mysql.buffer_pool.pages. If near 100%, working set exceeds buffer pool. Scale up instance class to increase available memory for buffer pool. Query performance_schema.table_io_waits_summary_by_table to identify tables causing most disk reads. Consider partitioning large tables or archiving old data. Monitor mysql.innodb.buffer_pool_wait_free - if non-zero, buffer pool is under severe pressure.