前言

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. fastjson反序列化各版本利用汇总

  2. go语言编程常见问题

    在Goland中运行单元测试报错Error: Cannot find package 如下图,在Goland中运行单元测试时报错:"Error: Cannot find package&qu ...

  3. java学生管理系统(界面版)

    运行截图 项目说明: 本系统界面我个人就从简设计了,本来打算使用windowbuilder插件设计的,可想到使用windowbuilder插件之后导致代码冗余,会影响到代码可读性,可能对小白不友好.虽 ...

  4. 【会员题】253. 会议室 II

    会议室II 给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间s1,e1,s2,e2]..](si<ei) ,为避免会议冲突,同时要考虑充分 利用会议室资源,请你计算至少需要多少间 ...

  5. ECharts渐变温度直方图

    ECharts渐变直方图,根据具体的值调整色带,使所有颜色看起来协调一致. 直接在series数组中的对象中添加如下代码即可: itemStyle: { color: function (params ...

  6. 谈谈在incubator-dolphinscheduler 中为啥不能及时看到python任务输出的print日志

    一.incubator-dolphinscheduler 中如何获取shell类型的节点或者python类型的节点任务的日志 1.在org.apache.dolphinscheduler.server ...

  7. Jenkins Pipeline:根据参数设置环境变量

    pipeline { agent any environment { //以上自定义的参数 project = "$params.PROJECT" } stages { stage ...

  8. HW学习笔记

    栈库分离方法注意事项: 所有用户输入数据需要进行分离过滤,不能遗漏.选择安全的过滤函数 如 mysql_real_escape_string(),避免过滤不严格导致注入 SQL查询模板需要设计安全,米 ...

  9. nvm-windows 安装遇到的问题 node目录卸载后(有残留)记得改名

    需求 网上好多新项目都需要最新版的node,所有需要切换node版本 nvm-windows https://github.com/coreybutler/nvm-windows 安装步骤-问题 删除 ...

  10. Windows改变终端字体后,终端一片黑 的解决办法

    使用Windows终端的时候总觉得字体不好看,于是乎按照网上的教程改了一下 注册表 计算机\HKEY_CURRENT_USER\Console%SystemRoot%_system32_cmd.exe ...