✨项目简介
在最近一次mysql数据库问题排查中, 为了找到是哪些查询sql导致数据库的压力过大, 查询时间过长, 接触到慢查询日志文件。
数据库设置的时间大于2秒, 定义为慢查询。没想到的是, 居然有如此多慢查询语句。一方面, 有的表数据量上去了, 查询语句未走索引。另一方面查询语句一次查询数据量过大(一次性几十万条数据)。
日志文件中确实可以看到慢查询的信息, 但是却没有统计的能力。比如我的某一个sql一次查询了几十万条数据到客户端, 而导致后面的查询都慢了, 我不能说后面的查询都是有问题, 而我要找的也正是这几十万条数据的查询语句。
所以 , 我需要将慢查询日志转化为数据表, 让我可以从多个单一纬度, 或者多组合纬度来寻找我想要的慢查询。SlowLogParser就这样诞生了。
♨️如何使用
数据库表创建
CREATE TABLE `slow_record` (
`id` bigint NOT NULL AUTO_INCREMENT,
`query_time` datetime DEFAULT NULL,
`user` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`host` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
`user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`query_time_cost` double DEFAULT NULL,
`lock_time` double DEFAULT NULL,
`rows_sent` bigint DEFAULT NULL,
`rows_examined` bigint DEFAULT NULL,
`query_sql` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24496 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
配置文件
在 application.properties 中, 配置数据库连接信息与慢查询日志文件位置
例如:
mysql.username=root
mysql.password=root
mysql.url=jdbc:mysql://localhost:3306/sc
slow.log.path=D:\\slow.log
启动类
com.fd.SlowLogParser