MySQL慢查询还可以这么分析
概述
慢查询往往是导致性能问题的主要原因之一,MySQL支持将慢SQL日志写入文件,由于格式为文本文件,因此需要借助工具或其他方式展现才便于分析。
今天介绍一种方式,可以通过SQL语句来检索慢查询信息。思路在于MySQL即支持将慢SQL日志写入文件,也支持写入系统表,或者二者同时写入。
进入刚子的架构笔记学习更多技术知识
https://www.cnblogs.com/gz16075140/p/14711852.html
下面直接上步骤:
步骤
1.查看当前慢SQL输出方式,命令如下:
show variables like 'log_output';
2. 设置日志输出格式,将日志写入系统表,命令如下:
set global log_output = 'file,table';
3. 查看慢SQL日志表结构,命令如下:
show create table mysql.slow_log;
4. 查询慢SQL表
慢SQL日志写入到数据库mysql的slow_log表中,表结构如下:
DROP TABLE IF EXISTS `slow_log`;
CREATE TABLE `slow_log` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) ,--开始时间
`user_host` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`query_time` time(6) NOT NULL, -- 查询用时
`lock_time` time(6) NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) UNSIGNED NOT NULL,
`sql_text` mediumblob NOT NULL,
`thread_id` bigint(21) UNSIGNED NOT NULL
) ENGINE = CSV CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'Slow log' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
注意事项
由于慢SQL日志的写入量,是受慢SQL定义的长短和业务量决定的,当写入量较大时,写入系统表,会对当前数据库实例的性能有一定影响。建议如下:
1. 通过set global log_output 设置的属性,当数据库重启就失效了,如果需要固化,则配置在mysql配置文件中(linux通常是my.cnf)。
2. 结合自身业务特点,基础资源情况开启。
3. 慢SQL日志不建议一直开启,可当问题出现时,开启,分析后关闭,以减少系统资源占用。

浙公网安备 33010602011771号