KingbaseES V8R6 等待事件之CLogControlLock
前言
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的更多相关文章
- Oracle Tuning 基础概述01 - Oracle 常见等待事件
对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...
- SQL SERVER中的OLEDB等待事件
OLEDB等待事件介绍 OLEDB等待类型是SQL SERVER 数据库中最常见的几种等待类型之一.它意味着某个会话(SPID)通过SQL Server Native Client OLEDB Pro ...
- ORACLE等待事件:enq: TX - row lock contention
enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待事件.enq是enqueue的缩写,它是一种保护共享资源的锁定机制,一个排队机制,先进先出(FIF ...
- ORACLE等待事件: log file parallel write
log file parallel write概念介绍 log file parallel write 事件是LGWR进程专属的等待事件,发生在LGWR将日志缓冲区(log_buffer)中的重做日志 ...
- 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )
问题描述: 项目反馈数据库服务器的CPU持续100%的情况,跟踪发现很多活动会话的等待事件是“asynch descriptor resize”,并且这些会话一直处于Active状态,而这些会话执行的 ...
- DB SQL Monitor 阻塞及等待事件监控工具
SQL Monitor Designed By zhaoguan wang 说明------------------------------------------------------------ ...
- truncate表hang住(等待时间较长),出现enq:RO fast object reuse等待事件
有一个应用truncate表等待了一晚上,一个定时任务,跑了几年了,今天早上来发现昨晚没有执行完成,hang住了,查询发现等待事件 fast object reuse. 10.2.0.4的库 Bug ...
- Oracle等待事件db file parallel read
SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'db file ...
- Oracle常见的几种等待事件
1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...
- 【等待事件】序列等待事件总结(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文档结 ...
随机推荐
- Js实用小技巧
Js实用小技巧 这是一份Js实用小技巧,也可以是一份Js挨打小技巧,下面的一系列操作虽然能够在一定程度上使代码更加简洁,但是在缺少注释的情况下会降低可读性,所以需要谨慎使用这些黑魔法. 位元算 取整 ...
- Swoole从入门到入土(25)——多进程[进程间无锁计数器]
Atomic 是 Swoole 底层提供的原子计数操作类,可以方便整数的无锁原子增减.原子计数器有如下特点: - 使用共享内存,可以在不同的进程之间操作计数 - 基于 gcc/clang 提供的 CP ...
- win32-改变显示器的亮度
调用SetMonitorBrightness 代码示例: #pragma comment(lib, "dxva2.lib") #include <windows.h> ...
- 一次nginx返回422状态码的经历
故事背景 后端使用Docker Compose部署一个代码片段管理应用:snibox,某天因为云服务卡死重启之后再次访问时,登录或退出都返回422状态码. 界面提示如下: 不过奇怪的是:直接通过IP+ ...
- 麒麟系统开发笔记(六):安装QtCreator开发IDE中的中文输入环境Fcitx输入法
前言 中文输入法,QtCreator中无法输入中文也是ubuntu中一个常规问题,在麒麟系统中也此问题,要解决此问题,主要是安装和使用Fcitx输入法. 本文章最终结果是失败的,但是读者的系统未 ...
- 3dMax建模笔记(一):介绍3dMax和创建第一个模型Hello world
前言 三维模型,虽然淘宝上一抓一大把,但是三维开发人员最好还是具备一定基础的建模能力.本文用hello world模型描述基本的3dMax建模流程. 3dMax 3D Studio Max ...
- matplotlib画图中x轴过于密集的解决办法
import matplotlib.ticker as ticker ax.xaxis.set_major_locator(ticker.MultipleLocator(base=10)) # tic ...
- Django之第三方平台QQ授权登录的实现
接入指南:https://wiki.connect.qq.com/成为开发者 准备工作 成为开发者 首先要有一个开发者账号,https://connect.qq.com/ 登录后点击用户头像,修改个人 ...
- ASP.NET XML序列化
整理一下ASP.NET里面如何序列化实体为XML,获取解析XML内容为实体. 第一步要添加程序集引用,项目-->引用-->鼠标右键-->添加引用-->选择程序集-->Sy ...
- Kotlin扩展函数与属性原理解析
一.扩展函数 扩展函数可以方便地给现有类增加属性和方法而不改动类地代码. 二.原理 fun String.addTo(s: String): String{ return this + s } 反编译 ...