以u(píng)nix下的oracle為例。
1、察看session當(dāng)前執(zhí)行的SQL語(yǔ)句
使用top命令查看oracle服務(wù)進(jìn)程的cpu占用情況,通常情況下單個(gè)進(jìn)程占用cpu不應(yīng)超過(guò)5%,如果超過(guò)10%,則可認(rèn)為數(shù)據(jù)庫(kù)的檢索策略有問(wèn)題。如果發(fā)生了這種情況,可能是該oracle服務(wù)進(jìn)程代表的session當(dāng)前執(zhí)行的SQL語(yǔ)句耗費(fèi)了大量的時(shí)間。記下該oracle服務(wù)進(jìn)程的進(jìn)程號(hào)PID,如“340356”,在sqlplus中使用如下的語(yǔ)句獲得oracle服務(wù)進(jìn)程的session id及對(duì)應(yīng)的應(yīng)用進(jìn)程信息,如進(jìn)程號(hào)、主機(jī)名、程序名、正執(zhí)行的SQL語(yǔ)句在緩沖池中的編號(hào)等:
SQL>select s.sid,s.serial#,s.process,s.machine,s.program,s.sql_hash_value from v$session s, v$process p where p.spid='340356' and s.paddr=p.addr;
獲得該oracle服務(wù)進(jìn)程會(huì)話當(dāng)前使用的SQL語(yǔ)句:
SQL>select q.sql_text from v$session s, v$process p,v$sqlarea q where p.spid='340356' and s.paddr=p.addr and s.sql_hash_value=q.hash_value;
用這個(gè)方法得到的結(jié)果并不一定準(zhǔn)確,但效率低下的SQL往往會(huì)在會(huì)話中停留較長(zhǎng)的時(shí)間,所以在大部分的情況下,這個(gè)方法可以對(duì)我們定位SQL語(yǔ)句執(zhí)行效率的性能問(wèn)題有所幫助。
呵呵,你太客氣了!
我從你的文章里知道你現(xiàn)在正在oracle任職吧?這些東西你應(yīng)該比我清楚才對(duì)啊,以后多指教!