Oracle 수 동 생 성 단계 제안 (Segment Advisor)

51238 단어 Oacle
묘사 서술
Oacle 10g 부터 Oacle 은 세그먼트 컨 설 턴 트 (Segment Advisor) 를 도입 하여 데이터베이스 에 저장 공간 과 관련 된 건의 가 있 는 지 확인 하고 10gR 2 부터 Oacle 은 스스로 세그먼트 컨 설 턴 트 작업 을 주동 적 으로 스케줄 링 하고 실행 하 며 데이터베이스 에 있 는 세그먼트 를 정기 적 으로 분석 하고 분석 결 과 를 내부 표 에 넣 었 다.그러나 매우 많은 경우 에 DBA 로 서 저 희 는 Oacle 이 자체 적 으로 가지 고 있 는 각종 스케줄 링 작업 (통계 정보 수집, 세그먼트 컨 설 턴 트, SQL 컨 설 턴 트 등) 을 사용 하지 않 고 수공 으로 제어 하여 유사 한 작업 을 수행 합 니 다 (또는 자원 을 절약 하기 위해).그래서 매우 많은 상황 에서 우 리 는 세그먼트 컨 설 턴 트 라 는 매우 실 용적 인 기능 을 사용 하지 못 했다.이 글 은 표 대상 과 표 공간 등급 에서 수 동 집행 세그먼트 컨 설 턴 트 를 통 해 다음 생 에 제안 하 는 방법 이다.
역할
  • SQL 문 구 를 최적화 할 때 표 안의 조각 공간 을 회수 해 야 하 는 지 더욱 정확하게 판단 할 수 있 습 니 다.만약 에 세그먼트 컨 설 턴 트 의 건 의 를 실행 하지 않 는 다 고 가정 하면 우 리 는 create table as select 를 통 해 일시 표 방식 으로 표 공간 회수 가 필요 한 지, 그리고 공간의 회수 율 등 정 보 를 정확하게 알 아야 한다.
  • SQL 문 구 를 최적화 할 때 표 안의 줄 링크 를 재 구축 하거나 move 표 로 제거 해 야 하 는 지 정확하게 판단 할 수 있 습 니 다.이 건의 가 없다 고 가정 하면 우 리 는 또 얼마나 많은 일 을 해 야 할 지 생각해 볼 수 있다.
  • 일상적인 주동 적 인 유지 보 수 를 할 때 우리 가 표 안의 파편 이 비교적 많 고 링크 가 심각 한 표 대상 목록 을 자발적으로 발견 하 는 데 도움 을 주 고 비슷 한 문제 가 발생 하지 않도록 미리 처리 하 는 데 도움 이 된다.

  • 3. 세그먼트 컨 설 턴 트 의 분석 결과 유형
  • 공간 을 회수 하기 위 한 세그먼트 수축 작업 에 적합 한 세그먼트
  • 대량의 링크 를 가 진 세그먼트
  • OLTP 압축 에서 이득 을 볼 수 있 는 구간
  • 4. 수 동 수행 단계 고문 절차
  • 세그먼트 컨 설 턴 트 퀘 스 트 만 들 기
  • 이 작업 에 대상 을 할당 합 니 다 (표 대상 또는 표 공간 등급 으로 실행 할 것 을 지정 하고 같은 시간 에 username 과 표 이름 또는 표 공간 이름 을 제정 합 니 다)
  • 작업 매개 변수 설정 (실행 단계 컨 설 턴 트 가 실 행 될 때의 일부 매개 변수, 예 를 들 어 실행 시간 제한 매개 변수, 생산 과 공간 관련 건의 / 모든 유형의 대상 생 성 건의)
  • 이 퀘 스 트 실행
  • 5. 수 동 실행 단계 컨 설 턴 트 의 코드
    declare
      my_task_id  number;
      obj_id  number;
      my_task_name varchar2( 100);
      my_task_desc varchar2( 500);
    begin
      my_task_name : = 'advisor_test tab Advice';   - - , ,
      my_task_desc : = 'Manual Segment Advisor Run'; - - , ,
    - - - - -step  1
       / *    * /
      dbms_advisor.create_task(
      advisor_name  = >  'Segment Advisor',   - - Segment Advisor
      task_id  = > my_task_id,
      task_name  = > my_task_name,
      task_desc  = >my_task_desc);
    - - - - -step  2
       / *    * /
      dbms_advisor.create_object(
      task_name = >my_task_name,
      object_type = > 'TABLE',        - -'TABLE''TABLESPACE'
      attr1 = > 'DBMON',              - - - , username,
      attr2  = >  'ADVISOR_TEST',     - - - , , null
      attr3  = >  NULL,
      attr4 = > null,
      attr5 = > null,
      object_id = >obj_id);
    - - - - -step  3
    / *    * /
      dbms_advisor.set_task_parameter(
      task_name  = > my_task_name,
    / *  "ecommend_all" , TRUEFALSE   * /
    / *  "time_limit", ,   * /
       parameter = > 'recommend_all',   - - -
       value = > 'TRUE');
    - - - - -step  4
    / *    * /
      dbms_advisor.execute_task(my_task_name);
    end;
    /

    ( 1)
    select 
       / *  "|chr(13)||chr(10)" windows , linux , "chr(10)"   * /
      'Task name     :'||f.task_name||chr( 13)||chr( 10)||  
      'Segment name  :'||o.attr2    ||chr( 13)||chr( 10)||
      'Sement type   :'||o. type     ||chr( 13)||chr( 10)||
      'partition name:'||o.attr3    ||chr( 13)||chr( 10)||
      'Message       :'||f.message  ||chr( 13)||chr( 10)||
      'More info     :'||f.more_info TASK_ADVICE
      from dba_advisor_findings f,dba_advisor_objects o
    where o.task_id =f.task_id
       and o.object_id =f.object_id
       and f.task_name  =  'advisor_test tab Advice'
    order  by f.task_name;
    ( 2
    TABLE(dbms_space.asa_recommendations(all_runs = > 'TRUE',show_manual = > 'TRUE',show_findings = > 'FALSE')) ;
    truefalse
    truefalse
    truefalse
    : (1

    1( )
    SQL >  create  table advisor_test  as  select  *  from dba_objects;
    Table created
    SQL >  insert  into advisor_test  select  *  from advisor_test;
    72525  rows inserted
    SQL >  /
    145050  rows inserted
    SQL >  /
    290100  rows inserted
    SQL >  commit;
    Commit complete
    SQL >  delete advisor_test  where rownum < 100000;
    99999  rows deleted
    SQL >  /
    99999  rows deleted
    SQL >  commit;
    Commit complete

    declare
      my_task_id  number;
      obj_id  number;
      my_task_name varchar2( 100);
      my_task_desc varchar2( 500);
    begin
      my_task_name : = 'advisor_test tab Advice';
      my_task_desc : = 'Manual Segment Advisor Run';
    - - - - -step  1
      dbms_advisor.create_task(
      advisor_name  = >  'Segment Advisor',
      task_id  = > my_task_id,
      task_name  = > my_task_name,
      task_desc  = >my_task_desc);
    - - - - -step  2
      dbms_advisor.create_object(
      task_name = >my_task_name,
      object_type = > 'TABLE',
      attr1 = > 'DBMON',
      attr2  = >  'ADVISOR_TEST',
      attr3  = >  NULL,
      attr4 = > null,
      attr5 = > null,
      object_id = >obj_id);
    - - - - -step  3
      dbms_advisor.set_task_parameter(
      task_name  = > my_task_name,
       parameter = > 'recommend_all',
       value = > 'TRUE');
    - - - - -step  4
      dbms_advisor.execute_task(my_task_name);
    end;
    /




    SQL >  select
       2     / *  "|chr(13)||chr(10)" windows , linux , "chr(10)"   * /
       3    'Task name     :'||f.task_name||chr( 13)||chr( 10)||
       4    'Segment name  :'||o.attr2    ||chr( 13)||chr( 10)||
       5    'Sement type   :'||o. type     ||chr( 13)||chr( 10)||
       6    'partition name:'||o.attr3    ||chr( 13)||chr( 10)||
       7    'Message       :'||f.message  ||chr( 13)||chr( 10)||
       8    'More info     :'||f.more_info TASK_ADVICE
       9    from dba_advisor_findings f,dba_advisor_objects o
      10   where o.task_id =f.task_id
      11     and o.object_id =f.object_id
      12     and f.task_name  =  'advisor_test tab Advice'
      13   order  by f.task_name;

    TASK_ADVICE
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Task  name     :advisor_test tab Advice
    Segment  name  :ADVISOR_TEST
    Sement  type   : TABLE
    partition  name:
    Message       : DBMON.ADVISOR_TEST ,   285435
    31  。
    More info     : : 75497472: : 46953941: : 28543531:

    、 2( )
    declare
      my_task_id  number;
      obj_id  number;
      my_task_name varchar2( 100);
      my_task_desc varchar2( 500);
    begin
      my_task_name : = 'Tablespace Advice';
      my_task_desc : = 'Manual Segment Advisor Run';
    - - - - -step  1
      dbms_advisor.create_task(
      advisor_name  = >  'Segment Advisor',
      task_id  = > my_task_id,
      task_name  = > my_task_name,
      task_desc  = >my_task_desc);
    - - - - -step  2
      dbms_advisor.create_object(
      task_name = >my_task_name,
      object_type = > 'TABLESPACE',
      attr1 = > 'USERS',
      attr2  = >  null,
      attr3  = >  NULL,
      attr4 = > null,
      attr5 = > null,
      object_id = >obj_id);
    - - - - -step  3
      dbms_advisor.set_task_parameter(
      task_name  = > my_task_name,
       parameter = > 'recommend_all',
       value = > 'TRUE');
    - - - - -step  4
      dbms_advisor.execute_task(my_task_name);
    end;
    /



    SQL >  select
       2     / *  "|chr(13)||chr(10)" windows , linux , "chr(10)"   * /
       3    'Task name     :'||f.task_name||chr( 13)||chr( 10)||
       4    'Segment name  :'||o.attr2    ||chr( 13)||chr( 10)||
       5    'Sement type   :'||o. type     ||chr( 13)||chr( 10)||
       6    'partition name:'||o.attr3    ||chr( 13)||chr( 10)||
       7    'Message       :'||f.message  ||chr( 13)||chr( 10)||
       8    'More info     :'||f.more_info TASK_ADVICE
       9    from dba_advisor_findings f,dba_advisor_objects o
      10   where o.task_id =f.task_id
      11     and o.object_id =f.object_id
      12     and f.task_name  =  'Tablespace Advice'
      13   order  by f.task_name;

    TASK_ADVICE
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Task  name     :Tablespace Advice
    Segment  name  :T_SCEGAOKAOQUERY_GZ
    Sement  type   : TABLE
    partition  name:
    Message       :   10MB
    More info     : : 65536: : 8192: : 57344:

    Task  name     :Tablespace Advice
    Segment  name  :T_SCEGAOKAOQUERY_GZ
    Sement  type   : TABLE
    partition  name:

    TASK_ADVICE
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Message       :   10MB
    More info     : : 3145728: : 2871921: : 273807:

    Task  name     :Tablespace Advice
    Segment  name  :T_SCEGAOKAOQUERY
    Sement  type   : TABLE
    partition  name:
    Message       :   10MB
    More info     : : 46137344: : 44837534: : 1299810:
    - - - - - - - - , - - - - - - - - - - - - - -

    : delete_task , exec dbms_advisor.delete_task(task_name => 'Tablespace Advice');

    좋은 웹페이지 즐겨찾기