前言

Kingbase数据库的tuple行头部来标识这条记录的事务结束状态(未知、已提交、已回滚),在事务提交时如果并发更新100万行记录,需要对多个page的tuple进行更改,这种繁重的操作会对数据库性能产生极大影响。KingbaseES 事务结束时,只需要修改这个事务对应的clog的日志,对page tuple状态的修改推迟到下次Select 访问的时候。clog中会记录事务状态,每个事务的状态由2个比特位来表示,CLogControlLock 等待事件指正等待读取或者更新事务状态。

clog相关的LWLOCK如下:

CLogControlLock: Waiting to read or update transaction status.

CLogTruncationLock: Waiting to truncate the write-ahead log or waiting for write-ahead log truncation to finish.

clog: Waiting for I/O on a clog (transaction status) buffer.

ClogGroupUpdate: Waiting for group leader to update transaction status at transaction end.

等待事件CLogControlLock 出现的可能原因

1、高并发的小事务频繁提交。注意,频繁小事务提交也可能引起 wal相关的等待事件。

2、遇上clog buffer不足,需要大量的clog物理文件。因为每一个事务提交都需要调用TransactionIdSetPageStatus,遇到buffer不够的情况,小事务吞吐会严重下降。

业务场景模拟:

暂时调大table1的vacuum阈值,例如调到10亿,autovacuum_freeze_max_age ,vacuum_freeze_table_age 。table1单纯多事务写入,例如10亿并发事务,每个事务写入10行记录。总共写入100亿行记录,只要不查询这个表,这些记录都是没有被设置状态标志位的。table1开启高并发读请求,读这些更新前的还没有事务标记状态的记录时,需要从CLOG获得他们的事务状态,由于clog buffer很小,默认1mb,所以clog buffer很快会被消耗掉。

在上述过程的同时,如果其他表上进行高并发写事务,就会看到等待事件CLogControlLock,原因是磁盘吞吐量都被用到clog buffer与clog日志落盘。磁盘吞吐量变小了,那么其他的业务写操作也要写入clog中事务状态就会发生锁等待。

等待事件CLogControlLock的解决方法

更改操作的相关表几乎不被查询。或者查询很少。所以大量的记录没有被设置状态标志位,当触发vacuum freeze或select全表扫描时,这时候需要读取clog,设置标志位,需要读取clog了解事物提交状态,会导致clog buffer很快被耗尽,如果同时有高并发小事务提交,需要写clog的PAGE状态,会出现锁等待。导致事务提交的吞吐下降。

尽量避免上述业务场景。避免查询到大量没有设置提交状态标志位的数据,建议不要把vacuum freeze阈值调大,因为在vacuum时,会触发读取clog设置状态标志位。也要尽量避免数据库中大量高并发小事务出现,这还会引起walsync等待事件。

KingbaseES V8R6 等待事件之CLogControlLock的更多相关文章

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

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

  2. SQL SERVER中的OLEDB等待事件

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

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

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

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

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

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

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

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

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

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

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

  8. Oracle等待事件db file parallel read

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

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

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

  10. 【等待事件】序列等待事件总结(enq: SQ - contention、row cache lock、DFS lock handle和enq: SV - contention)

    [等待事件]序列等待事件总结(enq: SQ - contention.row cache lock.DFS lock handle和enq: SV -  contention) 1  BLOG文档结 ...

随机推荐

  1. Js实用小技巧

    Js实用小技巧 这是一份Js实用小技巧,也可以是一份Js挨打小技巧,下面的一系列操作虽然能够在一定程度上使代码更加简洁,但是在缺少注释的情况下会降低可读性,所以需要谨慎使用这些黑魔法. 位元算 取整 ...

  2. Swoole从入门到入土(25)——多进程[进程间无锁计数器]

    Atomic 是 Swoole 底层提供的原子计数操作类,可以方便整数的无锁原子增减.原子计数器有如下特点: - 使用共享内存,可以在不同的进程之间操作计数 - 基于 gcc/clang 提供的 CP ...

  3. win32-改变显示器的亮度

    调用SetMonitorBrightness 代码示例: #pragma comment(lib, "dxva2.lib") #include <windows.h> ...

  4. 一次nginx返回422状态码的经历

    故事背景 后端使用Docker Compose部署一个代码片段管理应用:snibox,某天因为云服务卡死重启之后再次访问时,登录或退出都返回422状态码. 界面提示如下: 不过奇怪的是:直接通过IP+ ...

  5. 麒麟系统开发笔记(六):安装QtCreator开发IDE中的中文输入环境Fcitx输入法

    前言   中文输入法,QtCreator中无法输入中文也是ubuntu中一个常规问题,在麒麟系统中也此问题,要解决此问题,主要是安装和使用Fcitx输入法.  本文章最终结果是失败的,但是读者的系统未 ...

  6. 3dMax建模笔记(一):介绍3dMax和创建第一个模型Hello world

    前言   三维模型,虽然淘宝上一抓一大把,但是三维开发人员最好还是具备一定基础的建模能力.本文用hello world模型描述基本的3dMax建模流程.   3dMax   3D Studio Max ...

  7. matplotlib画图中x轴过于密集的解决办法

    import matplotlib.ticker as ticker ax.xaxis.set_major_locator(ticker.MultipleLocator(base=10)) # tic ...

  8. Django之第三方平台QQ授权登录的实现

    接入指南:https://wiki.connect.qq.com/成为开发者 准备工作 成为开发者 首先要有一个开发者账号,https://connect.qq.com/ 登录后点击用户头像,修改个人 ...

  9. ASP.NET XML序列化

    整理一下ASP.NET里面如何序列化实体为XML,获取解析XML内容为实体. 第一步要添加程序集引用,项目-->引用-->鼠标右键-->添加引用-->选择程序集-->Sy ...

  10. Kotlin扩展函数与属性原理解析

    一.扩展函数 扩展函数可以方便地给现有类增加属性和方法而不改动类地代码. 二.原理 fun String.addTo(s: String): String{ return this + s } 反编译 ...