暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

XTTS全备开启BCT后等待事件 block change tracking buffer space

XTTS全备开启BCT后等待事件 block change tracking buffer space 

[[toc]]
# 适用范围
Oracle 11g及以后版本,开启BCT后的RMAN备份和XTTS迁移全备
# 问题概述
开启BCT后在源端对数据库进行XTTS全备,数据库中出现大量block change tracking buffer space等待事件
# 问题原因
CTWR dba buffer 不足
# 解决方案
通过设置隐藏参数_bct_public_dba_buffer_size,_bct_buffer_allocation_max,_bct_bitmaps_per_file 增加CTWR dba buffer
# 参考文档
High Waits On 'block change tracking buffer space' - Checkpoint Contention With BLOCK CHANGE TRACKING or RMAN Incremental Backup (Doc ID 2094946.1)
ORACLE 10G BLOCK CHANGE TRACKING INSIDE OUT (Doc ID 1528510.1)

**什么是BCT和CTWR?**
BCT-Block Change Tracking 块跟踪Block chage tracking是从Oracle10g的一个新特性。
CTWR-Change Tracking Writer,CTWR是BCT对应的后台进程记录自从上一次备份以来数据块的变化,并把这些信息写入到跟踪文件中。
CTWR进程大约每20-60秒对BCT文件的第18块执行更新——这个我们可以称为“CTWR heartbeat”。在此CTWR heartbeat期间,CTWR读写block 18,并连续提交两个短等待事件——“change tracking file synchronous read” 和 “change tracking file synchronous write”。
在更新BCT文件时,CTWR进程也会对控制文件执行一些IO操作(“control file sequential read” 和 “control file parallel write”)。对BCT文件本身的读写操作使用“change tracking file synchronous read” 和“change tracking file synchronous write”

SQL>select name,parameter1,parameter2,parameter3 from v$event_name where lower(name) like 'change%write';

NAME PARAMETER1 PARAMETER2 PARAMETER3
-------------------------------------------------- ---------------------------------------- --------------- ---------------
change tracking file synchronous write block# blocks
change tracking file parallel write blocks requests



启用BCT将提高增量备份的性能,但代价是什么?我们经常会听到客户关于打开一个当前被禁用的特性的担忧。大多数应用程序通过启用BCT后对性能影响不大。数据仓库类型或工作负载较高的数据库开启BCT后会对数据库性能产生不同影响。

如果数据库性能受到影响大多情况是在将数据填充到CTWR缓冲区的过程中发生。如果这个缓冲区中有足够或空闲的空间,填充BCT信息的过程将非常快。如果没有足够的空闲空间,那么进程必须等待,直到CTWR更新块更改跟踪文件并释放空间。
当等待“block change tracking buffer space”的时间占很大百分比时,说明BCT对数据库性能产生了影响。

对于“block change tracking buffer space”等待事件,我们一般从以下三方面去分析和处理:
首先,检查从CTWR到块更改跟踪文件的IO是否最佳。如果存在资源争用(磁盘繁忙,CPU使用率高)和CTWR不能及时完成其工作,那么“block change tracking buffer space”事件只是一种现象,而不是根本原因。将优化的重点放在资源争用的直接原因上。检查存储性能,将BCT跟踪文件放到性能较好的存储上,降低CTWR进程对CPU的使用率。
其次,验证Large Pool分配给CTWR缓冲区是否足够大,并且CTWR缓冲区足够大以支持需求。可以通过调整“_bct_public_dba_buffer_size”来增加CTWR缓冲区。注意,对该参数的更改可能需要调整Large Pool Size和“_bct_public_dba_buffer_allocation_max”参数
SQL>select dba_buffer_count_public*dba_entry_count_public*dba_entry_size*2 from X$KRCSTAT;
再次,关闭BCT。尽管这种情况非常少见,但有一些应用程序工作负载(比如大型ETL工作负载)无法忍受启用BCT跟踪的开销。
SQL>alter database disenable;
建议启用Oracle Block Change Tracking以提高增量备份的性能。由于RMAN不需要扫描数据库中的每个块,因此备份窗口会更小,基础设施利用率也会降低(CPU、IO)。进行任何更改总是存在一定的风险,但在大多数应用程序的上下文中,启用块更改跟踪将是透明的。

1、开启BCT
RAC环境建议change tracking file放在ASM磁盘组或共享存储保证没个节点访问到相同的块跟踪文件
SQL>alter database enable block change tracking using file '+data/hfxfdb/trace.f';
2、检查BCT状态
SQL>col status format a8
SQL>col filename format a60
SQL>select status, filename fromv$block_change_tracking;
ENABLED +data/hfxfdb/trace.f
3、检查ctwr进程
$ ps -ef|grep ctwr
oracle 36438760 46989544 0 09:38:42 pts/10 0:00 grep ctwr
oracle 28444196 1 1 Aug 12 - 376:44 ora_ctwr_hfxfdb01
$ ps -ef|grep ctwr
oracle 32047272 40830898 0 10:00:10 pts/0 0:00 grep ctwr
oracle 44172054 1 0 Aug 12 - 228:04 ora_ctwr_hfxfdb02
成功开启BCT之后后台进程ctwr随之启动(默认ctwr进程不启动)
3、问题时段等待事件
select * from (
select sql_id,top_level_sql_id,event,WAIT_CLASS,to_char(sample_time,'yyyy-mm-dd hh24:mi:ss') "DATE",count(1)
from dba_hist_active_sess_history
where sample_time between to_date('2022-08-13 18:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2022-08-13 19:00:00','yyyy-mm-dd hh24:mi:ss')
and event='block change tracking buffer space'
group by sql_id,top_level_sql_id,event,WAIT_CLASS,to_char(sample_time,'yyyy-mm-dd hh24:mi:ss')
order by 6 desc )
where rownum<11;

SQL_ID TOP_LEVEL_SQL_I EVENT WAIT_CLASS DATE COUNT(1)
--------------- --------------- ---------------------------------------- ------------ --------------------- ----------
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:02:33 27
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:01:23 27
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:19:25 26
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:18:24 26
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:13:21 26
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:07:27 26
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:03:44 26
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:01:03 25
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:00:52 25
8uvchf70uxx9x 8uvchf70uxx9x block change tracking buffer space Other 2022-08-13 18:14:11 25

10 rows selected.
4、检查large pool分配给CTWR dba buffer的空间
SQL>SELECT * FROM gv$sgastat WHERE pool='large pool';

INST_ID POOL NAME BYTES
---------- ------------------------------------ -------------------------------------------------- ----------------
1 large pool CTWR dba buffer 42254000
1 large pool free memory 20899782656
1 large pool krcc extent chunk 312516608
1 large pool ASM map operations hashta 393216
2 large pool ASM map operations hashta 393216
2 large pool krcc extent chunk 310439936
2 large pool free memory 20901859328
2 large pool CTWR dba buffer 42254000
5、调整BCT相关隐藏参数
为提高CTWR性能,可以调整bct相关的隐藏参数,调整前必须确保large pool size大小足够支撑
SQL>alter system set "_bct_buffer_allocation_max"=1073741824 sid='*';
SQL>alter system set "_bct_public_dba_buffer_size"=262144000 sid='*';
SQL>alter system set "_bct_bitmaps_per_file"=256 sid='*';  

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论