检查上次查询中是不是使用了缓冲区

Posted

技术标签:

【中文标题】检查上次查询中是不是使用了缓冲区【英文标题】:Check if buffer was used in last query检查上次查询中是否使用了缓冲区 【发布时间】:2018-04-15 23:38:01 【问题描述】:

我想知道是否有任何query/config/trick/etc 来了解innodb_buffer 是否用于获取last query 的结果。

PS:这是在性能调整的背景下,我不想让事情保持最佳猜测,所以如果使用buffer_pool 或使用正常的数据库查找,有什么方法可以提供具体证据。

PPS:我已经搜索过相关术语,例如

检查缓冲区是否被mysql使用 Innodb 缓冲区使用检查 验证结果是否从缓冲池或数据存储中加载。等等。

【问题讨论】:

dba.stackexchange.com/questions/171/… 【参考方案1】:

注意GLOBAL STATUSInnodb% 的变化。 Handler% 同上。

我喜欢这样做是为了弄清楚查询中发生了什么:

 FLUSH STATUS;
 SELECT ...
 SHOW SESSION STATUS LIKE 'Handler%';

它准确地告诉我有多少行被触摸了多少次。以及是否正在使用临时表以及它有多大(以行为单位)。等等。

在 InnoDB 查询中不会“使用”buffer_pool 的唯一方法是使用查询缓存。

您可能要钓的不是buffer_pool是否“已使用”,而是是否必须从磁盘中获取一个块才能使用它?

【讨论】:

以上是关于检查上次查询中是不是使用了缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Emacs 中是不是存在当前缓冲区?

检查指针是不是已分配内存

检查 write()/send() 是不是可以无块地处理整个缓冲区,否则失败(没有部分写入)

将标准输出重定向到缓冲区,而不是使用 >

有啥方法可以检查在 C 中的缓冲区中写入了多少数据/字节

mysql的缓冲查询和非缓冲查询