10G物化檢視PCT快速重新整理不再需要物化檢視日誌(三)
Oracle10g增加了物化檢視PCT快速重新整理的支援,使用PCT快速重新整理不再需要物化檢視日誌。
研究PCT快速重新整理的機制。
10G物化檢視PCT快速重新整理不再需要物化檢視日誌(一):http://yangtingkun.itpub.net/post/468/463132
10G物化檢視PCT快速重新整理不再需要物化檢視日誌(二):http://yangtingkun.itpub.net/post/468/463390
上一篇透過TRACE檔案的分析,確認了PCT快速重新整理是重新整理單位是分割槽。不過現在仍然存在一個問題,對於物化檢視日誌方式的快速重新整理,Oracle透過內部觸發器,在基表進行DML操作的同時在物化檢視日誌上記錄操作資訊,快速重新整理的時候根據物化檢視日誌上面的DML資訊,配合基表就可以實現重新整理了。
但是PCT快速重新整理不需要物化檢視日誌,也就是說,沒有透過額外的機制來記錄基表的變化,那麼Oracle是如何知道哪些分割槽發生了變化,哪些分割槽是不需要進行重新整理的呢。
這個疑問看來仍然需要透過TRACE來解決,這裡仍然分析上一篇文章例子中做的TRACE檔案:
PARSING IN CURSOR #16 len=430 dep=1 uid=0 ct=3 lid=0 tim=50229970671 hv=860000844 ad='27e873c0'
SELECT tname, snapid, flag, flag2, status, master_version, tables, lobmaskvec, query_len, mas_roll_seg, mlink, snapshot, auto_fun, uslog, NVL(rscn, 0), refhnt, objflag, auto_fast, sna_type_oid, sna_type_hashcode, sna_type_owner, sna_type_name, mas_type_oid, mas_type_hashcode, mas_type_owner, mas_type_name, syn_count FROM sys.snap$ WHERE sowner = :1 and vname = :2 and instsite = :3
END OF STMT
PARSE #16:c=0,e=705,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=50229970663
BINDS #31:
kkscoacd
Bind#0
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
kxsbbbfp=086d7b9c bln=22 avl=03 flg=05
value=212
Bind#1
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
kxsbbbfp=086d7b78 bln=24 avl=02 flg=05
value=29
=====================
.
.
.
=====================
PARSING IN CURSOR #31 len=210 dep=2 uid=0 ct=3 lid=0 tim=50229975777 hv=864012087 ad='3364435c'
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size, minimum, maximum, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln from hist_head$ where obj#=:1 and intcol#=:2
END OF STMT
EXEC #31:c=0,e=129,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=3,tim=50229975772
FETCH #31:c=0,e=47,p=0,cr=3,cu=0,mis=0,r=1,dep=2,og=3,tim=50229975874
STAT #31 id=1 cnt=115 pid=0 pos=1 bj=255 p='TABLE ACCESS BY INDEX ROWID HIST_HEAD$ (cr=353 pr=2 pw=0 time=29119 us)'
STAT #31 id=2 cnt=115 pid=1 pos=1 bj=257 p='INDEX RANGE SCAN I_HH_OBJ#_INTCOL# (cr=238 pr=1 pw=0 time=11936 us)'
BINDS #16:
kkscoacd
Bind#0
acdty=01 mxl=32(06) mxlc=00 mal=00 scl=00 pre=00
acflg=10 fl2=0001 frm=01 csi=852 siz=88 ff=0
kxsbbbfp=04d7dbb4 bln=32 avl=06 flg=05
value="YANGTK"
Bind#1
acdty=01 mxl=32(04) mxlc=00 mal=00 scl=00 pre=00
acflg=10 fl2=0001 frm=01 csi=852 siz=0 ff=32
kxsbbbfp=04d7dbd4 bln=32 avl=04 flg=01
value="MV_T"
Bind#2
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=00 fl2=0001 frm=00 csi=00 siz=0 ff=64
kxsbbbfp=04d7dbf4 bln=22 avl=01 flg=01
value=0
EXEC #16:c=15625,e=5674,p=0,cr=39,cu=0,mis=1,r=0,dep=1,og=4,tim=50229976479
FETCH #16:c=0,e=65,p=0,cr=2,cu=0,mis=0,r=1,dep=1,og=4,tim=50229976571
STAT #16 id=1 cnt=1 pid=0 pos=1 bj=212 p='TABLE ACCESS BY INDEX ROWID SNAP$ (cr=2 pr=0 pw=0 time=63 us)'
STAT #16 id=2 cnt=1 pid=1 pos=1 bj=217 p='INDEX UNIQUE SCAN I_SNAP1 (cr=1 pr=0 pw=0 time=27 us)'
=====================
PARSING IN CURSOR #16 len=265 dep=1 uid=0 ct=3 lid=0 tim=50229977029 hv=29191747 ad='27e85394'
SELECT masobj#, masflag, mowner, master, lastsuccess, snaptime, sysdate, loadertime, sysdate, NVL(refscn, 0), fcmaskvec, ejmaskvec, sub_handle, change_view FROM sys.snap_reftime$ WHERE sowner = :1 AND vname = :2 AND instsite = :3 ORDER BY tablenum
END OF STMT
PARSE #16:c=0,e=343,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=50229977022
BINDS #23:
kkscoacd
Bind#0
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
kxsbbbfp=086d7b9c bln=22 avl=03 flg=05
value=220
Bind#1
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
kxsbbbfp=086d7b78 bln=24 avl=02 flg=05
value=7
=====================
.
.
.
=====================
PARSING IN CURSOR #20 len=210 dep=2 uid=0 ct=3 lid=0 tim=50229980422 hv=864012087 ad='3364435c'
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size, minimum, maximum, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln from hist_head$ where obj#=:1 and intcol#=:2
END OF STMT
EXEC #20:c=0,e=134,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=3,tim=50229980416
FETCH #20:c=0,e=46,p=0,cr=3,cu=0,mis=0,r=1,dep=2,og=3,tim=50229980518
STAT #20 id=1 cnt=124 pid=0 pos=1 bj=255 p='TABLE ACCESS BY INDEX ROWID HIST_HEAD$ (cr=381 pr=2 pw=0 time=29603 us)'
STAT #20 id=2 cnt=124 pid=1 pos=1 bj=257 p='INDEX RANGE SCAN I_HH_OBJ#_INTCOL# (cr=256 pr=1 pw=0 time=12127 us)'
BINDS #16:
kkscoacd
Bind#0
acdty=01 mxl=32(06) mxlc=00 mal=00 scl=00 pre=00
acflg=10 fl2=0001 frm=01 csi=852 siz=88 ff=0
kxsbbbfp=04d7dbb4 bln=32 avl=06 flg=05
value="YANGTK"
Bind#1
acdty=01 mxl=32(04) mxlc=00 mal=00 scl=00 pre=00
acflg=10 fl2=0001 frm=01 csi=852 siz=0 ff=32
kxsbbbfp=04d7dbd4 bln=32 avl=04 flg=01
value="MV_T"
Bind#2
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=00 fl2=0001 frm=00 csi=00 siz=0 ff=64
kxsbbbfp=04d7dbf4 bln=22 avl=01 flg=01
value=0
EXEC #16:c=0,e=4175,p=0,cr=28,cu=0,mis=1,r=0,dep=1,og=4,tim=50229981265
FETCH #16:c=0,e=62,p=0,cr=2,cu=0,mis=0,r=1,dep=1,og=4,tim=50229981357
=====================
上面的這兩個SQL不但獲取了物化檢視的一些基本資訊,還獲取了物化檢視上次重新整理的SCN資訊。
=====================
PARSING IN CURSOR #25 len=71 dep=1 uid=0 ct=3 lid=0 tim=50230015976 hv=3754315372 ad='27e81d6c'
select nvl(max(spare1),0) from tabpart$ where bo# = :1 and spare1 <= :2
END OF STMT
PARSE #25:c=0,e=576,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=50230015967
BINDS #25:
kkscoacd
Bind#0
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=00 fl2=0001 frm=00 csi=00 siz=48 ff=0
kxsbbbfp=079962d0 bln=22 avl=04 flg=05
value=56624
Bind#1
acdty=02 mxl=22(06) mxlc=00 mal=00 scl=00 pre=00
acflg=10 fl2=0001 frm=01 csi=00 siz=0 ff=24
kxsbbbfp=079962e8 bln=22 avl=06 flg=01
value=6050226572
EXEC #25:c=0,e=655,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=50230016695
FETCH #25:c=0,e=101,p=0,cr=2,cu=0,mis=0,r=1,dep=1,og=4,tim=50230016824
STAT #25 id=1 cnt=1 pid=0 pos=1 bj=0 p='SORT AGGREGATE (cr=2 pr=0 pw=0 time=119 us)'
STAT #25 id=2 cnt=1 pid=1 pos=1 bj=266 p='TABLE ACCESS BY INDEX ROWID TABPART$ (cr=2 pr=0 pw=0 time=79 us)'
STAT #25 id=3 cnt=3 pid=2 pos=1 bj=269 p='INDEX RANGE SCAN I_TABPART_BOPART$ (cr=1 pr=0 pw=0 time=36 us)'
=====================
這個SQL讀取分割槽表的最大SCN資訊。
SQL> CONN YANGTK/YANGTK@YTK102
已連線。
SQL> alter index pk_t rebuild;
索引已更改。
SQL> INSERT INTO T VALUES (150, 'A');
已建立 1 行。
SQL> COMMIT;
提交完成。
SQL> DELETE T PARTITION (P3) WHERE ROWNUM = 1;
已刪除 1 行。
SQL> COMMIT;
提交完成。
下面切換回SYS使用者,檢查TABPART$表:
SQL> CONN / AS SYSDBA
已連線。
SQL> SELECT SPARE1 from tabpart$ where bo# = 56624 ;
SPARE1
----------
6050256635
6050256782
由於剛才分別對分割槽P2和分割槽P3進行了操作,因此TABPART$中可以看到這兩個分割槽的SPARE1列記錄了SCN的值,看到這裡已經可以推斷出,Oracle是根據分割槽的SCN是否大於上次重新整理的SCN來判斷這個分割槽是否需要進行PCT重新整理。
=====================
PARSING IN CURSOR #24 len=374 dep=2 uid=0 ct=3 lid=0 tim=50230096308 hv=236422262 ad='27e7e7dc'
select distinct tp1.obj#, tp1.part# from (select tp.obj#, tp.part# from tabpart$ tp where tp.bo# = :dobj# and tp.spare1 > :lscn union select /*+ ordered use_hash(tp) */ tp.obj#, tp.part# from sumdelta$ s1, tabpart$ tp where tp.bo# = :dobj# and tp.dataobj# = s1.partitionobj# and s1.scn> :lscn) tp1 order by tp1.part#
END OF STMT
PARSE #24:c=0,e=1062,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=4,tim=50230096302
BINDS #25:
kkscoacd
Bind#0
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
kxsbbbfp=086d7b9c bln=22 avl=03 flg=05
value=157
Bind#1
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=08 fl2=0001 frm=00 csi=00 siz=24 ff=0
kxsbbbfp=086d7b78 bln=24 avl=02 flg=05
value=2
=====================
PARSING IN CURSOR #25 len=210 dep=3 uid=0 ct=3 lid=0 tim=50230097399 hv=864012087 ad='3364435c'
select /*+ rule */ bucket_cnt, row_cnt, cache_cnt, null_cnt, timestamp#, sample_size, minimum, maximum, distcnt, lowval, hival, density, col#, spare1, spare2, avgcln from hist_head$ where obj#=:1 and intcol#=:2
END OF STMT
EXEC #25:c=15625,e=158,p=0,cr=0,cu=0,mis=0,r=0,dep=3,og=3,tim=50230097387
FETCH #25:c=0,e=40,p=0,cr=2,cu=0,mis=0,r=0,dep=3,og=3,tim=50230097497
STAT #25 id=1 cnt=129 pid=0 pos=1 bj=255 p='TABLE ACCESS BY INDEX ROWID HIST_HEAD$ (cr=404 pr=2 pw=0 time=30095 us)'
STAT #25 id=2 cnt=129 pid=1 pos=1 bj=257 p='INDEX RANGE SCAN I_HH_OBJ#_INTCOL# (cr=274 pr=1 pw=0 time=12353 us)'
BINDS #24:
kkscoacd
Bind#0
acdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
acflg=00 fl2=0001 frm=00 csi=00 siz=48 ff=0
kxsbbbfp=04d7a174 bln=22 avl=04 flg=05
value=56624
Bind#1
acdty=02 mxl=22(06) mxlc=00 mal=00 scl=00 pre=00
acflg=10 fl2=0001 frm=00 csi=00 siz=0 ff=24
kxsbbbfp=04d7a18c bln=22 avl=06 flg=01
value=6050226324
Bind#2
No oacdef for this bind.
Bind#3
No oacdef for this bind.
EXEC #24:c=15625,e=2039,p=0,cr=2,cu=0,mis=1,r=0,dep=2,og=4,tim=50230098433
FETCH #24:c=0,e=434,p=0,cr=5,cu=0,mis=0,r=1,dep=2,og=4,tim=50230098887
FETCH #24:c=0,e=7,p=0,cr=0,cu=0,mis=0,r=0,dep=2,og=4,tim=50230098944
STAT #24 id=1 cnt=1 pid=0 pos=1 bj=0 p='SORT UNIQUE (cr=5 pr=0 pw=0 time=498 us)'
STAT #24 id=2 cnt=1 pid=1 pos=1 bj=0 p='VIEW (cr=5 pr=0 pw=0 time=457 us)'
STAT #24 id=3 cnt=1 pid=2 pos=1 bj=0 p='SORT UNIQUE (cr=5 pr=0 pw=0 time=431 us)'
STAT #24 id=4 cnt=1 pid=3 pos=1 bj=0 p='UNION-ALL (cr=5 pr=0 pw=0 time=380 us)'
STAT #24 id=5 cnt=1 pid=4 pos=1 bj=266 p='TABLE ACCESS BY INDEX ROWID TABPART$ (cr=2 pr=0 pw=0 time=74 us)'
STAT #24 id=6 cnt=3 pid=5 pos=1 bj=269 p='INDEX RANGE SCAN I_TABPART_BOPART$ (cr=1 pr=0 pw=0 time=36 us)'
STAT #24 id=7 cnt=0 pid=4 pos=2 bj=0 p='HASH JOIN (cr=3 pr=0 pw=0 time=213 us)'
STAT #24 id=8 cnt=0 pid=7 pos=1 bj=157 p='TABLE ACCESS FULL SUMDELTA$ (cr=3 pr=0 pw=0 time=48 us)'
STAT #24 id=9 cnt=0 pid=7 pos=2 bj=266 p='TABLE ACCESS BY INDEX ROWID TABPART$ (cr=0 pr=0 pw=0 time=0 us)'
STAT #24 id=10 cnt=0 pid=9 pos=1 bj=269 p='INDEX RANGE SCAN I_TABPART_BOPART$ (cr=0 pr=0 pw=0 time=0 us)'
=====================
上面的SQL確定需要進行PCT重新整理的分割槽。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-331106/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 物化檢視
- 物化檢視快速重新整理與ORA-00001
- 物化檢視(zt)
- StarRocks 物化檢視重新整理流程和原理
- StarRocks 物化檢視重新整理流程及原理
- calcite物化檢視詳解
- 物化檢視日誌無法正常清除的解決方法
- Postgres使用trigger自動重新整理物化檢視
- 物化檢視如何快速完成資料聚合操作?
- Oracle普通檢視和物化檢視的區別Oracle
- 用exp、imp遷移包含物化檢視日誌的資料
- hg_job配置定時重新整理物化檢視
- 資料庫的物化檢視資料庫
- 物化檢視分割槽實驗
- ClickHouse 物化檢視學習總結
- 物化檢視幾個知識點
- ClickHouse 效能優化?試試物化檢視優化
- ClickHouse效能優化?試試物化檢視優化
- Oracle物化檢視的建立及使用(二)Oracle
- Oracle物化檢視的建立及使用(一)Oracle
- 基於ROWID更新的物化檢視測試
- 使用Materialise物化檢視解耦微服務架構解耦微服務架構
- 火山引擎ByteHouse:如何最佳化ClickHouse物化檢視能力?
- 【MVIEW】Oracle通過物化檢視同步表資料及簡介ViewOracle
- 資料泵匯出匯入物化檢視(ORA-39083)
- alertmanager: 檢視日誌
- Linux 檢視日誌Linux
- 基於圖神經網路的動態物化檢視管理神經網路
- 【SQL】Oracle查詢轉換之物化檢視查詢重寫SQLOracle
- Logminer如何檢視日誌
- Hyperf日誌檢視元件元件
- 使用SpringBoot+PostgreSQL物化檢視實現微服務設計模式 - vinsguruSpring BootSQL微服務設計模式
- 檢視系統的日誌
- docker檢視容器日誌命令Docker
- windows_weblogic日誌檢視WindowsWeb
- 自定義 Command 檢視 Laravel 日誌Laravel
- 檢視日誌的幾種形式
- mysql檢視binlog日誌詳解MySql
- ORACLE 物化檢視維護中相關基表發生欄位長度類DDL變更後需要重建或者全量重新整理Oracle