XTTS全備開啟BCT後等待事件 block change tracking buffer space

xfhuangfu發表於2022-08-17

XTTS全備開啟BCT後等待事件 block change tracking buffer space 


 適用範圍
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='*';  

-the end-


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28373936/viewspace-2910796/,如需轉載,請註明出處,否則將追究法律責任。

相關文章