關於 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...