oracle10G新特性之段顧問的應用

antcorps發表於2008-08-24
oracle10G新特性之段顧問的應用[@more@]

在表上進行頻繁的DML操作可能會在表中留下作為片段的空間,oracle可以在表或索引上執行段收縮,收縮段可以使段中的空閒空間可用於表空間中的其他段,從而潛在地改善將來在段上的DML操作。為了確定哪些段將在段收縮中受益,可以呼叫段顧問來執行指定可能容易產生碎片的段上的增長趨勢分析。如幾個月內hr.employees表上的DML操作非常頻繁,這樣可以建立段顧問來監控hr.employees表。步驟為:
以下操作用具有DBA許可權的使用者,如sys將表hr.employees表修改為行移動
alter table hr.employees enable row movement;
建立段顧問分析hr.employees表,可以使用如下匿名的PL/SQL塊
variable task_id number
declare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name :='';
descr :='check HR.EMPLOYEES';
dbms_advisor.create_task ('segment advisor', :task_id,name,descr,null);
dbms_advisor.create_object ('name','TABLE','HR','EMPLOYEES',null,null,obj_id);
dbms_advisor.set_task_parameter(name,'RECOMMEND_ALL','TRUE');
dbms_advisor.execute_task(name);
end;

print task_id 假設task_id為6

執行完後可以透過dba_advisor_findings檢視來檢視段顧問所發現的內容,如:
select owner,task_id,task_name,type,message,more_info from dba_advisor_findings where task_id=6;
可以透過dba_advisor_recommendations檢視檢視提供了推薦的收縮操作以及該收縮操作潛在節省的空間,以位元組為單位,如:
select owner,task_id,task_name,benefit_type from dba_advisor_recommendations where task_id=6;
可以在dba_advisor_actions 檢視中直接找到執行收縮所需要的SQL,如:
select owner,task_id,task_name,command,attr1 from dba_advisor_actions where task_id=6;
對hr.employees表進行收縮
alter table hr.employees shrink space;

收縮操作不需要額外的磁碟空間,並且不會阻止在該操作期間對錶的訪問,除了在該操作在末尾用於釋放未使用空間的非常短的時間外,這段
時間都會維持表上的所有索引。收縮表除了釋放空間外,還可以改善快取的利用率,還改善了完整表掃描的效能。但收縮表將不會在LOB段上
起作用,也不能在包含任何基於函式索引的表上執行收縮操作,因此重新組織表是更適當的方法,即對錶進行重建或其他操作。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20444553/viewspace-1009419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章