是否有可能的方法来查询(或以任何方式)获取特定模式在 MySQL 数据库上执行的请求数(选择、插入、更新、删除等)。
这背后的原因是我们想要监视和隔离使用大量服务器资源的模式。一旦确定,我们希望将所有模式分组到一个可以处理高消耗模式的单一硬件中。
此外,我们希望有一份报告显示要呈现的统计数据。
MySQL 版本:5.6.16
提前致谢。
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 和语句检测都在那里默认启用)。