gpt4 book ai didi

mysql - 有没有办法在没有慢日志的情况下在 MySQL 中获取 rows_examined?

转载 作者:可可西里 更新时间:2023-11-01 07:04:00 24 4
gpt4 key购买 nike

我正在为自己开发的应用构建一些配置文件信息。我希望调试页面显示发送的查询以及检查了多少行,而不假设 slow_log 已打开,更不用说解析它了。

回到 2006 年,我想要的是 not possible .今天仍然如此吗?

我看到 Peter Zaitsev 有一个 technique你在哪里:

  1. 运行 FLUSH STATUS;
  2. 运行查询。
  3. 运行 SHOW STATUS LIKE "Handler%";

然后在输出中:

Handler_read_next=42250 means 42250 rows were analyzed during this scan

这听起来好像如果 MySQL 只检查索引,它应该给你这个数字。但是是否有一组状态变量可以轮询、加起来并找出检查了多少行?还有其他想法吗?

最佳答案

它比 2006 年稍微好一些。您可以在之前和之后发出 SHOW SESSION STATUS,然后查看每个 Handler_read_* 计数,以便能够判断检查的行数。

真的没有其他办法.. 虽然服务器协议(protocol)有一个标志来说明是否发生了表扫描,但它不会公开 rows_examined。即使像 MySQL 的查询分析器这样的工具也必须通过在之前/之后运行 SHOW SESSION STATUS 来工作(尽管我认为它只在 之后 运行 SHOW SESSION STATUS,因为它会记住以前的值)。

我知道这与您原来的问题无关,但除了 rows_examined 之外,还有其他昂贵的查询组件。如果您选择通过慢速日志执行此操作,您应该查看此补丁:

http://www.percona.com/docs/wiki/patches:microslow_innodb#changes_to_the_log_format

我建议寻找“Disk_tmp_table:是”和“Disk_filesort:是”。

关于mysql - 有没有办法在没有慢日志的情况下在 MySQL 中获取 rows_examined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1637715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com