ORACLE資料庫檢視ACQ(ACTIVE CHECKPOINT QUEUE)資訊
實驗環境:
11.2.0.4單機Oracle資料庫,Oracle Linux 6.5,X86_64,資料庫名ORCL
ACQ(ACTIVE CHECKPOINT QUEUE),活動檢查點佇列。當出發checkpoint請求後,系統會記錄一個的SCN跟RBA,稱為checkpoint SCN,checkpoint RBA。checkpoint SCN,checkpoint RBA會作為一個活動檢查點被放入ACQ裡面。然後DBWR程式會把髒塊中LRBA小於等於此checkpoint RBA的髒塊寫入儲存,當全部髒塊寫完後,CKPT程式將checkpoint SCN寫入到資料檔案頭以及控制檔案中。最後此活動檢查點從ACQ中去除。
下面介紹3種方法檢視ORACLE資料庫ACQ資訊
1. x$activeckpt系統檢視
X$ACTIVECKPT代表活躍的檢查點佇列,ckpt_type代表了不同型別的檢查點,其中7代表Incremental checkpoint,3代表Full checkpoint,0代表沒有記錄活動檢查點資訊。此檢視中NXT_ACT_ENT,PRV_ACT_ENT分別指向了下一個活動檢查點的記憶體地址,前一個活動檢查點的記憶體地址。第一個活動檢查點記錄指向的前一個活動檢查點與最後一個活動檢查點記錄指向的後一個活動檢查點稱為queuehead,queuehead沒有包括實際的檢查點資訊,是用作表示ACQ的入口,並指向前一個活動檢查點及後一個活動檢查點。
x$activeckpt系統檢視結構:
ADDR , INDX , INST_ID , --例項id NXT_ACT_ENT , --下一個活動檢查點條目的記憶體地址 PRV_ACT_ENT , --上一個活動檢查點條目的記憶體地址 NXT_CHLD_ENT , PRV_CHLD_ENT , CKPT_SCN_BAS , --活動檢查點SCN BASE CKPT_SCN_WRP , --活動檢查點SCN WARP CKPT_TIM , --1987/5/14 到發出檢查點的時刻之間的秒數 CKPT_ALLOC_THR , --活動檢查點rba中redo thread CKPT_RBA_SEQ , --活動檢查點rba中redo SEQUENCE CKPT_RBA_BNO , --活動檢查點rba中redo block CKPT_RBA_BOF , --活動檢查點rba中redo block, offset CKPT_EN_THR_BITVEC , RCV_SO , CKPT_ID , TSN# , OBJ_ID , CKPT_ABS_FIL_NUM , CKPT_NUM_FILES_EXPTD, CKPT_ENQUEUE , PARENT_ENT , CKPT_FILES_TOTAL , CKPT_WAITER , CKPT_BUFFER_CNT , CKPT_TYPE , --檢查點型別,7:Incremental checkpoint,3:Full checkpoint,10:object reuse/truncate checkpoint,11:object checkpoint CKPT_PRIORITY , --檢查點優先順序 CKPT_FLAGS --檢查點標誌
2. 10347 EVENT
10347 跟蹤事件,列印出ACTIVE CHECKPOINT QUEUE資訊以及快取塊頭資訊。使用oradebug關聯到CKPT程式(oradebug setorapname ckpt;),然後使用oradebug設定事件(oradebug SESSION_EVENT 10347 trace name context;),最後執行alter system checkpoint;,在CKPT程式的trace檔案中便會有對應的記錄。設定此事件後只能出發一次,如果想要再次觸發10347事件需要重新設定10347事件。
--session 1 SQL> oradebug setorapname ckpt Oracle pid: 12, Unix process pid: 7435, image: oracle@rac1 (CKPT) SQL> oradebug SESSION_EVENT 10347 trace name context; Statement processed. --session 2 SQL> alter system checkpoint; --session 1 SQL> oradebug tracefile_name; /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ckpt_7435.trc SQL> !tail -n 500 /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ckpt_7435.trc …… *** 2022-03-27 16:23:22.576 Active Checkpoint Queue dump Queuehead: 0x6001ce90 --佇列頭記憶體地址 hd_kcbkacq: [0xc1662b88,0xbf7f5870] --下一活動檢查點條目記憶體地址,上一活動檢查點條目記憶體地址,X$ACTIVECKPT. NXT_ACT_ENT,X$ACTIVECKPT. PRV_ACT_ENT fl_kcbkacq: 0xc2dd9898 flg_kcbkacq: 0x0 pc_kcbkach[0]: 0 pc_kcbkach[1]: 1 pc_kcbkach[2]: 1 pc_kcbkach[3]: 0 tc_kcbkach[0]: 0 tc_kcbkach[1]: 0 tc_kcbkach[2]: 0 tc_kcbkach[3]: 1 tc_kcbkach[4]: 0 tc_kcbkach[5]: 0 tc_kcbkach[6]: 0 tc_kcbkach[7]: 0 tc_kcbkach[8]: 0 tc_kcbkach[9]: 0 tc_kcbkach[10]: 0 tc_kcbkach[11]: 0 tc_kcbkach[12]: 0 Queue Entries for queuehead 0x6001ce90. Entry: 0xc1662b88 --第一個活動檢查點條目記憶體地址 lk_kcbkace: [0xbf7f7c48,0x6001ce90] ch_kcbkace: [0xc1662b98,0xc1662b98] -- lk_->link,雙向連結串列,下一活動檢查點條目記憶體地址,上一活動檢查點條目記憶體地址,X$ACTIVECKPT.NXT_ACT_ENT,X$ACTIVECKPT.PRV_ACT_ENT scn_kcbkace: scn: 0x0000.000fa6a5 rba_kcbkace: [0x5.4ce5.10] --活動檢查點SCN,活動檢查點RBA,X$ACTIVECKPT.CKPT_SCN_XXX,X$ACTIVECKPT.CKPT_RBA_XXX rq_kcbkace: 0x0, ckid_kcbkace: 0x0 tsn_kcbkace: 0x4, obj_kcbkace: 0x9d607ec afn_kcbkace: 0x0, pa_kcbkace: 0x0 fcnt_kcbkace: 0x0, wa_kcbkace: 0x0 ctyp_kcbkace: Thread Checkpoint pr_kcbkace: Med --檢查點型別,檢查點優先順序,X$ACTIVECKPT.CKPT_TYPE,X$ACTIVECKPT.CKPT_PRIORITY flg_kcbkace: Cross instance call. --檢查點標誌,X$ACTIVECKPT.CKPT_FLAGS nf_kcbkace: 0, eq_kcbkace =0x0 =============== Entry: 0xbf7f7c48 --第二個活動檢查點條目記憶體地址 lk_kcbkace: [0xbf7f6c20,0xc1662b88] ch_kcbkace: [0xbf7f7c58,0xbf7f7c58] scn_kcbkace: scn: 0xffff.ffffffff rba_kcbkace: [0xffffffff.ffffffff.ffff] rq_kcbkace: 0x0, ckid_kcbkace: 0x0 tsn_kcbkace: 0x4, obj_kcbkace: 0x9d607ec afn_kcbkace: 0x0, pa_kcbkace: 0x0 fcnt_kcbkace: 0x0, wa_kcbkace: 0x0 ctyp_kcbkace: Incremental Checkpoint pr_kcbkace: Low flg_kcbkace: Being serviced by dbwr 0 Incremental Checkpoint. nf_kcbkace: 0, eq_kcbkace =0x0 ……
3. dump記憶體
--用oradebug dump fixed sga,使用關鍵詞acq_找到ACQ佇列頭地址 SQL> oradebug setmypid Statement processed. SQL> oradebug unlimit; Statement processed. SQL> oradebug dumpsga 2253784; Statement processed. SQL> oradebug tracefile_name /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_10004.trc SQL> !grep acq_ /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_10004.trc struct kcbkach kcbkacq_ [06001CE90, 06001CF28) = BF7F7C48 00000000 BF7F5870 ... --使用gdb dump記憶體檢視資料 [oracle@rac1 ~]$ ps -ef | grep smon oracle 7437 1 0 11:10 ? 00:00:00 ora_smon_orcl oracle 10037 6717 0 17:05 pts/1 00:00:00 grep smon [oracle@rac1 ~]$ gdb $ORACLE_HOME/bin/oracle -p 7437 --dump出ACQ佇列頭的資料 (gdb) x/19xg 0x06001CE90 0x6001ce90: 0x00000000c1662b88 0x00000000bf7f5870 --下一個活動檢查點條目的記憶體地址,上一活動檢查點條目記憶體地址,X$ACTIVECKPT.NXT_ACT_ENT,X$ACTIVECKPT.PRV_ACT_ENT 0x6001cea0: 0x00000000c2dd9898 0x0000000100000001 0x6001ceb0: 0x0000000000000000 0x0000000000000000 0x6001cec0: 0x0000000100000000 0x0000000000000000 0x6001ced0: 0x0000000000000000 0x0000000000000000 0x6001cee0: 0x0000000000000000 0x0000000000000000 0x6001cef0: 0x00000000c1662b88 0x0000000000000000 0x6001cf00: 0x0000000300000000 0x0000000000000000 0x6001cf10: 0x0000000000000000 0x0000000000000000 0x6001cf20: 0x00000000bf7f5870 --dump出第一個活動檢查點條目資料 (gdb) x/2xg 0x00000000c1662b88 0xc1662b88: 0x00000000bf7f7c48 0x000000006001ce90 --下一個活動檢查點條目的記憶體地址,上一活動檢查點條目記憶體地址,X$ACTIVECKPT.NXT_ACT_ENT,X$ACTIVECKPT.PRV_ACT_ENT (gdb) x/2xg 0x00000000c1662b88+16*2 0xc1662ba8: 0x096d0000000fac43 0x0096000141979293 --0-3 BYTES:SCN BASE, X$ACTIVECKPT. CKPT_SCN_BAS;4-5 BYTES:SCN WRAP, X$ACTIVECKPT.CKPT_SCN_WRP;8-11 BYTES:X$ACTIVECKPT.CKPT_TIM (gdb) x/2xg 0x00000000c1662b88+16*3 0xc1662bb8: 0x0000000200000006 0x0000000200000010 --0-3 BYTES: X$ACTIVECKPT.CKPT_RBA_SEQ;4-7 BYTES:X$ACTIVECKPT.CKPT_RBA_BNO;8-9 BYTES:X$ACTIVECKPT.CKPT_RBA_BOF (gdb) x/2xg 0x00000000c1662b88+16*26 0xc1662d28: 0x0000000300000000 0x0000000000000000 --4-7 BYTES:X$ACTIVECKPT.CKPT_TYPE,8-11 BYTES:X$ACTIVECKPT.CKPT_PRIORITY;12-15 BYTES:X$ACTIVECKPT.CKPT_FLAGS
參考資料:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955733/viewspace-2884355/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視各項Oracle資料庫資訊Oracle資料庫
- 檢視錶空間及資料檔案的checkpoint資訊
- 檢視資料庫中各表資訊資料庫
- 檢視oracle資料庫----sizeOracle資料庫
- 29_檢查點佇列(checkpoint queue)佇列
- 【轉】檢視Oracle資料庫阻塞Oracle資料庫
- 【Oracle-資料庫概念】-Oracle checkpoint詳解Oracle資料庫
- 檢視oracle資料庫真實大小Oracle資料庫
- Oracle 資料庫字典 檢視 基表Oracle資料庫
- 檢視oracle資料庫字符集Oracle資料庫
- ORACLE之檢視資料庫的SQLOracle資料庫SQL
- 如何檢視資料庫中的授權資訊資料庫
- 資料庫檢視資料庫
- 資料庫-檢視資料庫
- ORACLE資料庫檢視執行計劃Oracle資料庫
- V$ACTIVE_SESSION_HISTORY 檢視中包含的資訊Session
- 檢視資料庫版本與補丁的版本資訊資料庫
- 通過連線檢視資料庫相關資訊資料庫
- Oracle ASM檢視資訊OracleASM
- oracle checkpoint檢查點Oracle
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- Oracle資料庫中物化檢視的原理剖析Oracle資料庫
- 檢視oracle資料庫是否為歸檔模式Oracle資料庫模式
- Oracle資料庫檢視使用者狀態Oracle資料庫
- MySQL資料庫檢視:檢視定義、建立檢視、修改檢視MySql資料庫
- 資料庫無法建立資料庫檢視資料庫
- 【檢視】oracle 資料字典檢視之 DICT / DICTIONARYOracle
- Oracle 資料庫檢視與基表的關係Oracle資料庫
- Oracle常用命令 檢視資料庫的SQLOracle資料庫SQL
- Oracle資料庫巡檢Oracle資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-檢視資料檔案資訊Oracle資料庫
- GBase8s 檢視資料庫表空間資訊資料庫
- 資料庫檢視詳解資料庫
- 檢視資料庫的版本資料庫
- 資料庫的物化檢視資料庫
- 資料庫檢視的作用資料庫
- 資料庫檢視的使用資料庫
- oracle常用資料字典.檢視Oracle