我的 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,我会开始添加更多内存。