Almost every “the database is slow” investigation ends at the same place: the working set no longer fits in memory, so reads that used to be free are now disk. One ratio says whether that is what is happening.
SELECT ROUND(100 * (1 - (
SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'INNODB_BUFFER_POOL_READS'
) / (
SELECT VARIABLE_VALUE FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'INNODB_BUFFER_POOL_READ_REQUESTS'
)), 2) AS hit_rate_pct;
Above 99% is healthy and the number is cumulative since restart, so a server up for six months averages away a bad week — the useful version samples both counters twice and computes the rate over the interval. A falling hit rate with unchanged traffic means the data grew past the pool, and the fix is either more memory or less data, not a better index.