当前位置: 首页 > news >正文

【Spring Boot】Druid 连接池 YAML 配置详解

文章目录

  • 一、Druid 连接池 YAML 配置详解
    • 基础配置
    • 高级配置
    • 监控配置
    • 过滤器详细配置
    • 多数据源配置
    • 生产环境推荐配置
    • 配置优化建议
  • 二、拓展
    • 1、分析慢SQL日志的方法
      • 1. 查看慢SQL日志
        • 访问Druid监控界面
        • 直接查看日志文件
      • 2. 分析慢SQL的关键维度
      • 3. 常见慢SQL优化方法
        • 索引优化
        • SQL语句重构
        • 数据库设计优化
      • 4. 定期分析建议
      • 5. 高级分析技巧

一、Druid 连接池 YAML 配置详解

Druid 是阿里巴巴开源的数据库连接池,提供强大的监控和扩展功能。以下是完整的 YAML 配置说明和优化建议。

基础配置

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:# 基本连接配置url: jdbc:mysql://localhost:3306/db_name?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# 连接池大小配置initial-size: 5        # 初始化连接数min-idle: 5            # 最小空闲连接数max-active: 20         # 最大连接数max-wait: 60000        # 获取连接等待超时时间(毫秒)# 连接有效性检查validation-query: SELECT 1test-while-idle: true   # 空闲时检查连接有效性test-on-borrow: false   # 获取连接时不检查(影响性能)test-on-return: false   # 归还连接时不检查# 连接回收配置time-between-eviction-runs-millis: 60000  # 检查间隔(毫秒)min-evictable-idle-time-millis: 300000    # 连接最小生存时间max-evictable-idle-time-millis: 900000    # 连接最大生存时间

高级配置

spring:datasource:druid:# 连接属性配置connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000# 过滤器配置(统计、监控、防火墙等)filters: stat,wall,slf4j# 启用PSCache(MySQL建议关闭)pool-prepared-statements: falsemax-pool-prepared-statement-per-connection-size: -1# 全局数据源配置use-global-data-source-stat: true# 连接泄漏检测remove-abandoned: true                  # 是否移除泄露连接remove-abandoned-timeout: 1800         # 泄露连接回收超时(秒)log-abandoned: true                    # 记录泄露日志# 异步初始化async-init: true

监控配置

spring:datasource:druid:# Web统计过滤器配置web-stat-filter:enabled: trueurl-pattern: /*exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"session-stat-enable: truesession-stat-max-count: 100# StatViewServlet配置(监控页面)stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: falselogin-username: adminlogin-password: adminallow: 127.0.0.1,192.168.1.1deny: 192.168.1.100

过滤器详细配置

spring:datasource:druid:filter:stat:enabled: truelog-slow-sql: true          # 记录慢SQLslow-sql-millis: 1000       # 慢SQL阈值(毫秒)merge-sql: true              # 合并相似SQLwall:enabled: trueconfig:drop-table-allow: false    # 禁止DROP TABLEalter-table-allow: false   # 禁止ALTER TABLEdelete-where-none-check: true  # 检查无WHERE的DELETEconfig:enabled: true

多数据源配置

spring:datasource:druid:# 主数据源master:url: jdbc:mysql://master-host:3306/dbusername: master_userpassword: master_passinitial-size: 5max-active: 20# 从数据源slave:enabled: trueurl: jdbc:mysql://slave-host:3306/dbusername: slave_userpassword: slave_passinitial-size: 5max-active: 15# 公共配置stat-view-servlet:enabled: trueurl-pattern: /druid/*

生产环境推荐配置

spring:datasource:druid:# 连接池核心配置initial-size: 5min-idle: 5max-active: 50max-wait: 60000# 连接有效性检查validation-query: SELECT 1test-while-idle: truetest-on-borrow: falsetest-on-return: false# 连接回收time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000# 监控配置filters: stat,wallweb-stat-filter:enabled: truestat-view-servlet:enabled: truelogin-username: monitorlogin-password: monitor123allow: 10.10.10.1,192.168.1.0/24# 防火墙配置filter:wall:config:delete-where-none-check: truemulti-statement-allow: false

配置优化建议

  1. 连接池大小

    • initial-sizemin-idle 建议相同
    • max-active 根据应用负载调整,通常20-100
  2. MySQL 8小时问题

    time-between-eviction-runs-millis: 60000      # 1分钟检查一次
    min-evictable-idle-time-millis: 28000000     # 7小时46分钟(略小于8小时)
    
  3. 监控安全

    • 务必修改监控页面的默认账号密码
    • 配置IP白名单限制访问
  4. 慢SQL监控

    filter:stat:slow-sql-millis: 1000       # 定义慢SQL阈值log-slow-sql: true          # 记录慢SQL
    
  5. 防火墙规则

    • 生产环境应启用wall过滤器
    • 根据业务需要配置安全规则

通过以上配置,可以充分发挥Druid连接池的高性能和强大监控能力,适合企业级应用场景。

二、拓展

1、分析慢SQL日志的方法

开启慢SQL日志后(Druid配置如下),您可以通过以下步骤有效分析和优化慢查询:

filter:stat:enabled: true# 慢SQL记录log-slow-sql: trueslow-sql-millis: 1000  # 执行超过1秒的SQL会被记录merge-sql: true        # 合并相似SQL

1. 查看慢SQL日志

访问Druid监控界面
  1. 应用启动后访问 http://你的域名或IP:端口/druid
  2. 使用配置的用户名密码登录(示例中为ruoyi/123456)
  3. 在"SQL监控"和"慢SQL"标签页查看记录
直接查看日志文件

如果配置了日志输出,可以在应用日志中搜索"slow sql"相关记录

2. 分析慢SQL的关键维度

在监控界面中,重点关注以下列:

列名说明分析要点
SQLSQL语句内容识别是否有全表扫描、复杂连接
执行次数该SQL被执行的次数高频SQL优先优化
执行时间总耗时和最大耗时找出最耗时的操作
影响行数扫描/返回的行数检查是否扫描过多数据
数据源来自主库还是从库判断读写分离是否合理

3. 常见慢SQL优化方法

索引优化
  1. 检查WHERE条件字段是否有索引
    EXPLAIN SELECT * FROM users WHERE username = 'test';
    
  2. 避免索引失效的情况:
    • 使用!=<>NOT IN
    • 对字段进行函数操作WHERE DATE(create_time) = '2023-01-01'
    • 隐式类型转换WHERE user_id = '123'(user_id是int)
SQL语句重构
  1. 减少SELECT *,只查询需要的列
  2. 拆分复杂查询,避免多表JOIN时产生笛卡尔积
  3. 使用分页查询避免大数据量返回
    -- 不好
    SELECT * FROM orders;-- 较好
    SELECT id, order_no, amount FROM orders LIMIT 20 OFFSET 0;
    
数据库设计优化
  1. 考虑大表分库分表
  2. 适当增加冗余字段减少JOIN操作
  3. 对TEXT/BLOB大字段单独存表

4. 定期分析建议

  1. 设置自动报表:定期(如每周)导出慢SQL统计
  2. 建立优化清单:按影响程度(Pareto原则)排序处理
  3. 性能测试验证:优化后对比执行计划和时间
  4. 监控趋势:观察慢SQL数量是否随业务增长而增加

5. 高级分析技巧

  1. 使用EXPLAIN分析执行计划

    EXPLAIN FORMAT=JSON SELECT * FROM orders WHERE user_id = 100;
    
  2. 关联应用日志:将慢SQL与当时的请求参数、业务场景关联分析

  3. 使用性能分析工具

    • Percona Toolkit的pt-query-digest
    • MySQL Enterprise Monitor
    • VividCortex等专业APM工具

通过系统性地分析慢SQL日志,您可以显著提升数据库性能,通常能解决80%以上的数据库性能问题。

http://www.dtcms.com/a/266749.html

相关文章:

  • 马尔可夫链:随机过程的记忆法则与演化密码
  • 在LinuxMint 22.1(Ubuntu24.04)上安装使用同花顺远航版
  • 力扣刷题记录【1】146.LRU缓存
  • 【机器人】复现 DOV-SG 机器人导航 | 动态开放词汇 | 3D 场景图
  • 设计模式-应用分层
  • 【狂飙AGI】第8课:AGI-行业大模型(系列2)
  • NumPy-核心函数np.dot()深入理解
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之高斯椭球的颜色表达
  • 鸿蒙开发BindSheet选择章节效果
  • 服务器间接口安全问题的全面分析
  • 数据集-目标检测系列- 卡车 数据集 truck >> DataBall
  • 代码随想录算法训练营第四十六天|动态规划part13
  • 【LeetCode 热题 100】238. 除自身以外数组的乘积——(解法一)前缀积与后缀积
  • 算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • 物联网数据安全区块链服务
  • AI Agent意图识别
  • 二维码驱动的独立站视频集成方案
  • Mysql+neo4j创建节点和关系
  • Linux操作系统之文件(三):缓冲区
  • Kubernetes 服务发布基础学习
  • OpenSSL 内存泄漏修复全景:119 个历史 Commit 的类型分析与防御启示
  • 人工智能及其十大优势 Artificial Intelligence: With Its Advantages
  • PyCharm 安装使用教程
  • (LeetCode 每日一题) 3307. 找出第 K 个字符 II (位运算、数学)
  • 电力市场化改革中的智能决策革命:大模型与交易双驱动模式探析
  • 【微服务】记录-登录信息传递过程
  • 【AI大模型】深入理解 Transformer 架构:自然语言处理的革命引擎
  • LangChain 全面入门
  • Java 大视界 -- Java 大数据实战:智能安防入侵检测的特征工程与模型融合全解析
  • 文本分词 nltk