表や索引の断片化解消の見積り方法

ここでは、ORACLEの表や索引の断片化解消の見積り方法について紹介します。

1.表の場合

‘★Owner’と’★TableName’は調査対象を指定してください。

begin
declare
  name varchar2(100);
  descr varchar2(500);
  objid number;
  begin
    name := ‘Test’;
    descr := ‘Segment Advisor Test’;
    
    dbms_advisor.create_task(‘Segment Advisor’,:id,name,descr,NULL);
    
    dbms_output.put_line(‘ID = ‘ || :id || ‘ Name = ‘ || name);
    
    dbms_advisor.create_object(
        task_name => name,
        object_type => ‘TABLE’,
        attr1 => ‘★Owner’,
        attr2 => ‘★TableName’,
        attr3 => NULL,
        attr4 => NULL,
        attr5 => NULL,
        object_id => obj_id);

    dbms_advisor.set_task_parameter(
        task_name => name,
        parameter => ‘RECOMMEND_ALL’,
        value => ‘TRUE’);

    dbms_advisor.set_task_parameter(name,’VERBOSE’,’TRUE’);

    dbms_advisor.execute_task(name);
  end;
end;

2.索引の場合

‘★Owner’と’★IndexName’は調査対象を指定してください。

begin
declare
  name varchar2(100);
  descr varchar2(500);
  objid number;
  begin
    name := ‘Test’;
    descr := ‘Segment Advisor Test’;
    
    dbms_advisor.create_task(‘Segment Advisor’,:id,name,descr,NULL);
    
    dbms_output.put_line(‘ID = ‘ || :id || ‘ Name = ‘ || name);
    
    dbms_advisor.create_object(
        task_name => name,
        object_type => ‘INDEX’,
        attr1 => ‘★Owner’,
        attr2 => ‘★IndexName’,
        attr3 => NULL,
        attr4 => NULL,
        attr5 => NULL,
        object_id => obj_id);

    dbms_advisor.set_task_parameter(
        task_name => name,
        parameter => ‘RECOMMEND_ALL’,
        value => ‘TRUE’);

    dbms_advisor.set_task_parameter(name,’VERBOSE’,’TRUE’);

    dbms_advisor.execute_task(name);
  end;
end;




3.結果の確認

1、もしくは2の実行結果からタスクIDを確認してください。
確認したタスクIDを★に設定して実行してください。

select
  *
from
  dba_advisor_recommendations a
where
  a.TASK_ID = ‘★’
;

↑断片化の効果が10MB以上の場合はこちらで表示されます。

select
  *
from
  DBA_ADVISOR_FINDINGS a
where
  a.TASK_ID =’★’
;

↑断片化の効果が10MB未満の場合はこちらで表示されます。