典型问题 数据库慢速sql

数据库慢速sql

典型问题 / 典型问题/性能/数据库慢速sql.md

链接池用满/数据库慢速sql

典型现象/特征

  1. 前台出现“数据库连接紧张”“获取数据库连接失败”等类似提示
  2. 单个或多个服务接口响应慢、请求超时
  3. 异常服务通常连接同一个数据库或同一台数据库物理服务器
  4. 应用日志中出现数据库连接超时、连接池打满、新建连接失败等异常
  5. 数据库服务器 CPU、内存、磁盘 IO 等资源可能异常
  6. 慢 SQL 数量明显增加,接口耗时主要集中在数据库访问环节

排查确认步骤

  1. 1.先检查数据库服务器监控,重点关注相关数据库服务器的 CPU、内存、磁盘 IO、连接数、会话数等资源指标是否正常。( 系统监控查看说明)
  2. 2.再查看相关服务系统监控( 系统运维接口),例如 service/edoc335172694483814428/druid/datasource.html,重点观察最大连接数、活跃连接数、活跃连接数峰值、池中连接数、池中连接数峰值等指标;如果活跃连接数或池中连接数达到最大连接数,可确认当前连接池已被打满,或曾在某一时段被打满。
  3. 3.随后查看应用日志,重点搜索数据库连接紧张,新建连接失败,获取连接失败,GetConnectionTimeoutException,CannotGetJdbcConnectionException,Connection is not available等关键字,并结合数据库监控判断异常时段数据库资源是否存在瓶颈。如果数据库资源充足,则问题更可能来自服务本身,例如连接未释放、线程阻塞、并发过高或连接池参数配置不合理。
  4. 4.如果当前服务仍处于连接池打满状态,可访问线程监控页面( 系统运维接口),例如 service/edoc335172694483814428/monitor/thread-info,导出线程堆栈并分析大量线程是否阻塞在数据库查询、获取连接、锁等待、远程调用或其他耗时操作上。
  5. 5.之后再结合问题时段的数据库慢查询日志,优先获取带实际参数的 SQL 并查看执行计划,重点判断是否缺少索引索引未命中执行计划异常扫描行数过高查询条件不足业务场景触发了大范围查询

分析工具

  1. 一键采集工具
  2. 一键巡检工具
  3. 系统监控查看说明
  4. 系统日志查看指引
  5. 系统运维接口
  6. 线程堆栈分析
  7. 慢 SQL 统计与分析
  8. SQL 执行计划分析

常见应急恢复策略

  1. 如果是单个慢 SQL 导致,可联系研发确认是否可以在数据库层面终止对应查询连接;
  2. 如果确认存在索引缺失或索引失效,应优先补充对应表索引。
  3. 若问题来源于数据库服务异常,可考虑重启数据库或联系 DBA 运维处理;
  4. 若数据库服务器本身存在资源异常,则通常需要联系客户运维支持,增加资源或重启机器,并取得相应授权确认。
  5. 如果确认是服务数据库连接池配置不足导致,可适当调整 Nacos 中数据库连接池相关配置,例如 seeyon.datasource.initial-sizeseeyon.datasource.min-idleseeyon.datasource.max-activeseeyon.datasource.max-wait 等参数,必要时联系对应服务研发确认推荐值。
  6. 如果问题由业务激增导致线程和连接不足,也可通过增加服务负载节点和 pod 数量进行缓解。