本文介绍如何使用 mysqldumpslow 和 pt-query-digest 工具将 MySQL 慢查询日志可视化。
使用 mysqldumpslow 工具可视化 MySQL 慢查询日志
mysqldumpslow -s t -t 10 /path/to/slow-query.log
以上命令会将慢查询日志按照时间(-s t)进行排序,只显示最耗时的前 10 条语句(-t 10)。运行结果如下:
Count: 2 Time=0.01s (0s) Lock=0.00s (0s) Rows=6.0 (12), root[root]SELECT * FROM `users` WHERE age >18 Count: 2 Time=0.10s (0s) Lock=0.00s (0s) Rows=50.0 (100), root[root]SELECT * FROM `orders` WHERE status = 'wait'
其中,Count 表示此条 SQL 语句在慢查询日志中出现的次数。Time 表示此条 SQL 语句在 MySQL 中所花费的时间,包括执行时间(内部时间)和等待时间(锁定时间)。Lock 表示此条 SQL 语句在等待锁定资源上所花费的时间。
使用 pt-query-digest 工具可视化 MySQL 慢查询日志
pt-query-digest /path/to/slow-query.log
以上命令会将慢查询日志分析并生成报告,其中包含 MySQL 数据库的必要性能信息和一些既定的统计数据。
运行结果如下:
# Profile # Rank Query ID Response time Calls R/Call Apdx V/M Item # ==== ================== ================ ===== ========== ==== ===== ============ # 1 0x862E480587F30CDC 31.7738 22.2% 7786 0.0041 0.00 SELECT user_info WHERE user_name = 'admin' # 2 0x5A5FCF87A7D9B98B 23.1570 16.2% 5878 0.0039 0.00 SELECT user_info WHERE user_name = 'test' # 3 0x4AE4B318E0FB7CA1 9.3920 6.6% 748 0.0126 0.00 SELECT * FROM orders WHERE status = 'wait' LIMIT 10 # 4 0x72969B4221D86557 8.1837 5.7% 37 0.2214 0.00 SELECT id FROM orders WHERE status = 'wait' AND created_at18 LIMIT 10 # 6 0xBEB3871B5938C415 5.1205 3.6% 38 0.1345 0.00 SELECT oauth_users.*, oauth_clients.client_id, oauth_clients.client_name FROM oauth_authorization_codes INNER JOIN oauth_clients ON oauth_authorization_codes.client_id = oauth_clients.id INNER JOIN oauth_users ON oauth_authorization_codes.user_id = oauth_users.id GROUP BY oauth_authorization_codes.id
其中,Query ID 表示此 SQL 语句的哈希值。Response time 表示请求此 SQL 语句所花费的总时间。Calls 表示此 SQL 语句在慢查询日志中出现的次数。R/Call 表示此 SQL 语句的平均响应时间。
两种方法都可以对 MySQL 慢查询日志进行可视化分析,使结果更加直观和易于阅读。