一次性全讲透GaussDB(DWS)锁的问题

一次性全讲透GaussDB(DWS)锁的问题
最新回答
轮回亦思伊人

2021-04-02 02:49:52

GaussDB(DWS)锁详解


本文由华为云社区作者yd_211043076分享,深入解析了GaussDB中的各种锁机制及其在数据库操作中的作用。


1. GaussDB锁类型



  • 常规锁:包括表锁(relation)和行锁(tuple)。表锁在DDL/DML操作时使用,行锁在select for share和更复杂凳厅的更新枣漏隐操作中应用,分为5级搜桐和7级。

  • 轻量级锁:主要保护数据库内部资源,如内存结构和共享内存。


2. 锁冲突矩阵


常规锁有8个等级,不同操作会引发不同锁冲突。例如,ACCESS SHARE与ACCESS EXCLUSIVE的冲突可能导致长时间等待。



  • 行锁冲突示例:并发更新主键约束的行存表会引发死锁。

  • 列存表并发更新可能导致等锁超时,涉及同一CU的更新。


3. 锁相关视图

pg_locks和pgxc_lock_conflicts视图提供了当前事务和冲突锁的信息,pgxc_deadlock则用于查看死锁等待情况。


4. 锁参数

  • lockwait_timeout:控制单个锁等待时间,超过会报错。

  • deadlock_timeout:死锁检测超时,防止长时间等待。

  • update_lockwait_timeout:并发更新锁等待时间限制。


5. 锁等待排查与死锁处理


死锁可能因资源争夺和加锁顺序不同导致。GaussDB会自动处理单点死锁,但分布式死锁需要人工干预。


6. 分布式死锁


在分布式环境中,不同节点上的事务可能因不同顺序申请锁而形成死锁。通过pgxc_deadlock视图分析和处理。


华为全联接大会

华为云将于2023年9月在上海举办全联接大会,探讨行业智能化的议题。关注华为云开发者联盟公众号获取更多信息。