Oracle中的Low HWM與 High HWM 高水位

發表于:2013-10-14來源:IT博客大學習作者:Maclean Liu點擊數: 標簽:oracle
在MSSM的FREELIST下, 高水位High Water Mark代表所有相關塊, 高水位以上就是未格式化unformatted 的數據塊,INSRT數據時不能直接使用。當FREELIST中不包含可插入數據塊時 HWM默認每次上升5個數據塊。

  在MSSM的FREELIST下, 高水位High Water Mark代表所有相關塊, 高水位以上就是未格式化unformatted 的數據塊,INSRT數據時不能直接使用。當FREELIST中不包含可插入數據塊時 HWM默認每次上升5個數據塊。

  對于ASSM管理的BITMAP 數據段而言,Oracle允許在數據段的中部出現unformatted blocks未格式化的數據塊, 基于以下的原因:

  一、在以前 HWM以下的數據塊必然是formatted , 為了維護這一點代價是昂貴的:

  長時間持有HW enqueue 隊列鎖對并發的抑制

  過于頻繁的持有HW enqueue在Oracle研發看來是罪惡的

  上漲HWM 而不格式化 這樣的話更有效率,因為格式化往往涉及到 IO,是一種較慢的操作

  二、 在直接路徑加載過程中,最后的一個extent中的數據塊將被全部format 格式化,而如果下一次還是direct load直接路徑加載數據的話,它不會從Freelist上獲取數據塊,而是使用HWM以上新的數據盤區extent。 如果這個數據段是典型的一直在direct load加載數據的話,則可能在freelist上有很多unused block從來不被使用,而被浪費了。 這可能造成空間的浪費,尤其是在Extent size 很大的時候 或者 數據段幾乎從來不傳統路徑插入數據的時候。保留這些數據塊為unformatted則可以讓加載數據時利用到這些空間空洞

  為了實現這一點就需要使用2個High Water Mark 即Low HWM和High HWM; Low HWM以下都是formatted 數據塊 而 High HWM以上都是unformatted數據塊。

  Extent Header:: spare1: 0 spare2: 0 #extents: 18413 #blocks: 147304

  last map 0xabc23541 #maps: 36 offset: 2716

  Highwater:: 0xabc23f6c ext#: 18412 blk#: 3 ext size: 8

  #blocks in seg. hdr's freelists: 0

  #blocks below: 147299

  mapblk 0xabc23541 offset: 325

  Unlocked

  --------------------------------------------------------

  Low HighWater Mark :

  Highwater:: 0xabc23f6c ext#: 18412 blk#: 3 ext size: 8

  #blocks in seg. hdr's freelists: 0

  #blocks below: 147299

  mapblk 0xabc23541 offset: 325

  Level 1 BMB for High HWM block: 0xabc23ef9

  Level 1 BMB for Low HWM block: 0xabc23ef9

  --------------------------------------------------------

  Segment Type: 1 nl2: 2 blksz: 8192 fbsz: 0

  L2 Array start offset: 0x00001434

  First Level 3 BMB: 0x00000000

  L2 Hint for inserts: 0xabc0000a

  Last Level 1 BMB: 0xabc23ef9

  Last Level II BMB: 0xabc1d5fa

  Last Level III BMB: 0x00000000

  Map Header:: next 0xabc009a1 #extents: 307 obj#: 99039 flag: 0x10000000

  Inc # 0

  Extent Map

  在順序讀取過程中,那些unformatted數據塊將被忽略。關于一個數據塊究竟是format了還是沒有的信息是存放在2個高水位之間的bitmap中。 當掃描數據段的塊時,掃描算法并不參考LOW HWM以下的bitmap block; High HWM用來作為順序讀取該數據段時 停止掃描的位置。

  格式化數據塊一般發生在搜索空間時,如果數據塊被發現時unformatted,則格式化一部分數據塊(至少16個)。 格式化數據塊未必更新Low HWM。

  何時更新LOW HWM是一個問題: Low HWM在當前extent和之前的extent中的所有數據塊均被格式化的情況下被更新,否則不更新。

  來舉2個場景: HENO=高水位盤區號, HBNO= 高水位數據塊號,MyEno = My Extent number; MyBno = My block number. :

  如果(HEno == MyEno && MyBno == HBno+1), 例如在同一個extent中格式化下一個范圍的block

  如果(HEno + 1 == MyEno && HBno == HExtentSize &&MyBno == 0),例如在前一個extent中所有的數據塊均已format 然后要format下一個extent時

  對于High HWM而言,如果High HWM以下的數據塊不夠用,則可能上升High HWM,這個過程需要用到HW Enqueue隊列鎖。High HWM移動的塊數目取決于一級bitmap block控制的塊數目,HIGH HWM以下包含了所有的L1 bitmap block。

原文轉自:http://blogread.cn/it/article/6695

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97