如何降低 MySQL 单页读取量?

如何降低 MySQL 单页读取量?

我的 innodb 缓冲池大小为 8GB,数据库大小为 6GB,但我看到以下情况:

Innodb_buffer_pool_reads 263.5k - InnoDB 无法从缓冲池满足而必须进行单页读取的逻辑读取次数。

有了这样的硬件(i7、24GB RAM、SSD)和那么多可用 RAM,为什么查询会执行“单页读取”?

我怎样才能减少单页读取的次数?

答案1

为什么查询会进行“单页读取”?

因为页面需要至少读入缓冲池一次才能供引擎使用。从您的数字来看,263,500 次读取将占

263,500 pages x 16 KB/page = 4,216,000 KB read

这甚至还不及您的数据库大小。此外,与您的 3,500,000,000 相比,innodb_buffer_pool_read_requests这是一个很小的数字 - 在您的例子中,几乎所有内容都是从缓冲池提供的,无需磁盘 I/O。

答案2

所以这些数字不是以字节为单位的,而是查询数。从数学上看,你似乎很低,这是一件好事。数学是

(Innodb_buffer_pool_read_requests / Innodb_buffer_pool_reads) * 100

如果该数字小于 1,则表示情况良好。另一个了解是否需要更多内存池的好方法是

SHOW ENGINE INNODB STATUS;

在顶部你会看到这个

Buffer pool hit rate 1000 / 1000, young-making rate 1 / 1000 not 0 / 1000

如果接近 1000/1000,这是好事。如果低于 900/1000,我会开始添加更多内存。

相关内容