问题背景:

在Oracle19c版本上,开启BCT块跟踪的数据库偶尔出现性能下降问题,影响业务操作。

问题:

数据库偶尔出现性能下降

原因:

数据库出现性能问题的原因为

1 核心进程CKPT被CTWR进程堵塞,CKPT为数据库的核心进程,被堵塞会影响数据库的检查点触发,脏数据写入等关键操作,导致出现性能问题

2 CTWR进程处于繁忙状态,进程CPU使用接近100%,无法正常的返回确认信息给CKPT进程,导致CKPT一直处于等待堵塞状态

3 从数据库的等待block change tracking buffer space,可以确认当前的块追踪的缓存大小不匹配当前数据的块改变量,导致CTWR的进程一直处于繁忙的写入状态

问题分析:

对比正常时间段与性能问题时间段的awr报告,可以发现在性能问题时间数据库的等待事件block change tracking buffer space, buffer busy waits, reliable message明显提高

block change tracking buffer space:事件主要表明会话进程等待块改变写入块追踪(block change tracking buffer)的缓存里面,等待过高通常说明当前的块追踪的缓存大小不匹配当前数据的块改变量,导致块追踪的缓存写入磁盘文件速度慢于块改变的产生速度 buffer busy waits:事件主要表明会话请求的缓存块正被其他会话以不兼容的模式持有,等待过高通常说明数据块存在热快或者数据库存在性能问题 reliable message:事件主要表明进程当前正等待其他进程的消息返回,等待过高通常说明进程可能存在繁忙或者僵死的状态

从awr来看block change tracking buffer space等待非常高,说明性能问题时间段数据库的块追踪缓存写入可能存在性能瓶颈,快追踪缓存的写入通常由CKPT检查点进程所触发刷新,检查CKPT进程的状态,可以看到在2023年1月16号5点10分开始,CKPT进程被会话4693所堵塞,状态为waiting

后台日志也出现CKPT被堵塞的日志

堵塞会话4693为数据库CTWR进程(Check Tracking Writer),进程主要用于将块追踪缓存写入磁盘上的块追踪文件,当前会话状态为ON CPU

从服务器层面可以进一步看到在性能问题时间段,CTWR进程的CPU使用接近100%的状态,说明CTWR进程当前非常繁忙

综合上述信息,我们可以确认数据库出现性能问题的原因为

1 核心进程CKPT被CTWR进程堵塞,CKPT为数据库的核心进程,被堵塞会影响数据库的检查点触发,脏数据写入等关键操作,导致出现性能问题

2 CTWR进程处于繁忙状态,进程CPU使用接近100%,无法正常的返回确认信息给CKPT进程,导致CKPT一直处于等待堵塞状态

3 从数据库的等待block change tracking buffer space,可以确认当前的块追踪的缓存大小不匹配当前数据的块改变量,导致CTWR的进程一直处于繁忙的写入状态

问题解决:

从Oracle官方我们可以查到关于CKPT进程被CTWR堵塞,等待CTWR进程回复信息"rdbms ipc reply"的相关文档案例,由于CTWR的写入速度无法跟上块追踪的缓冲区的产生数量,导致CKPT进程被CTWR堵塞,可以通过增大块追踪的缓存区大小来缓解CTWR的写入压力

1 加大块跟踪缓存的大小缓解CTWR进程的写入压力,当前的块追踪缓存大小为384M,根据官方的建议,建议设置块跟踪缓冲区的总大小_bct_public_dba_buffer_size为2倍块追踪缓存当前值大小805306368(768M),跟踪缓冲区的最大大小_bct_buffer_allocation_max为4倍块追踪缓存大小1610612736(1536M)

--注意:数据库的large pool要大于_bct_buffer_allocation_max大小,以确保有足够内存分配块跟踪缓存

alter system set "_bct_public_dba_buffer_size "=805306368;

alter system set "_bct_buffer_allocation_max "=1610612736;

2 禁用BCT块改变追踪功能,注意:禁用可能带来的影响为增量备份的时间变长

ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

3 应用最新的RU补丁,Oracle19c版本数据库存在多个BCT的bug 32697859, 33541865,31417990 , 32697859 建议安装高版本的RU补丁,规避潜在的bug

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: