数据库锁表原因、排查、解决

数据库锁表原因、排查、解决





一.场景

场景1

锁表通常发生在DML( insert 、update 、delete )

在这里插入图片描述
A操作进行全量数据同步,对整个表的粒度进行上锁,导致B操作只能等待A操作完成才能进入插入数据。此时就出现了锁表问题。

场景2

DDL也会发生锁表
例如在 MySql 操作一张大表,利用 alter 语句修改或新增字段的时候,恰巧有一个长事务(包括读)在操作此表,会触发修改等待,造成锁表。

二.原因

当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其对资源需求的死锁,导致锁表。

三.排查

MYSQL 为例

执行 sql:

select * from information_schema.processlist where command not in (‘Sleep’) ORDER BY time desc

在这里插入图片描述
通过此命令也可以查询到 mysql 的慢 sql 语句,进行优化,info 字段即为具体执行的 sql 语句。

四.解决方案

以我遇到过的场景为例:cdc 全量同步锁表问题

CDC 全量同步锁表问题是指在使用 CDC 技术进行数据库同步时,为了保证数据的一致性,需要在全量同步阶段对源数据库的表或者整个数据库进行加锁,防止在同步过程中发生数据的变更。这种锁表问题可能会影响源数据库的性能和可用性,所以需要谨慎选择同步方案和时机。

CDC 全量同步锁表问题的解决方法可能因不同的 CDC 工具而有所不同,但一般都是通过以下几种方式:

  1. 选择支持无锁全量同步的 CDC 工具,例如 Flink CDC 2.0,它可以通过并发读取、checkpoint、快照隔离等技术实现无锁全量同步,提高性能和可靠性。
  2. 选择合适的锁级别和范围,例如 Debezium,它可以根据源数据库的类型和版本选择使用全局锁或者表锁,也可以通过配置参数来控制锁的范围和持续时间。
  3. 选择合适的同步时机,例如在源数据库的低峰期或者维护期进行全量同步,避免影响正常的业务访问。
  4. 选择合适的同步策略,例如只进行增量同步或者只进行全量同步,根据数据的变化频率和一致性要求来决定。






如有错误欢迎指正

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!如果您觉得Oracle数据库运行慢,我可以给您一些建议来解决这个问题。以下是一些可能导致慢速运行的原因和对应的解决方案: 1. 硬件资源不足:检查服务器硬件配置是否满足数据库的需求,例如CPU、内存和磁盘空间。如果不足,考虑升级或优化硬件配置。 2. 锁竞争:当多个会话同时请求对同一数据的修改时,可能会发生锁竞争,导致性能下降。可以通过合理设计数据模型、使用合适的锁机制和并发控制手段来解决。 3. 索引问题:确保数据库表上的索引合理且有效。适当地创建和维护索引可以加快查询速度。检查查询计划并优化查询语句。 4. 数据库统计信息过期:Oracle数据库会根据统计信息生成查询计划。如果统计信息过期或不准确,可能会导致查询计划选择不合适的执行路径。定期收集和更新统计信息,以确保优化器能够生成正确的查询计划。 5. 不合理的SQL代码:检查应用程序中的SQL代码,确保其逻辑正确且有效。避免使用全表扫描、不必要的连接和子查询等低效操作。 6. 数据库配置问题:检查数据库参数设置是否合理。适当地调整参数可以提高数据库性能,例如缓冲区大小、并发连接数和日志写入策略等。 请注意,针对具体的问题,可能需要更详细的信息和排查步骤来进行解决。如果问题仍未解决,建议您咨询专业的数据库管理员或Oracle技术支持人员以获取进一步的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值