聊聊如何利用 p6spy 进行 sql 监控
聊聊如何利用 p6spy 进行 sql 监控
前言
1、p6spy 简介
P6Spy 是一个框架,无需对现有应用程序进行任何代码更改,即可无缝拦截和记录数据库数据。通过 P6Spy 我们可以对 SQL 语句进行拦截,相当于一个 SQL 语句的记录器,这样我们可以用它来作相关的分析,比如性能分析
2、实现原理
p6spy 将应用的数据源给劫持了,应用操作数据库其实在调用 p6spy 的数据源,p6spy 劫持到需要执行的 sql 或者 hql 之类的语句之后,他自己去调用一个 realDatasource,再去操作数据库
3、相关官方文档
github : https://github.com/p6spy/p6spy
官网:https://p6spy.readthedocs.io/en/latest/index.html
02
p6spy 使用
1、在项目中的 pom 引入相关的 GAV
<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>${p6spy.version}</version></dependency>2、切换项目中的 jdbc 驱动以及数据源
改成如下内容
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: {DATASOURCE_URL:jdbc:p6spy:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai}username: {DATASOURCE_PWD:123456}3、在 resource 目录下添加 spy.properties
配置如示例下内容
#3.2.1 以上使用 modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory#3.2.1 以下使用或者不配置 #modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
自定义日志打印
#logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLoggerlogMessageFormat=com.github.lybgeek.p6spy.extentsion.CustomP6SpyLogger#日志输出到控制台 #appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLoggerappender=com.github.lybgeek.p6spy.extentsion.CustomStdoutLogger
设置 p6spy driver 代理
deregisterdrivers=true
取消 JDBC URL 前缀
useprefix=true
配置记录 Log 例外,可去掉的结果集有 error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
日期格式
dateformat=yyyy-MM-dd HH:mm:ss
实际驱动可多个
#driverlist=org.h2.Driver
是否开启慢 SQL 记录
outagedetection=true
慢 SQL 记录标准 2 秒
outagedetectioninterval=24、自定义日志格式【可选】
public class CustomP6SpyLogger implements MessageFormattingStrategy {
}在 spy.properties 中配置自定义日志格式
logMessageFormat=com.github.lybgeek.p6spy.extentsion.CustomP6SpyLogger5、自定义日志输出【可选】
public class CustomStdoutLogger extends com.p6spy.engine.spy.appender.StdoutLogger{
}在 spy.properties 中配置自定义日志输出
appender=com.github.lybgeek.p6spy.extentsion.CustomStdoutLogger6、测试观察控制台输出
sql: 耗时:1 ms 2022-05-10 11:38:34 执行 SQL:SELECT id,username,password,fullname,mobile,email FROM t_user
03
总结
p6spy 可以根据 sql 的执行效率分析 sql 对 sql 进行优化,但因为 p6spy 会对性能有一定影响,因此不适合在正式环境上使用。此外关于 p6spy 更详细的配置可以查看如下链接
评论