暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle sta demo

godba 2024-07-19
117
上边蓝字关注我们



  1. sta需要正确的授权,默认使用sys用户也可以

    CONNECT / AS SYSDBA
    GRANT ADVISOR TO SH;
    GRANT SELECT_CATALOG_ROLE TO SH;
    GRANT EXECUTE ON DBMS_SQLTUNE TO SH;
     2.如果要找到历史的topsql,可以使用下面的语句:
      select *
      from (
      select a.snap_id
      ,a.sql_id
      ,decode(sum(a.executions_delta),0,1,sum(a.executions_delta)) execs
      ,sum(a.disk_reads_delta) pios
      ,sum(sum(a.disk_reads_delta)) over (partition by a.snap_id) total_pios
      ,dense_rank () over (partition by a.snap_id order by sum(a.disk_reads_delta) desc) pio_rank
      ,sum(a.buffer_gets_delta) lios
      ,sum(sum(a.buffer_gets_delta)) over (partition by a.snap_id) total_lios
      ,dense_rank () over (partition by a.snap_id order by sum(a.buffer_gets_delta) desc) lio_rank
      ,sum(a.cpu_time_delta) cput
      ,sum(sum(a.cpu_time_delta)) over (partition by a.snap_id) total_cput
      ,dense_rank () over (partition by a.snap_id order by sum(a.cpu_time_delta) desc) cpu_rank
      ,sum(a.elapsed_time_delta) elat
      ,sum(sum(a.elapsed_time_delta)) over (partition by a.snap_id) total_elat
      ,dense_rank () over (partition by a.snap_id order by sum(a.elapsed_time_delta) desc) ela_rank
      from dba_hist_sqlstat a,
      dba_hist_snapshot b
      where a.snap_id=b.snap_id
      and b.begin_interval_time >= trunc(sysdate-5)
      and b.begin_interval_time <= trunc(sysdate)
      group by a.snap_id,a.sql_id)
      where pio_rank <= 5
      or lio_rank <= 5
      or cpu_rank <= 5
      or ela_rank <= 5
      ;
      3.找到需要进行优化分析的sql_id,传给下面的脚本,建立sql tunning task并执行优化分析
      从cursor cache
        DECLARE
        my_task_name VARCHAR2(30);
        sql_id VARCHAR2(30);
        BEGIN
        sql_id := '&sqlid';
        my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => sql_id,
        scope => 'comprehensive',
        time_limit => 12000,
        task_name => 'perf_tuning_' || sql_id,
        description => 'sql performence tunning');
        DBMS_SQLTUNE.EXECUTE_TUNING_TASK('perf_tuning_' || sql_id);
        END;
        /
        如果ash里面已经没有了要优化的sql_id,可以从awr里面找
          select snap_id,count(*) from dba_hist_active_sess_history where sql_id='&sql_id' group by snap_id order by 1;
          选择近期包含该sql_id的snap_id区间
            DECLARE
            my_task_name VARCHAR2(30);
            sql_id VARCHAR2(30);
            BEGIN
            sql_id := '&sqlid';
            my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id => sql_id,
            begin_snap =>&bid,
            end_snap =>&eid,
            scope => 'comprehensive',
            time_limit => 1200,
            task_name => 'perf_tuning_' || sql_id,
            description => 'sql performence tunning');
            DBMS_SQLTUNE.EXECUTE_TUNING_TASK('perf_tuning_' || sql_id);
            END;
            /
            4.优化任务结束后,执行下面的查询,看看有什么优化建议
              set long 999999
              set LONGCHUNKSIZE 999999
              set serveroutput on size 999999
              set linesize 200
              set pagesize 3000
              SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('perf_tuning_&sqlid') FROM DUAL;
              5.确认优化任务结束后,可以删除任务,也可以被保留策略自动清除
                BEGIN
                dbms_sqltune.drop_tuning_task('perf_tuning_&sqlid');
                END;
                /





                文章转载自godba,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论