關於Oracle的高水平線

2021-09-05 04:10:14 字數 1877 閱讀 3193

關於 oracle 的高水平線

high water mark 故名思義為高水平線 , 一般是相對乙個表而言的 , 當乙個表有資料不斷的插入時 ,high water mark 值不斷增高 , 對那些全表掃瞄的 select 查詢是以 high water mark 為終點的 , 雖然表中可能只有一行記錄 . 它是表的空間曾經擴充到的值 .

之所以對hwm產生了興趣還是緣於下午的那個resize事件,呵呵itpub個人空間

建立一張 test 表

-- create table

create table test (

a char(1024)

); select * from dba_extents where segment_name='test'

後見圖:表建立的時候會按照初始化引數進行建立,預設是 initial extent 為 64k ,包含 8 個資料塊。

插入 1000 條原始記錄, 1000*1k 約等於 1m

declare

-- local variables here

i integer;

begin

-- test statements here

for i in 1..1000

loop

insert into test values(i);

end loop;

commit;

end;

select sum(bytes) from user_extents where segment_name='test' 

select * from dba_extents where segment_name='test'

後見圖:

執行 delete 操作

delete * from test;

執行後的圖與上面一樣,沒有發生任何變化

再執行truncate

操作,把該錶的高水平線恢復到原有的初始化階段

truncate table test;

後見圖:

結論:

資料被刪除後,高水平線( high-water mark , hwm )並沒有復位只是那些空間不再使用而已,再次查詢依然會讀取 hwh 以前的塊查詢是否有可用的資料。而截斷表將復位 hwh ,告訴這些空間沒有儲存資料。

其他引申出來的問題:

在插入測試 的資料過程中,如果首先插入 100 條、 200 條的時候,資料庫 分配區間是以 64k 為單位分配的,當插入到 1000 條時,新分配的區間突然變為 1m 。

我反覆檢視了該錶的 storage 定義

storage (

initial 64k

minextents 1

maxextents unlimited

); 只是沒有 next extent 的定義而已,又找了很久 9i 、 10g 的官方文件,發現對 next extent 的解釋還是按照早期版本的說法,定義多少分配多少,百思不得其解。

還是通過 google 找到的介紹:

先分配 16 個 64k 的 extent ,

0-15 extents 每個大小是 64k 合計大小 1m

16 - 79 extents 每個大小是 1m 合計大小 63m -- 以上兩項大小合計 64m

80 - 199 extents 每個大小是 8m 合計大小 960m -- 以上三項大小合計 1024m = 1g

200 -?? extents 每個大小是 64m

oracle10g extent autoallocate 分配時,表是如何分配空間

oracle9i tablespace 空間分配中 initial_extent 與 lmt,dmt

關於Oracle的高水平線

關於 oracle 的高水平線 high water mark 故名思義為高水平線 一般是相對乙個表而言的 當乙個表有資料不斷的插入時 high water mark 值不斷增高 對那些全表掃瞄的 select 查詢是以 high water mark 為終點的 雖然表中可能只有一行記錄 它是表的空...

HTML示例06 水平線

1.說明 水平線用於段落與段落之間的間隔,使文件結構清晰明白,也使文字的編排更整齊。水平線自身具有很多的屬性,如寬度 高度 顏色 排列對齊等。在html5中經常會用到水平線,合理使用水平線可以獲得非常好的頁面裝飾效果。一篇內容繁雜的文件,如果合理放置幾條水平線,就會變得層次分明,便於閱讀。語法 下面...

前端標籤 水平線標籤

單詞縮寫 horizontal 橫線在網頁中常常看到一些水平線將段落與段落之間隔開,使得文件結構清晰,層次分明。這些水平線可以通過插入實現,也可以簡單地通過標籤來完成,就是建立橫跨網頁水平線的標籤。其基本語法格式如下 是單標籤 舉個例子 lang en charset utf 8 head 40.6...