|
在RDBMS/admin/awrsqrpt.sql中,这个脚本可以方便地取出某个sql在某两个快照间隔内,它总的消耗的cpu时间,执行次数,逻辑读,物理读,sql的执行计划以及sql的full sql text等,不过偶不太喜欢这个脚本。。。
因为awrsqrpt.sql太麻烦啦,有些交互的地方需要用户自己输入,还不如偶自己实现的get_by_hash.sh用起来简单顺手。。。 $more get_by_hash.sh #!/bin/ksh $ORACLE_HOME/bin/sqlplus -s /nolog<<EOF connect / as sysdba; set lines 121 set pages 999 col sql_text format a80 select sql_text from v$sqltext_with_newlines where hash_value=$1 order by piece; set heading off select '--------------------------------------------------------------------------------' from dual union all select '| Operation | PHV/Object Name | Rows | Bytes| Cost |' as "Optimizer Plan:" from dual union all select '--------------------------------------------------------------------------------' from dual union all select * from (select rpad('|'||substr(lpad(' ',1*(depth-1))||operation|| decode(options, null,'',' '||options), 1, 32), 33, ' ')||'|'|| rpad(decode(id, 0, '----- '||to_char(hash_value)||' -----' , substr(decode(substr(object_name, 1, 7), 'SYS_LE_', null, object_name) ||' ',1, 20)), 21, ' ')||'|'|| lpad(decode(cardinality,null,' ', decode(sign(cardinality-1000), -1, cardinality||' ', decode(sign(cardinality-1000000), -1, trunc(cardinality/1000)||'K', decode(sign(cardinality-1000000000), -1, trunc(cardinality/1000000)||'M', trunc(cardinality/1000000000)||'G')))), 7, ' ') || '|' || lpad(decode(bytes,null,' ', decode(sign(bytes-1024), -1, bytes||' ', decode(sign(bytes-1048576), -1, trunc(bytes/1024)||'K', decode(sign(bytes-1073741824), -1, trunc(bytes/1048576)||'M', trunc(bytes/1073741824)||'G')))), 6, ' ') || '|' || lpad(decode(cost,null,' ', decode(sign(cost-10000000), -1, cost||' ', decode(sign(cost-1000000000), -1, trunc(cost/1000000)||'M', trunc(cost/1000000000)||'G'))), 8, ' ') || '|' as "Explain plan" from v$sql_plan where hash_value = $1) union all select '--------------------------------------------------------------------------------' from dual; exit EOF
|