最佳实践—如何快速定位及解决数据库问题

简介: 本文介绍了数据库发生故障时的快速判断方法和解决办法。

如何定位系统瓶颈是否在数据库上

  • 通过Processlist来判断执行以下语句,显示PolarDB-X上所有正在执行的SQL语句。
SHOW PROCESSLIST WHERE INFO IS NOT NULL
  • 一般情况下,语句堆积会伴随着数据库卡慢一起出现,因此如果该语句的显示结果中没有大量执行时间大于0的语句,则基本可以断定问题不在数据库层面,反之,则说明数据库可能存在瓶颈。
  • 通过堆栈信息来判断应用与数据库之间通过TCP协议进行交互,如果数据库层出现瓶颈,则会产生应用将请求通过socket发送给了数据库,但是数据库不返回结果的情况,此时socket会阻塞在read方法上。因此我们可以通过应用当前的堆栈信息来判断是否在数据库层面发生了阻塞。本文以Java应用为例说明:
    1. 通过jstack命令dump堆栈信息。
    2. 在dump出的信息中搜索mysql驱动等待请求返回的堆栈,内容如下:
at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:101)
at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:144)
at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:174)
- locked <0x00000002eb8f2d98> (a com.mysql.jdbc.util.ReadAheadInputStream)
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3183)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3659)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3649)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4090)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:972)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2497)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2870)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2806)
  • 如果有大量的线程的堆栈情况如上例所示,则代表大量线程阻塞在等待数据库返回,说明瓶颈可能在数据库层面,反之,则应重点排查应用本身是否存在瓶颈。

数据库问题快速处置

在通过上述方法判断数据库存在瓶颈之后,推荐依次使用以下方法进行快速恢复。

方法一:KILL所有语句

如果Processlist中显示堆积了很多SQL,建议立即KILL掉所有正在执行的语句,PolarDB-X提供了如下指令进行这个操作:


KILL "ALL"

该语句会KILL掉计算节点与数据节点之间的每一个连接,从而达到结束掉所有语句的效果。

方法二:重启应用

执行方法一后,等待一段时间如果再次产生语句堆积,建议重启应用,避免应用因为处于某种错误的状态,不断的重试高代价的SQL。

方法三:SQL限流

方法2依然无法解决问题之后,建议使用PolarDB-X的CCL_RULES(限流功能)。

  1. 执行SHOW FULL PROCESSLIST命令,找到占比比较高的SQL的模板ID。
+----+---------------+-----------------+----------+-------------------------------+------+-------+-----------------------+-----------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | SQL_TEMPLATE_ID |
+----+---------------+-----------------+----------+-------------------------------+------+-------+-----------------------+-----------------+
| 2 | polardbx_root | *...*:62787 | polardbx | Query | 0 | | show full processlist | NULL |
| 1 | polardbx_root | *...*:62775 | polardbx | Query(Waiting-selectrulereal) | 12 | | select 1 | 9037e5e2 |
+----+---------------+-----------------+----------+-------------------------------+------+-------+-----------------------+-----------------+
2 rows in set (0.08 sec)
  1. 通过模板ID对该类型的SQL进行限流,例如:
CREATE CCL_RULE IF NOT EXISTS `test` ON . TO 'ccltest'@'%'
FOR SELECT
FILTER BY TEMPLATE('9037e5e2')
WITH MAX_CONCURRENCY=10;

方法四:重启数据库

以上方法都无效的情况下,请重启数据库。

相关文章
|
Linux 测试技术 Docker
Linux系统:第十三章:centos误删文件如何恢复文件数据
Linux系统:第十三章:centos误删文件如何恢复文件数据
968 0
Linux系统:第十三章:centos误删文件如何恢复文件数据
|
SQL 运维 安全
闲鱼交易实时资损防控体系
聊一聊资损防控体系和闲鱼实践
6698 0
闲鱼交易实时资损防控体系
|
存储 文件存储 对象存储
块存储、文件存储和对象存储特点对比
块存储、文件存储和对象存储特点对比
1341 2
|
存储 运维 监控
什么是 SRE?一文详解 SRE 运维体系
什么是 SRE?一文详解 SRE 运维体系
4035 1
|
7月前
|
存储 SQL 大数据
从 o11y 2.0 说起,大数据 Pipeline 的「多快好省」之道
SLS 是阿里云可观测家族的核心产品之一,提供全托管的可观测数据服务。本文以 o11y 2.0 为引子,整理了可观测数据 Pipeline 的演进和一些思考。
477 34
|
SQL 数据挖掘 数据库
从管控角度谈慢SQL治理
慢SQL指的是执行效率低、响应时间长的SQL查询,其定义需综合考虑执行时间、业务场景、资源消耗、频率及影响、用户体验等多个维度。产生慢SQL的原因包括硬件问题、无索引或索引失效、锁等待及不当的SQL语句。慢SQL会增加资源占用,影响其他请求响应时间,可能导致系统故障,引发数据不一致问题,并影响用户体验。优化慢SQL需善用工具发现、设置合理告警机制,并进行分级治理与长期追踪。
|
10月前
|
存储 人工智能 安全
业财一体 ERP 数智化管理系统
业财一体 ERP 数智化管理系统是基于钉钉 + 钉钉低代码构建,作为企业管理体系数字化转型升级的驱动器,目标是将业务管理与财务管理深度融合,帮助企业构建一个集成、高效、智能的管理体系。旨在通过先进的信息技术,打通各业务模块数据传递链路,进行业务财务的一体化管理,采取智能化手段大幅度提升工作效率,逐步实现企业数字化转型和智能化改造。
551 12
|
8月前
|
人工智能 监控 安全
从 DeepSeek 敏感信息泄露谈可观测系统的数据安全预防
探讨了 SLS 中增强数据安全的几种方式:权限精细化管控有效减少了潜在安全风险;接入层脱敏技术阻止敏感数据落库,提升了隐私保护;StoreView 字段集控制通过限制查询数据范围,降低数据泄露损害。智能监控系统提供实时监测,快速识别并阻断异常拖库行为,为企业提供了迅速响应和抵御威胁的能力。
|
SQL 数据管理 数据库
DROP 和 TRUNCATE 命令的详细区别
【8月更文挑战第31天】
1579 0
|
运维 安全 SDN
网络拓扑设计与优化:构建高效稳定的网络架构
【8月更文挑战第17天】网络拓扑设计与优化是一个复杂而重要的过程,需要综合考虑多方面因素。通过合理的拓扑设计,可以构建出高效稳定的网络架构,为业务的顺利开展提供坚实的支撑。同时,随着技术的不断进步和业务需求的不断变化,网络拓扑也需要不断优化和调整,以适应新的挑战和机遇。