这正是 Percona Toolkit 的用途(以及许多其他用途)。具体来说,pt-query-digest
(链接)- 您可以将它用于大量实用程序,从慢速查询到检测 SQL 注入。
在这种情况下pt-query-digest
,可以与通过设置 = 0 将所有查询记录到文件long_query_time
的一般策略一起使用。现在,所有查询都记录到慢速查询文件(确保将时间重置为上一个值)。slow_query_log
long_query_time
mysql> SELECT @@GLOBAL.slow_query_log_file;
+------------------------------------------+
| @@GLOBAL.slow_query_log_file |
+------------------------------------------+
| /var/lib/ubuntu/mysql/slowquery.log |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> SET GLOBAL slow_query_log_file='/tmp/sniffed_queries.log';
mysql> SET GLOBAL long_query_time = 0;
mysql> FLUSH LOGS; #Clear the logs
所以现在你有一个方便的 ALL QUERIES 日志在你的服务器上运行,而不用弄乱你的一般日志或另一个表,用 pt-query-digest 分析:
pt-query-digest /tmp/sniffed_queries.log
将产生一个非常有用的伟大输出,你对初学者感兴趣:
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# Profile
# Rank Query ID Response time Calls R/Call Apdx V/M Item
# ==== ================== ============= ===== ====== ==== ===== ==========
# 1 0x92F3B1B361FB0E5B 4.0522 50.0% 312 0.0130 1.00 0.00 SELECT wp_options
# 2 0xE71D28F50D128F0F 0.8312 10.3% 6412 0.0001 1.00 0.00 SELECT poller_output poller_item
# 3 0x211901BF2E1C351E 0.6811 8.4% 6416 0.0001 1.00 0.00 SELECT poller_time
# 4 0xA766EE8F7AB39063 0.2805 3.5% 149 0.0019 1.00 0.00 SELECT wp_terms wp_term_taxonomy wp_term_relationships
# 5 0xA3EEB63EFBA42E9B 0.1999 2.5% 51 0.0039 1.00 0.00 SELECT UNION wp_pp_daily_summary wp_pp_hourly_summary wp_pp_hits wp_posts
# 6 0x94350EA2AB8AAC34 0.1956 2.4% 89 0.0022 1.00 0.01 UPDATE wp_options
# 7 0x7AEDF19FDD3A33F1 0.1381 1.7% 909 0.0002 1.00 0.00 SELECT wp_options
# 8 0x4C16888631FD8EDB 0.1160 1.4% 5 0.0232 1.00 0.00 SELECT film
# 9 0xCFC0642B5BBD9AC7 0.0987 1.2% 50 0.0020 1.00 0.01 SELECT UNION wp_pp_daily_summary wp_pp_hourly_summary wp_pp_hits
# 10 0x88BA308B9C0EB583 0.0905 1.1% 4 0.0226 1.00 0.01 SELECT poller_item
# 11 0xD0A520C9DB2D6AC7 0.0850 1.0% 125 0.0007 1.00 0.00 SELECT wp_links wp_term_relationships wp_term_taxonomy
# 12 0x30DA85C940E0D491 0.0835 1.0% 542 0.0002 1.00 0.00 SELECT wp_posts
# 13 0x8A52FE35D340A347 0.0767 0.9% 4 0.0192 1.00 0.00 TRUNCATE TABLE poller_time
# 14 0x3E84BF7C0C2A3005 0.0624 0.8% 272 0.0002 1.00 0.00 SELECT wp_postmeta
# 15 0xA01053DA94ED829E 0.0567 0.7% 213 0.0003 1.00 0.00 SELECT data_template_rrd data_input_fields
# 16 0xBE797E1DD5E4222F 0.0524 0.6% 79 0.0007 1.00 0.00 SELECT wp_posts
# 17 0xF8EC4434E0061E89 0.0475 0.6% 62 0.0008 1.00 0.00 SELECT wp_terms wp_term_taxonomy
# 18 0xCDFFAD848B0C1D52 0.0465 0.6% 9 0.0052 1.00 0.01 SELECT wp_posts wp_term_relationships
# 19 0x5DE709416871BF99 0.0454 0.6% 260 0.0002 1.00 0.00 DELETE poller_output
# 20 0x428A588445FE580B 0.0449 0.6% 260 0.0002 1.00 0.00 INSERT poller_output
# MISC 0xMISC 0.8137 10.0% 3853 0.0002 NS 0.0
<147 ITEMS>
从这个示例中,您可以看到 SELECT...FROM wp_options 调用的 R/Call 导致了最大的负载。还有很多很棒的其他信息。如果您要坚持使用 mysql,我强烈建议您尽早并且经常使用 percona-toolkit - 我将它们推迟了很长时间,并且仍然为他们本来可以避免的头痛而自责。
Percona 对此有一篇很棒的文章,它是针对他们的 Percona Server MySQL 构建的,非常好,但仍然应该适用:Identifying the load with help of pt-query-digest and Percona Server