背景

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

等待事件含义

当数据库维护共享锁的内存区域以在无法实现以fastpath lock 模式分配、检查和解除分配锁时,会发生此事件。发出SQL语句时,数据库会记录有关锁,以在并发操作期间保护数据库的内存结构、数据和完整性。数据库可以使用fastpath lock或非fastpath lock方式来实现这一目标。非快速路径锁比快速路径锁更昂贵,产生更多的开销。

快速路径锁定:为了减少频繁获取和释放锁,减少发生冲突的锁的开销,后端进程可以使用快速路径锁定方式。数据库将此机制用于满足以下条件的锁:VXID 锁 ;“弱”锁,不应该是(AccessShareLock、RowShareLoc或RowExclusiveLock);

lock manager 问题示例:

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

应用程序可能有数百个会话。如果并发会话在没有分区修剪(查询SQL没带分区列的条件)的情况下查询父表,数据库可能会创建数百甚至数千个非fastpath lock。通常,当此并发性高于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. 调整查询以实现快速路径锁定

    要查询是否使用快速路径锁定,请查询sys_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最新发布版本

KingbaseES 等待事件之LWLock lock_manager的更多相关文章

  1. KingbaseESV8R6等待事件之lwlock buffer_content

    前言 等待事件是排查数据库性能的指标之一.简单理解,cpu在处理业务时由于业务逻辑,和不可避免的数据库其他原因造成的前台进程等待,这里的等待事件包含buffer类,io类,以及网络类等等,当我们遇到等 ...

  2. Oracle Tuning 基础概述01 - Oracle 常见等待事件

    对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...

  3. SQL SERVER中的OLEDB等待事件

    OLEDB等待事件介绍 OLEDB等待类型是SQL SERVER 数据库中最常见的几种等待类型之一.它意味着某个会话(SPID)通过SQL Server Native Client OLEDB Pro ...

  4. ORACLE等待事件:enq: TX - row lock contention

    enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...

  5. ORACLE等待事件: log file parallel write

    log file parallel write概念介绍 log file parallel write 事件是LGWR进程专属的等待事件,发生在LGWR将日志缓冲区(log_buffer)中的重做日志 ...

  6. 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )

    问题描述: 项目反馈数据库服务器的CPU持续100%的情况,跟踪发现很多活动会话的等待事件是“asynch descriptor resize”,并且这些会话一直处于Active状态,而这些会话执行的 ...

  7. DB SQL Monitor 阻塞及等待事件监控工具

    SQL Monitor Designed By zhaoguan wang 说明------------------------------------------------------------ ...

  8. truncate表hang住(等待时间较长),出现enq:RO fast object reuse等待事件

    有一个应用truncate表等待了一晚上,一个定时任务,跑了几年了,今天早上来发现昨晚没有执行完成,hang住了,查询发现等待事件 fast object reuse. 10.2.0.4的库 Bug ...

  9. Oracle等待事件db file parallel read

    SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'db file ...

  10. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

随机推荐

  1. Oracle代码封装工具和DBMS_DDL包的使用

    The WRAP Utility and the DBMS_DDL Package On occasion it is necessary to hide (obfuscate) your PL/SQ ...

  2. Vue+SpringBoot+ElementUI实战学生管理系统-7.专业管理模块

    1.章节介绍 前一篇介绍了院系管理模块,这一篇编写专业管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 专业列表 修改专业 4.模块 ...

  3. spring boot使用自带缓存

    项目地址:https://gitee.com/indexman/spring_boot_in_action 下面就介绍一下如何使用spring boot自带的缓存.按步骤来操作即可,不懂的可以去看项目 ...

  4. win32 - 将控制台输出重定向到txt文本上

    这里需要两个app. parent.cpp #include <Windows.h> #include <stdio.h> int main() { SECURITY_ATTR ...

  5. Docker进阶之01-Docker Compose编排工具

    Docker Compose是什么 https://github.com/docker/compose 可以按项目为单位管理多个Docker容器,Python语言开发,底层调用Docker的API接口 ...

  6. 使用Gulp压缩静态资源

    如果希望对在静态页面中引入的相关资源进行压缩(比如:CSS,JavaScript,图片等),可以使用Gulp实现. 当然,还可以使用其他打包工具,比如:Grunt,Webpack等等. Gulp是什么 ...

  7. 【LeetCode数组#1二分法】二分查找、搜索插入、在排序数组中查找元素的第一个和最后一个位置

    二分查找 题目 力扣704题目链接 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 ...

  8. 【Azure Storage Account Table】询问批量将存储账户中的表嵌入另一个账户中的办法

    问题描述 询问批量将存储账户中的表嵌入另一个账户中的办法? 问题解答 方式一:使用 AzCopy 使用Az copy做表格的导入导出,注意您需要使用Azcopy 7.3版本来实现对Table的操作,可 ...

  9. 【Azure 媒体服务】记录一个简单的媒体视频上传到Media Service无法播放问题

    问题描述 从本地上传到Azure Media Service Portal的视频,并且新增定位符后,无法播放.但是上传的其他视频是可以的.疑惑中!! 问题自查 自查发现,是视频的文件名中有个特殊符号. ...

  10. LLM 推理和应用 开源框架梳理

    之前对LLM 推理和应用了解不多,因此抽时间梳理了一下,我们从模型量化,模型推理,以及开发平台等三个层面来梳理分析. 模型量化 模型训练时为了进度,采用的32位浮点数,因此占用的空间较大,一些大的模型 ...