Oracle-BCT块跟踪导致数据库性能下降问题
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
问题背景:
在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, 3354186531417990 , 32697859 建议安装高版本的RU补丁规避潜在的bug