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日志不建议一直开启,可当问题出现时,开启,分析后关闭,以减少系统资源占用。
posted @ 2021-04-28 10:30  PengXingQiang  阅读(119)  评论(0)    收藏  举报