背景

相信我们不止一次遇到过一个等待事件: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. Js中的位操作符

    Js中的位操作符 JavaScript的数字类型为双精度IEEE 754 64位浮点类型,但是在位运算中位运算符用于32位的数字上, 任何的数字操作都将转为32位, 运算结果再转化为Js数字类型. 描 ...

  2. SpringBoot整合EasyExcel实现Excel表格的导出功能

    前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 在后端管理系统的开发中,经常有导出当前表格数 ...

  3. win32 - 关于GDI的RGB的数据分析

    此文章为小结,仅供参考. 第一种情况,从桌面DC获取RGBA的数据. 32位 HDC hdc, hdcTemp; RECT rect; BYTE* bitPointer; int x, y; int ...

  4. kubernetes(k8s)大白学习01-kubernetes是什么?有什么用?

    kubernetes(k8s)大白基础学习-kubernetes是什么? 一.认识 Docker Docker 是什么 先来看看 Docker 的图标: 一条鲸鱼背上驮着四方形块的物品,就像一条海运船 ...

  5. 非常好用的VS Code插件

    Auto-Collapse Explorer 如果希望在VS Code编辑器中打开文件的时候自动展开对应的目录结构,需要开启"Auto Reveal". 具体设置步骤: 1.打开设 ...

  6. Counter函数

    构造一个空Counter import collections c = collections.Counter() c.update('abcdaab') print(c) # Counter({'a ...

  7. Elasticsearch系列之-linux.docker安装和基础操作及在Django中集成

    elasticsearch Elasticsearch是一个基于Lucene的搜索服务器,也是属于NoSQL阵营的数据库.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口提供 ...

  8. macOS通过ssh使用PEM登录

    在win上面可以使用XSHELL来登录类似于亚马逊这样的安全服务器,在mac上面就可以使用系统自带的命令工具来连接 使用命令 ssh -i key.pem [server] 如下: ssh -i ke ...

  9. redis迁移同步工具-redis-shake

    官方文档: https://github.com/alibaba/RedisShake/wiki/快速开始:数据迁移 下载: https://github.com/alibaba/RedisShake ...

  10. mybaits 笔记2022年8月学习笔记

    mybatis整理 前期准备 安装必要依赖: idea开发mybatis,如果学习测试,可以在一个直接建一个空白项目,如果是用spring boot,则建议用用boot的安装捆绑方式 核 心依赖 or ...