典型问题
数据库慢速sql
数据库慢速sql
典型问题 / 典型问题/性能/数据库慢速sql.md
链接池用满/数据库慢速sql
典型现象/特征
- 前台出现“数据库连接紧张”“获取数据库连接失败”等类似提示
- 单个或多个服务接口响应慢、请求超时
- 异常服务通常连接同一个数据库或同一台数据库物理服务器
- 应用日志中出现数据库连接超时、连接池打满、新建连接失败等异常
- 数据库服务器 CPU、内存、磁盘 IO 等资源可能异常
- 慢 SQL 数量明显增加,接口耗时主要集中在数据库访问环节
排查确认步骤
- 1.先检查数据库服务器监控,重点关注相关数据库服务器的 CPU、内存、磁盘 IO、连接数、会话数等资源指标是否正常。( 系统监控查看说明)
- 2.再查看相关服务系统监控( 系统运维接口),例如
service/edoc335172694483814428/druid/datasource.html,重点观察最大连接数、活跃连接数、活跃连接数峰值、池中连接数、池中连接数峰值等指标;如果活跃连接数或池中连接数达到最大连接数,可确认当前连接池已被打满,或曾在某一时段被打满。 - 3.随后查看应用日志,重点搜索
数据库连接紧张,新建连接失败,获取连接失败,GetConnectionTimeoutException,CannotGetJdbcConnectionException,Connection is not available等关键字,并结合数据库监控判断异常时段数据库资源是否存在瓶颈。如果数据库资源充足,则问题更可能来自服务本身,例如连接未释放、线程阻塞、并发过高或连接池参数配置不合理。 - 4.如果当前服务仍处于连接池打满状态,可访问线程监控页面( 系统运维接口),例如
service/edoc335172694483814428/monitor/thread-info,导出线程堆栈并分析大量线程是否阻塞在数据库查询、获取连接、锁等待、远程调用或其他耗时操作上。 - 5.之后再结合问题时段的数据库慢查询日志,优先获取带实际参数的 SQL 并查看执行计划,重点判断是否
缺少索引、索引未命中、执行计划异常、扫描行数过高、查询条件不足或业务场景触发了大范围查询。
分析工具
- 一键采集工具
- 一键巡检工具
- 系统监控查看说明
- 系统日志查看指引
- 系统运维接口
- 线程堆栈分析
- 慢 SQL 统计与分析
- SQL 执行计划分析
- 如果是单个慢 SQL 导致,可联系研发确认是否可以在数据库层面终止对应查询连接;
- 如果确认存在索引缺失或索引失效,应优先补充对应表索引。
- 若问题来源于数据库服务异常,可考虑重启数据库或联系 DBA 运维处理;
- 若数据库服务器本身存在资源异常,则通常需要联系客户运维支持,增加资源或重启机器,并取得相应授权确认。
- 如果确认是服务数据库连接池配置不足导致,可适当调整 Nacos 中数据库连接池相关配置,例如
seeyon.datasource.initial-size、seeyon.datasource.min-idle、seeyon.datasource.max-active、seeyon.datasource.max-wait 等参数,必要时联系对应服务研发确认推荐值。 - 如果问题由业务激增导致线程和连接不足,也可通过增加服务负载节点和 pod 数量进行缓解。