tencent cloud

数据库智能管家 DBbrain

动态与公告
产品动态
公告
产品简介
产品概述
产品功能
产品优势
应用场景
功能列表
地域列表
购买指南
操作指南
访问管理
自建数据库接入
实例概览
实例管理
监控告警
健康报告及 Kill 会话报告管理
MySQL/TDSQL-C 诊断优化
TDSQL MySQL/MariaDB 诊断优化
分布式缓存数据库(Distributed Cache)诊断优化
MongoDB 诊断优化
全链路分析
实践教程
如何解决 MySQL 实例 CPU 使用率高问题
如何解决 MySQL 实例锁冲突问题
如何解决 Distributed Cache 实例 CPU 使用率高问题
如何解决 MongoDB 实例 CPU 使用率高问题
如何解决 MongoDB 节点 Oplog 保存时间太短
API 文档
History
Introduction
Introduction
API Category
Making API Requests
Session Killing APIs
Exception Detection APIs
Other APIs
Redis related APIs
Health Report Email Sending APIs
Space Analysis APIs
Slow Log Analysis APIs
Security Audit APIs
Database Audit APIs
Data Types
Error Codes
DBbrain APIs 2019-10-16
常见问题
自建数据库问题
MySQL 性能问题
产品常见问题
服务等级协议
词汇表
联系我们
文档数据库智能管家 DBbrain实践教程如何解决 MySQL 实例锁冲突问题

如何解决 MySQL 实例锁冲突问题

PDF
聚焦模式
字号
最后更新时间: 2022-07-31 17:10:56

问题描述

锁冲突问题一直是 MySQL 数据库业务经常遇到的问题,锁冲突问题在不同场景下表现也大不相同,某些场景下可能直接导致业务瘫痪,而某些场景下业务侧可能很难感知,出现数据错乱等情况。 锁冲突场景的多样性、复杂性以及隐秘性,决定了要解决这一类问题对数据库管理员的技术和能力要求极高,同时处理锁冲突故障的时效性也会大打折扣。
数据库智能管家 DBbrain 提供的异常诊断功能,包含了数十个锁相关诊断项,涵盖了死锁、等待行锁、出现表锁、只读锁、DDL/select/DML等待锁、SQL 等待 MDL 锁等多个锁冲突场景,能够高效、便捷、专业化地帮助用户解决锁冲突的问题。 本文以常见的“等待行锁”和“死锁”为案例,介绍如何使用 DBbrain 解决锁冲突问题。

解决方案

场景一:“等待行锁”场景

步骤一:查看“等待行锁”事件

方式1:
1. 登录 DBbrain 控制台,在左侧导航选择监控告警>异常告警页。
2. 选择需要查看的时间范围,在“诊断项”列,选择“等待行锁”进行过滤。
3. 列表会展示实例出现“等待行锁”的事件列表,单击“操作”列的详情可进入事件详情页。
方式2:
1. 登录 DBbrain 控制台,在左侧导航选择诊断优化,然后选择异常诊断页。
2. 在上方选择对应实例,然后选择实时(默认动态更新)或历史(可自定义)时间段。
3. 查看“诊断提示”栏中是否存在“等待行锁”的事件,单击事件可进入事件详情页。

步骤二:解决“等待行锁”事件

1. 进入事件详情页后,在“现象描述”页,了解出现“等待行锁”事件时,数据库中语句的运行情况。
2. 切换至“智能分析”页,查看出现“等待行锁”事件的原因。
等待行锁事务中,清晰显示被阻塞的事务语句情况,例如下图中的 delete 语句,是处于 LOCK WAIT 状态。
根据持有锁事务结果,快速定位目前持有行锁的事务当前状态以及 ID。
性能监控曲线中,直观展示出等待行锁次数的趋势。
3. 切换至“专家建议”页,根据提示解决锁冲突问题。例如,通过使用 kill 命令,中止会话3965158来释放锁,解决本案例中的锁冲突问题。

场景二:“死锁”场景

注意:
由于 MySQL 具有“死锁”监测和自动事务回滚的能力,故大多数“死锁”场景可自愈,业务无感知,但由于业务逻辑不够健壮或极端情况下也会导致系统雪崩,以及数据不一致等后果,故对于出现死锁的情况也需足够重视。

步骤一:查看“死锁”事件

方式1:
1. 登录 DBbrain 控制台,在左侧导航选择监控告警>异常告警页。
2. 选择需要查看的时间范围,在“诊断项”列,选择“死锁”进行过滤。
3. 列表会展示实例出现“死锁”的事件列表,单击“操作”列的详情可进入事件详情页。
方式2:
1. 登录 DBbrain 控制台,在左侧导航选择诊断优化,然后选择异常诊断页。
2. 在上方选择对应实例,然后选择实时(默认动态更新)或历史(可自定义)时间段。
3. 查看“诊断提示”栏中是否存在“死锁”的事件,单击事件可进入事件详情页。

步骤二:解决“死锁”事件

进入事件详情页后,在“现场描述”页,通过分析如下信息优化对应语句,来解决“死锁”事件。
发生时间以及来源 IP,便于溯源。
发生死锁的两条 SQL 语句,例如下图的两条 INSERT INTO 语句。
根据 Status 字段状态,判断哪条语句回滚(Rollback),哪条语句正常执行(Normal)。
(可选)根据 LockRequest、LockHold 信息分析具体锁的持有和类型。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈