日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle PCTfree assm,Oracle 段空间管理方式与PCTFREE和PCTUSED的概念

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle PCTfree assm,Oracle 段空间管理方式与PCTFREE和PCTUSED的概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle 段空間管理方式與PCTFREE和PCTUSED的概念

SQL> create table test11 (ID number(10),score number(10,1),name varchar2(20),pc number(10)) tablespace test;

SQL> set timing on

SQL> set time on

SQL> DECLARE i integer;

begin

i:=1;

while i<=1000000 loop

insert into test11(id) values (i);

i:=i+1;

end loop;

commit;

end;

SQL> set timing on

SQL> set time on

SQL> set autotrace traceonly;

SQL> alter session set events '10046 trace name context forever ,level 12';

SQL> alter session set events '10053 trace name context forever ,level 1';

SQL> explain plan for update test11 set score=99 ;

SQL> select * from table (dbms_xplan.display);

SQL> update test11 set score=99;

1000000 rows updated.

Elapsed: 01:00:47.75??-? ?update 時長一個小時

Execution Plan

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

Plan hash value: 1672778901

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

| Id??| Operation? ?? ?? ? | Name? ?| Rows??| Bytes | Cost (%CPU)| Time? ???|

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

|? ?0 | UPDATE STATEMENT? ?|? ?? ???|??1000K|??3909K|? ?705? ?(3)| 00:00:09 |

|? ?1 |??UPDATE? ?? ?? ?? ?| TEST11 |? ?? ? |? ?? ? |? ?? ?? ?? ?|? ?? ?? ? |

|? ?2 |? ?TABLE ACCESS FULL| TEST11 |??1000K|??3909K|? ?705? ?(3)| 00:00:09 |

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

Statistics

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

714??recursive calls

494090309??db block gets

1318480??consistent gets

3329??physical reads

467634216??redo size

824??bytes sent via SQL*Net to client

719??bytes received via SQL*Net from client

3??SQL*Net roundtrips to/from client

9??sorts (memory)

0??sorts (disk)

1000000??rows processed

測試2:

create table test11 (ID number(10),score number(10,1),name varchar2(20),pc number(10)) tablespace users pctfree 50;

conn user/password

@?/rdbms/admin/utlchain.sql

analyze table test11 list chained rows into chained_rows;

select count(*) from chained_rows where table_name='TEST11';

To avoid it, create table test11 with a high value set for pctfree,Repeat the test once again and you will see the update operation completing faster。

2.? ? ? ? 段空間管理方式

段管理主要有兩種方式:

自動管理方式AUTO,采用位圖管理段的存儲空間,使用位圖來管理段中已用數據塊和空閑數據塊.

手工管理方式MANUAL, 采用FREELIST管理段的存儲空間,使用FREELIST來管理段中間的空閑數據塊.

數據塊的管理方法分為:

1、自動管理方式如創建表空間時設置為本地管理方式,并且將段的存儲空間方式設置為AUTO,該表空間的所有塊均采用自動管理方式。系統默認值,

2、手工管理方式是傳統的管理方式,主要通過PCTFREE和PCTUSED兩個存儲參數控制可用存儲區的大小,避免行遷移現象的發生。這兩個參數可在創建表空間時設置,

也可在數據庫的模式對象(表,索引)中設置。模式對象中設置的優先級比表空間的要高。如表和索引中沒有設置,則按表空間的設置,如表空間也沒設置,

則按自動管理方式管理塊。

每個表空間中,可以為創建的對象指定缺省的存儲參數。創建對象時指定的存儲參數將覆蓋缺省值。如果在創建對象時沒有指定存儲參數,那么系統將使用缺省值。

系統表空間使用ASSM,ASSM使用位圖而不是傳統的FreeList來管理段內的free db block,大大提升了空間管理的性能,

同時顯著的減少segment header類型的buffer busy wait等待事件,減少熱快和碎片發生。

3.? ? ? ? PCTFREE和PCTUSED的概念:

PCTFREE存儲參數告訴ORACLE什么時候應該將數據塊從對象的空閑列表中移出。ORACLE的默認參數是 PCTFREE=10;

也就是說,一旦一個INSERT操作使得數據塊的90%被使用,這個數據塊就從空閑列表(free list)中移出。

PCTUSED存儲參數告訴ORACLE什么時候將以前滿的數據塊加到空閑列表中。當記錄從數據表中刪除時,數據庫的數據塊就有空間接受新的記錄,

但只有當填充的空間降到PCTUSED值以下時,該數據塊才被連接到空閑列表中,才可以往其中插入數據。PCTUSED的默認值是PCTUSED=40。

(1)PCTUSED較高意味著相對較滿的數據塊會被放置到空閑列表中,從而有效的重復使用數據塊的空間,但會導致I/O消耗。

PCTUSED低意味著在一個數據塊快空的時候才被放置到空閑列表中,數據塊一次能接受很多的記錄,因此可以減少I/O消耗,提高性能。

(2)PCTFREE的值較大意味著數據塊沒有被利用多少就從空閑列表中斷開連接,不利于數據塊的充分使用。

PCTFREE過小的結果是,在更新時可能會出現數據記錄遷移(Migration)的情況。

(注:數據記錄遷移(Migration)是指記錄在是UPDATE操作擴展了一個列后,

PCTFREE參數所指定的空間不夠擴展,從而記錄被ORACLE強制遷移到新的數據塊,發生這種情況將較嚴重的影響ORACLE的性能,出現更新緩慢)。

PCTFREE的使用

在Oracle中表的每一行數據由唯一的ROWID標記;而Oracle支持的數據類型中有一些長度是可變的,如VARCHAR,當對這些數據進行UPDATE時,

如果塊中的可用空間不能容納UPDATE后的數據行時,Oracle將會把此行移到其它數據塊,同時保留此數據行的 ROWID不變,

并在原有塊中建一指針指向行遷移后的位置。

在這種情況下讀取一行數據將需要訪問2個數據塊,從而導致性能下降。PCTFREE保留的空間 就是為確保更改后的數據行可以仍存放于原有數據塊中,

避免行遷移的情況發生。

PCTUSED的使用

當塊的使用的空間下降到PCTUSED后,此塊被重新放回空閑鏈表(Freelist) 中,作為后續Insert的候選塊。同樣,

設置PCTUSED需要視數據行的特性和Insert、Update、Delete的模式而定,但必須遵守的原 則是:db_block_size * (100 - PCTFREE - PCTUSED)必須比行的長度大。

對于數據行長度變化較大的情況,應使用最大行長度來計算PCTUSED,并且應使用較低的PCTUSED值。

因為在執行Insert時,如果數據塊的可用空間不能裝下一行數據,當塊的使用的空間是在PCTUSED之上,Oracle將把此塊從Freelist中移走;

當塊的使用的空間是在PCTUSED之下,Oracle將會擴展段空間。因此,PCTUSED如果設得過高,將導致段的不斷擴展。 當數據行長度不大時,

使用缺省的PCTUSED(40)是比較合適的;對于行長度較大的情況,最長的行有可能會占用半個以上的塊空間,此時可設置 PCTUSED為10。

較小的PCTUSED僅在表中的數據以隨機方式被刪除,而且仍有一些行長時間保留在塊中時,才會造成空間使用上的問題,

因為這些塊 可能需要較長的時間才能或永遠不能重新被用于存放新數據。在這種應用中,如果空間利用率一直處于較低水平,

則需對PCTUSED進行分析和調整。

4.? ? ? ???建議:

由此,在建表時,如果PCTFREE設置不足時可能產生行遷移;而另一方面如果PCTFREE設置過高,將會造成空間浪費。

因此正確設置PCTFREE需要對表中數據的使用進行分析。對于數據長度不會變化或極少更新的情況,可以采用較小的PCTFREE;

對于其它大多數情況應采用稍大的 PCTFREE(PCTFREE的缺省值是10,如果不好估計需預留的空間,可以使用15-25的范圍),

不要為節約塊中的空間而使用較小的 PCTFREE值。

總結

以上是生活随笔為你收集整理的Oracle PCTfree assm,Oracle 段空间管理方式与PCTFREE和PCTUSED的概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。