获取 MySQL 上的数据库请求统计信息

Jef*_*ion 3 mysql

是否有可能的方法来查询(或以任何方式)获取特定模式在 MySQL 数据库上执行的请求数(选择、插入、更新、删除等)。

这背后的原因是我们想要监视和隔离使用大量服务器资源的模式。一旦确定,我们希望将所有模式分组到一个可以处理高消耗模式的单一硬件中。

此外,我们希望有一份报告显示要呈现的统计数据。

MySQL 版本:5.6.16

提前致谢。

Mar*_*ith 6

Jaime 的回答非常好(感谢您的信任)。但是,这仅针对每个模式非常具体地处理“表 IO”(即存储引擎处理程序层的延迟)和文件 IO。

我想建议一个稍微替代的答案,它准确地给出了所要求的内容。这处理所有语句延迟,并计算每种类型语句的数量:

SELECT schema_name,
       substring_index(digest_text, ' ', 1) AS sql_type,
       COUNT(*) AS count,
       sys.format_time(SUM(sum_timer_wait)) AS latency
  FROM performance_schema.events_statements_summary_by_digest
 GROUP BY schema_name, substring_index(digest_text, ' ', 1)
 ORDER BY schema_name, SUM(sum_timer_wait) DESC;

+--------------------+----------+-------+---------------+
| schema_name        | sql_type | count | total_latency |
+--------------------+----------+-------+---------------+
| NULL               | CALL     |     2 | 584.49 ms     |
| NULL               | SELECT   |     2 | 247.07 ms     |
| NULL               | SHOW     |     1 | 16.82 ms      |
| NULL               | CREATE   |     1 | 9.60 ms       |
| NULL               | INSERT   |     1 | 268.62 us     |
| NULL               | SET      |     3 | 225.49 us     |
| performance_schema | SHOW     |     2 | 243.25 ms     |
| performance_schema | SELECT   |     1 | 52.18 ms      |
| performance_schema | INSERT   |     2 | 335.52 us     |
| sys                | CREATE   |   120 | 19.16 s       |
| sys                | SELECT   |    83 | 1.54 s        |
| sys                | DESC     |     2 | 627.22 ms     |
| sys                | DROP     |    38 | 504.05 ms     |
| sys                | SHOW     |     2 | 139.58 ms     |
| sys                | INSERT   |     1 | 88.10 ms      |
| sys                | SET      |     3 | 421.86 us     |
+--------------------+----------+-------+---------------+
Run Code Online (Sandbox Code Playgroud)

NULL schema_name 用于在没有默认数据库(即没有“USE dbname”)的情况下执行的语句。

您还需要安装 sys,但可以跳过 sys.format_time(...),而只需选择 SUM(...),在这种情况下,延迟的值将以皮秒为单位(与 Jaime 的相同)。

由于我还不能发表评论(我在这里的第一个答案!),我还会在这里注意到性能模式表数据不会复制(即使是针对 performance_schema 中的 setup_* 表的 DML),并且上述查询将与5.6 的默认配置(performance_schema 和语句检测都在那里默认启用)。