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資料庫
- 資料庫檢視資料庫
- 資料庫-檢視資料庫
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫
- 2.12 資料庫資料字典檢視資料庫
- oracle 統計資訊檢視與收集Oracle
- Oracle相關資料字典檢視Oracle
- Oracle 檢查當前資料庫CPU和PSU補丁資訊Oracle資料庫
- oracle資料庫檢視鎖表的sql語句整理Oracle資料庫SQL
- GBase8s 檢視資料庫表空間資訊資料庫
- 資料庫的物化檢視資料庫
- openGausspostgreSQL資料庫效能檢視SQL資料庫
- 資料庫檢視的作用資料庫
- 資料庫檢視的使用資料庫
- android 檢視資料庫和shaedpreference資料框架Android資料庫框架
- Oracle資料庫(RAC)巡檢報告Oracle資料庫
- mysql binlog檢視指定資料庫MySql資料庫
- 什麼是資料庫檢視?資料庫
- Jtti:linux怎麼檢視oracle資料庫的執行狀態JttiLinuxOracle資料庫
- Oracle資料庫scott使用者建立view檢視許可權Oracle資料庫View
- Oracle錶的歷史統計資訊檢視Oracle
- 2.8.3 資料庫服務的資料字典檢視資料庫
- 檢視mysql資料庫連線數、併發數相關資訊MySql資料庫
- 使用RMAN複製資料庫 active database資料庫Database
- 【SQL】Oracle資料庫資料量及效能資訊收集SQLOracle資料庫
- Oracle資料庫(單機)巡檢報告Oracle資料庫
- Linux系統glibc庫版本資訊檢視Linux
- 【SCRIPT】Oracle資料庫基本資訊收集指令碼Oracle資料庫指令碼
- 如何檢視織夢CMS網站原始碼中的資料庫資訊網站原始碼資料庫
- 資料庫檢視,索引,觸發器資料庫索引觸發器
- Android資料庫檢視庫---Android-Debug-DatabaseAndroid資料庫Database
- Oracle OCP(27):使用資料字典檢視管理物件Oracle物件
- oracle資料庫sql查詢檢視第二次查詢很慢Oracle資料庫SQL
- Oracle不同版本檢視資料庫session/system級別設定了哪些eventsOracle資料庫Session
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- 【kingbase資料庫】kingbase檢視所有表名資料庫
- Oracle 12c 檢視CDB&PDBs資訊(SQL*PLUS)OracleSQL
- python使用cx_Oracle連線oracle資料庫獲取常用資訊PythonOracle資料庫