首页 > 其他分享 >KingbaseES 等待事件之LWLock lock_manager

KingbaseES 等待事件之LWLock lock_manager

时间:2023-01-12 12:02:10浏览次数:40  
标签:lock 数据库 路径 manager LWLock KingbaseES 分区

背景

相信我们不止一次遇到过一个等待事件:LWLock lock_manager。下面我们聊聊这个等待事件的含义,产生原因,以及解决方法。

等待事件含义

当数据库维护共享锁的内存区域以在无法实现fastpath lock 时分配、检查和解除分配锁时,会发生此事件。

发出SQL语句时,数据库会记录有关锁,以在并发操作期间保护数据库的内存结构、数据和完整性。数据库可以使用快速路径锁定或非快速路径锁定方式来实现这一目标。非快速路径锁比快速路径锁更昂贵,产生更多的开销。

快速路径锁定:为了减少频繁获取和释放锁,减少很少发生冲突的锁的开销,后端进程可以使用快速路径锁定方式。数据库将此机制用于满足以下条件的锁:

“快速路径”锁定机制是后端进程可以用来记录具有特定特征的有限数量的锁,必须符合条件:VXID 锁 ;它们必须是“弱”锁,不应该是(AccessShareLock、RowShareLoc或RowExclusiveLock);

lock manager 问题示例:
在本例中,一个表存储多年的数据,按天进行分区。每个分区有两个索引。当查询许多天的数据,这需要数据库读取许多分区。数据库为每个分区创建一个锁。如果分区索引是优化器访问路径的一部分,数据库也会为它们创建一个锁。

应用程序可能有数百个会话。如果并发会话在没有分区修剪的情况下查询父表,数据库可能会创建数百甚至数千个非快速路径锁。通常,当此并发性高于CPU的数量时,会出现LWLock:lock_manager等待事件。

注意:LWLock:lock_manager等待事件与数据库中的分区或索引数无关。相反,它与数据库必须控制的非快速路径锁的数量有关。

等待事件LWLock:lock_manager增加的可能原因

当LWLock:lock_manager等待事件发生的频繁时,表明存在性能问题,导致出现峰值的最可能原因如下:

  1. 并发活动会话正在运行但没有使用快速路径锁的查询。
  2. 大量并发活动会话正在访问很多分区的表。每个分区都有多个索引。
  3. 数据库遇到连接风暴。默认情况下,某些应用程序或连接池软件会在数据库速度较慢时仍然创建更多连接。这种做法使问题更严重。调整连接池软件,使连接风暴不会发生。
  4. 大量会话查询父表而没使用分区修剪。
  5. 数据定义语言(DDL)、数据操作语言(DML)命令频繁访问或修改的热表或元组。

等待事件LWLock:lock_manager解决方法:

  1. 使用分区修剪
    SET enable_partition_pruning=on;
    当查询的WHERE子句包含用于分区的列时,查询可以利用分区修剪。

  2. 删除不必要的索引
    删除数据库未使用或很少使用的索引。

  3. 调整查询以实现快速路径锁定
    要查询是否使用快速路径锁定,请查询pg_locks表中的fastpath列。如果查询没有使用快速路径锁定,请将每个查询的表数减少到16个以下。
    fastpath列的含义是,如果锁通过快速路径获得则为真,通过主锁表获得则为假.

  4. 调整其他等待事件
    如果LWLock:lock_manager在top等待列表中排名第一或第二,请检查等待事件中是否也同时出现以下等待事件:
    Lock:Relation
    Lock:transactionid
    Lock:tuple
    如果前面的事件在等待事件中占比很高,请首先想办法降低这些等待事件。这些事件可能导致更多的LWLock:lock_manager。

  5. 减少硬件瓶颈
    CPU不足或网络带宽的最大使用率触发瓶颈。在这些情况下,考虑以下措施:
    优化消耗大量CPU和内存的sql。
    更改应用程序逻辑。
    冷热数据物理分离。

  6. 使用连接池
    如果数据库时常有大量session,请考虑使用或优化连接池。避免连接风暴。

  7. 升级数据库版本
    建议升级至KingbaseES最新发布版本

标签:lock,数据库,路径,manager,LWLock,KingbaseES,分区
From: https://www.cnblogs.com/kingbase/p/16903668.html

相关文章

  • KingbaseES V8R3数据库运维案例之---不完整的启动包(incomplete startup packet)复现
    案例说明:在KingbaseESV8R3数据库的sys_log日志中,出现以下故障信息“不完整的启动包(incompletestartuppacket)”日志信息。本案例复现此日志信息发生的原因。如下图所示......
  • KingbaseES数据目录结构
    KingbaseES数据库结构[kingbase@postgresV8]$tree-LP2data/.├──data│  ├──base#存储用户创建的数据库文件及隶属于用户数据库......
  • KingbaseES 咨询锁
    传统的事务性锁,读/写会自动加锁,读/写完成后会自动解锁(加解锁机制在细节上复杂),这是一种隐式的锁机制。对于加锁后的并发控制,也就是默认的写不阻塞读,是通过MVCC机制解决的。......
  • KingbaseES V8R6运维案例之---普通表toast表故障修复
    案例说明:数据库在日常的维护过程中,在执行表查询(select),如下图所示,出现“couldnotreadblock0infile"base/16385/16408":readonly512of8192bytes”故障,通过对“......
  • KingbaseES date 数据类型的两种格式
    关于date数据类型,Oracle与PostgreSQL格式是不同的,Oracle是日期+时间的类型,而PG则只有日期。KingbaseESOracle模式则同时实现了二者类型,用户在使用时,需要注意所......
  • k8s cert-manager证书管理器
    k8scert-manager证书管理器1、安装cert-manager:helmrepoaddjetstackhttps://charts.jetstack.iohelmrepoupdatehelmpulljetstack/cert-manager--untarhelm......
  • KingbaseES V8R6 索引膨胀
    索引膨胀对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂、合并等,导致索引访问效率降低、维护成本增加。另外,索引页的复用与HEAPPAGE不一样,因为索......
  • KingbaseES V8R6 中unlogged表
    前言KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged。和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中。在数据库异常......
  • prometheus 结合 Alertmanager 实现告警通知
      Alertmanager   prometheus-server触发一条告警的过程:   prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢?......