首页/数据/SQL 速查/缓冲池命中率与物理读
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

缓冲池命中率与物理读

Innodb_buffer_pool_reads 是磁盘读取页数、read_requests 是请求总数:两者比值反映读命中情况。

SQL 速查数据更新于 2026-10-12

示例

示例
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';

-- 命中率 = 1 - reads / read_requests
SELECT
  ROUND(
    (1 - (SELECT VARIABLE_VALUE FROM performance_schema.global_status
           WHERE VARIABLE_NAME = 'Innodb_buffer_pool_reads')
       / (SELECT VARIABLE_VALUE FROM performance_schema.global_status
           WHERE VARIABLE_NAME = 'Innodb_buffer_pool_read_requests'), 4) * 100, 2) AS hit_pct;
read_requests逻辑读请求(包含命中)
reads未命中、需要物理读的次数
判读用短窗口做差;命中率低时先看是否扫了未缓存的大表

易错点

  • 把命中率当唯一指标:低命中但查询快的场景(全扫小表)不代表要扩容缓冲池
  • 用自启动累计值判断当前状态:运行时间长后累计比率几乎不变,需要增量对比

数据来源与参考

  • MySQL 8.0 Reference Manual §5.1.10 Server Status Variables
  • MySQL 8.0 Reference Manual · InnoDB Buffer Pool
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌