奔走青春,让自己无限遐想......'s profile奔走青春的日子PhotosBlogListsMore Tools Help

Blog


    5/21/2009

    runstats脚本

    下面是thoms kyte的runstats脚本,为了便于运行先付权给user

    grant select on sys.v_$timer to user1;

    grant select on v_$mystat to  user1;

    grant select on sys.v_$statname to user1;

    grant select on sys.v_$latch to user1;

    脚本:

     

    create or replace view stats
    as
    select 'STAT..' || a.name name, b.value
    from v$statname a, v$mystat b
    where a.statistic# = b.statistic#
    union all
    select 'LATCH.' || name, gets
    from v$latch;

    create global temporary table run_stats
    ( runid varchar2(15),
    name varchar2(80),
    value int
    )on commit preserve rows;

    create or replace package runstats
    as
    procedure rs_start;
    procedure rs_middle;
    procedure rs_stop( p_difference_threshold in number default 0);
    end;
    /

    create or replace package body runstats
    as
    g_start number;
    g_run1 number;
    g_run2 number;
    procedure rs_start
    is
    begin
    delete from run_stats;
    insert into run_stats
    select 'before', stats.* from stats;
    g_start := dbms_utility.get_time;
    end;
    procedure rs_middle
    is
    begin
    g_run1 := (dbms_utility.get_time-g_start);
    insert into run_stats
    select 'after 1', stats.* from stats;
    g_start := dbms_utility.get_time;
    end;
    procedure rs_stop(p_difference_threshold in number default 0)
    is
    begin
    g_run2 := (dbms_utility.get_time-g_start);
    --add a line here to avoid ora-20000
    dbms_output.enable(480000);
    dbms_output.put_line
    ( 'Run1 ran in ' || g_run1 || ' hsecs' );
    dbms_output.put_line
    ( 'Run2 ran in ' || g_run2 || ' hsecs' );
    dbms_output.put_line
    ( 'run 1 ran in ' || round(g_run1/g_run2*100,2) ||
    '% of the time' );
    dbms_output.put_line( chr(9) );
    insert into run_stats
    select 'after 2', stats.* from stats;
    dbms_output.put_line
    ( rpad( 'Name', 30 ) || lpad( 'Run1', 12 ) ||
    lpad( 'Run2', 12 ) || lpad( 'Diff', 12 ) );
    for x in
    ( select rpad( a.name, 30 ) ||
    to_char( b.value-a.value, '999,999,999' ) ||
    to_char( c.value-b.value, '999,999,999' ) ||
    to_char( ( (c.value-b.value)-(b.value-a.value)), '999,999,999' ) data
    from run_stats a, run_stats b, run_stats c
    where a.name = b.name
    and b.name = c.name
    and a.runid = 'before'
    and b.runid = 'after 1'
    and c.runid = 'after 2'
    -- and (c.value-a.value) > 0
    and abs( (c.value-b.value) - (b.value-a.value) )
    > p_difference_threshold
    order by abs( (c.value-b.value)-(b.value-a.value))
    ) loop
    dbms_output.put_line( x.data );
    end loop;
    dbms_output.put_line( chr(9) );
    dbms_output.put_line
    ( 'Run1 latches total versus runs -- difference and pct' );
    dbms_output.put_line
    ( lpad( 'Run1', 12 ) || lpad( 'Run2', 12 ) ||
    lpad( 'Diff', 12 ) || lpad( 'Pct', 10 ) );
    for x in
    ( select to_char( run1, '999,999,999' ) ||
    to_char( run2, '999,999,999' ) ||
    to_char( diff, '999,999,999' ) ||
    to_char( round( run1/run2*100,2 ), '99,999.99' ) || '%' data
    from ( select sum(b.value-a.value) run1, sum(c.value-b.value) run2,
    sum( (c.value-b.value)-(b.value-a.value)) diff
    from run_stats a, run_stats b, run_stats c
    where a.name = b.name
    and b.name = c.name
    and a.runid = 'before'
    and b.runid = 'after 1'
    and c.runid = 'after 2'
    and a.name like 'LATCH%'
    )
    ) loop
    dbms_output.put_line( x.data );
    end loop;
    end;
    end;
    /

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://henryhyg.spaces.live.com/blog/cns!D46F8AC91E5B6089!290.trak
    Weblogs that reference this entry
    • None