ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

springboot 如何统计SQL执行情况?

2022-02-25 19:02:49  阅读:194  来源: 互联网

标签:springboot 配置 druid Druid 统计 监控 SQL 连接池


1.情景展示

在项目运行过程中,为了监控项目的运行状况,除了日志之外,最好还能监控SQL的执行情况,如何实现?

2.具体分析

通过阿里的druid来实现。

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。

Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

功能介绍:

配置Druid数据源(连接池): 如同以前 c3p0、dbcp 数据源可以设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等一样,Druid 数据源同理可以进行设置;

配置 Druid web 监控 filter(WebStatFilter): 这个过滤器的作用就是统计 web 应用请求中所有的数据库信息,比如 发出的 sql 语句,sql 执行的时间、请求次数、请求的 url 地址、以及seesion 监控、数据库表的访问次数 等等。

配置 Druid 后台管理 Servlet(StatViewServlet): Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装 路由器 时,人家也提供了一个默认的 web 页面;需要设置 Druid 的后台管理页面的属性,比如 登录账号、密码 等;

3.解决方案

第一步:引入jar包;

<!--数据库连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>

第二步:配置数据库连接池;

####spring配置####
spring:
  ###数据库配置
  datasource:
    ##要使用的连接池实现的全称
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      #最大连接数
      max-active: 5000
      #初始化大小
      initial-size: 10
      #最小连接数
      min-idle: 1
      #获取连接等待超时时间(单位:毫秒)
      max-wait: 60000
      #间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      #一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 30000
      #启用游标缓存
      pool-prepared-statements: true
      #最大可打开的游标数
      max-pool-prepared-statement-per-connection-size: 20
      #检验连接是否有效的查询语句。如果数据库Driver支持ping()方法,则优先使用ping()方法进行检查,否则使用validationQuery查询进行检查。(Oracle jdbc Driver目前不支持ping方法)
      validation-query: SELECT 1 FROM DUAL
      #应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用
      test-while-idle: true
      #应用向连接池申请连接时,连接池会判断这条连接是否是可用的,默认值false
      test-on-borrow: false
      #当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用,默认值false
      test-on-return: false
      #关闭自动重连
      connection-error-retry-attempts: 0
      break-after-acquire-failure: true

第三步:配置监控页面;

####spring配置####
spring:
  ###数据库配置
  datasource:
    ##druid配置
    druid:
      #配置监控统计拦截的filters,去掉后监控界面SQL无法进行统计,'wall'用于防火墙
      #值:config,stat,wall,log4j2(stat必须,否则监控不到SQL)
      filters: stat
      #配置StatViewServlet(监控页面),用于展示Druid的统计信息
      stat-view-servlet:
        # 启用StatViewServlet
        enabled: true
        # 访问内置监控页面的路径,内置监控页面的首页是/druid/index.html
        url-pattern: /druid/*
        # 不允许清空统计数据,重新计算
        reset-enable: false
        # 配置监控页面访问密码
        login-username: root
        login-password: 123
        # 允许访问的地址,如果allow没有配置或者为空,则允许所有访问
        #allow: localhost
        # 拒绝访问的地址,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝
        #deny:

说明:我这里没有配置数据源!!!

第四步:查看监控页面。

启动项目后,访问/druid/login.html来到登录页面,输入用户名和密码完成登录。

SQL监控

可以查看的具体执行的SQL语句,可以展示的列进行排序。

慢SQL记录功能

我们可以把慢SQL记录到日志当中。

spring:
  datasource:
    druid:
      filter:
        stat:
          enabled: true         # 开启DruidDataSource状态监控
          db-type: mysql        # 数据库的类型
          log-slow-sql: true    # 开启慢SQL记录功能
          slow-sql-millis: 2000 # 默认3000毫秒,这里超过2s,就是慢,记录到日志

URL监控

springAOP监控

添加aop依赖

<!--SpringBoot 的aop 模块-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

在 application.yml 配置aop切入点,配置多个英文逗号分隔。

spring:
  datasource:
    druid:
      aop-patterns: com.springboot.template.dao.*

去除页面的广告

到本地仓库,按路径查找common.js;

com/alibaba/druid/1.1.23/druid-1.1.23.jar/support/http/resources/js/common.js

将this.buildFooter();删掉。

其它内容见文末推荐。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

标签:springboot,配置,druid,Druid,统计,监控,SQL,连接池
来源: https://www.cnblogs.com/Marydon20170307/p/15937409.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有