Вернуться

Листинг 1. Процедура query_sqlarea используется для мониторинга предложений.


create or replace procedure query_sqlarea
(in_access_level number default 1000,
 in_order_by  number default 1)
is
cursor cur_statements is 
    select parsing_user_id,executions,
        sorts,command_type,disk_reads,sql_text,
        round(disk_reads/executions) ratio
    from sys.v_$sqlarea
    where disk_reads > in_access_level
  and executions   > 0
   order by decode(in_order_by,1,disk_reads/executions,2,
            parsing_user_id,3,executions,4,sorts,5,command_ 
           type,6,sql_text,7,disk_reads) desc;
nvl_title varchar2(100) := 'Query_sqlarea-as of '||
   to_char(sysdate,'mm/dd/yy hh24:mi:ss')||
   ' SQL Area Cached Statements w/ Block Reads > '||
   to_char(in_access_level);
begin
/***********************************************************
Отображение  sql-предложений, которые создают проблемы производительности
Разработано на фирме  TUSC
Предупреждение: ни TUSC, ни автор не гарантируют, что этот исходный код
свободен от неточностей. При обнаружении каких-либо ошибок, просьба сообщить
в TUSC  по телефону   630-960-2909.
***********************************************************/
htp.htmlOpen;
htp.headOpen;
htp.title(nvl_title); 
htp.headClose;
htp.bodyOpen;
htp.header(1,nvl_title);
htp.hr;
htp.formOpen('query_sqlarea');
htp.print('Min Block Reads: '||htf.formText('in_access_level'
     ,10,10,to_char(in_access_level)));
htp.formHidden('in_order_by',to_char(in_order_by));
htp.formSubmit(NULL,'Set Access Level');
htp.formClose;
htp.hr;
htp.tableOpen('BORDER=1');
htp.tableRowOpen;
htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='
    ||to_char(in_access_level)||'&'||'in_order_by=2','Id'));
htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to
   _char(in_access_level)||'&'||'in_order_by=3','Executions'));
htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to       
   _char(in_access_level)||'&'||'in_order_by=4','Sorts'));
htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to
   _char(in_access_level)||'&'||'in_order_by=5','Cmd Type'));
htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to
   _char(in_access_level)||'&'||'in_order_by=7','Block Reads'));
htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to
   _char(in_access_level)||'&'||'in_order_by=1','Block Reads/Executions'));
htp.tableHeader('Statement');
htp.tableRowClose;
for rec_statements in cur_statements loop
   htp.tableRowOpen;
   htp.tableData(rec_statements.parsing_user_id);
   htp.tableData(rec_statements.executions);
   htp.tableData(rec_statements.sorts);
   htp.tableData(rec_statements.command_type);
   htp.tableData(rec_statements.disk_reads);
   htp.tableData(rec_statements.ratio);
   htp.tableData(rec_statements.sql_text);
   htp.tableRowClose;
end loop;
htp.tableClose;
htp.bodyClose;
htp.htmlClose;
end;
/



Вернуться