Oracle常用腳本(不斷更新中)

--根據process id查詢當前session正在執行的SQL語句,process id爲通過top或者ps查詢得到,此語句將操作系統與數據庫關聯

SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN (SELECT DECODE (sql_hash_value,0,prev_hash_value,sql_hash_value),DECODE (sql_hash_value,0,prev_sql_addr, sql_address) FROM v$session b WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid')) ORDER BY piece ASC;

--根據session id查詢當前session正在執行的SQL語句

SELECT sql_text FROM v$sqltext a WHERE a.hash_value = (SELECT sql_hash_value FROM v$session b WHERE b.SID = '&sid') ORDER BY piece ASC;

--根據輸入的參數名查詢當前的參數設置及參數描述,包含隱藏參數

SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describe FROM SYS.x$ksppi x, SYS.x$ksppcv y WHERE x.inst_id = USERENV ('Instance') AND y.inst_id = USERENV ('Instance') AND x.indx = y.indx AND x.ksppinm LIKE '%&par%';

--查詢workarea(optimal onepass multipass)optimal儘量大,multipass儘量小

select name,value,100*(value/decode ((select sum(value) from v$sysstat where name like 'workarea executions%'),0,null,(select sum(value) from v$sysstat where name like 'workarea executions%'))) pct from v$sysstat where name like 'workarea executions%';

--查詢熱點buffer來自哪些對象

SELECT e.owner, e.segment_name, e.segment_type FROM dba_extents e, (SELECT * FROM (SELECT addr, ts#, file#, dbarfil, dbablk, tch FROM x$bh ORDER BY tch DESC) WHERE ROWNUM < 11) b WHERE e.relative_fno = b.dbarfil AND e.block_id <= b.dbablk AND e.block_id + e.blocks > b.dbablk;

--查詢造成熱點buffer的SQL語句

SELECT /*+ rule */ hash_value,sql_text FROM v$sqltext  WHERE (hash_value, address) IN (SELECT a.hash_value, a.address FROM v$sqltext a, (SELECT DISTINCT a.owner, a.segment_name, a.segment_type FROM dba_extents a, (SELECT dbarfil, dbablk FROM (SELECT dbarfil, dbablk FROM x$bh ORDER BY tch DESC) WHERE ROWNUM < 11) b WHERE a.relative_fno = b.dbarfil AND a.block_id <= b.dbablk AND a.block_id + a.blocks > b.dbablk) b WHERE a.sql_text LIKE '%' || b.segment_name || '%' AND b.segment_type = 'TABLE') ORDER BY hash_value, address, piece;

--查詢sql語句使用TEMP表空間的情況
SELECT a.username, a.sid, a.serial#, a.osuser, b.tablespace, b.blocks, c.sql_text FROM v$session a, v$tempseg_usage b, v$sqlarea c WHERE a.saddr = b.session_addr AND c.address= a.sql_address
AND c.hash_value = a.sql_hash_value ORDER BY b.tablespace, b.blocks;

--查詢所有用戶下的被監控的索引情況

select u.name owner,io.name index_name,t.name table_name,decode(bitand(i.flags,65536),0,'NO','YES') monitoring,decode(bitand(ou.flags,1),0,'NO','YES') used,ou.start_monitoring start_monitoring,ou.end_monitoring end_monitoring from sys.user$ u,sys.obj$ io,sys.obj$ t,sys.ind$ i,sys.object_usage ou where i.obj#=ou.obj# and io.obj#=ou.obj# and t.obj#=i.bo# and u.user#=io.owner#;

--查詢當時buffer cache中所有段的block數目

COLUMN OBJECT_NAME FORMAT A40
COLUMN NUMBER_OF_BLOCKS FORMAT 999,999,999,999
SELECT o.OBJECT_NAME, COUNT(*) NUMBER_OF_BLOCKS FROM DBA_OBJECTS o, V$BH bh WHERE o.DATA_OBJECT_ID = bh.OBJD AND o.OWNER != 'SYS' GROUP BY o.OBJECT_NAME ORDER BY COUNT(*);

--find the percentage of times work areas were executed in optimal, one-pass, or multi-pass mode since start-up.This query only considers work areas of a certain size, with an optimal memory requirement of at least 64 KB.

SELECT optimal_count, round(optimal_count*100/total, 2) optimal_perc, onepass_count,round(onepass_count*100/total, 2) onepass_perc,multipass_count, round(multipass_count*100/total, 2) multipass_perc FROM (SELECT decode(sum(total_executions), 0, 1, sum(total_executions)) total,sum(OPTIMAL_EXECUTIONS) optimal_count,sum(ONEPASS_EXECUTIONS) onepass_count,sum(MULTIPASSES_EXECUTIONS) multipass_count FROM v$sql_workarea_histogram WHERE low_optimal_size > 64*1024);

--查詢緩衝區對象第一列爲buffer pool,第二列爲object,第三列爲block number,第四列爲visit number

Select decode(pd.bp_id,1,'KEEP',2,'RECYCLE',3,'DEFAULT',4,'2K SUBCACHE',
5,'4K SUBCACHE',6,'8K SUBCACHE',7,'16K SUBCACHE',8,'32K SUBCACHE',
'UNKNOWN') subcache,bh.object_name,bh.blocks ,bh.tch
from x$kcbwds ds,
x$kcbwbpd pd, (select /*+ use_hash(x) */ set_ds,o.name object_name, SUM(x.tch) tch,
count(*) BLOCKS
from obj$ o, x$bh x where o.dataobj# = x.obj
and x.state !=0 and o.owner# !=0
group by set_ds,o.name) bh where ds.set_id >= pd.bp_lo_sid
and ds.set_id <= pd.bp_hi_sid and pd.bp_size != 0 and ds.addr=bh.set_ds;

--通過address及hash value查詢語句的執行計劃

SELECT address, hash_value FROM V$SQL WHERE sql_text LIKE '%my_pattern%';

col "O/1/M" format a10

col name format a20

SELECT operation, options, object_name name,trunc(bytes/1024/1024) "input(MB)",trunc(last_memory_used/1024) last_mem,trunc(estimated_optimal_size/1024) optimal_mem, trunc(estimated_onepass_size/1024) onepass_mem, decode(optimal_executions, null, null, optimal_executions||'/'||onepass_executions||'/'||multipasses_executions) "O/1/M" FROM V$SQL_PLAN p, V$SQL_WORKAREA w WHERE p.address=w.address(+) AND p.hash_value=w.hash_value(+) AND p.id=w.operation_id(+) AND p.address='&address' AND p.hash_value=&hash_value;

--查詢索引的選擇性,SELECTIVITY接近1表明選擇性高
select a.owner,a.index_name,index_type,partitioned,b.num_rows,b.distinct_keys,b.num_rows/b.distinct_keys avg_row_per_key,b.distinct_keys/b.num_rows SELECTIVITY,b.last_analyzed,b.stale_stats from dba_indexes a,dba_ind_statistics b where a.owner=b.owner and a.index_name=b.index_name and a.index_name='&name';
--查看列上有沒有直方圖,num_buckets爲1表示沒有
select owner,table_name,column_name,num_distinct,histogram,num_buckets from dba_tab_col_statistics where table_name='&table_name' and column_name='&column_name';

 --根據SID查詢某個特定會話各種數據庫操作消耗時間,機遇DB time

with db_time as (select sid,value from v$sess_time_model where sid=&a and stat_name='DB time') select stm.stat_name as statistic,trunc(stm.value/1000000,3) as seconds,trunc(stm.value/tot.value*100,1) as "%" from v$sess_time_model stm,db_time tot where stm.sid=tot.sid and stm.stat_name<>'DB time' and stm.value>0 order by stm.value desc;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章