oracle提供了很多任務具來查詢最低效的sql,但是,本質上就是通過如下sql語句,從相關系統檢視中獲取最低效的sql:
select rownum as rank, a.*
from (select parsing_schema_name run_user, --執行使用者
sql_fulltext, --sql文字,全,帶格式
sql_text, --sql文字前面部分
elapsed_time , --單位是微秒,語句執行完的總時間,包括cpu時間和等待時間
cpu_time , --cpu時間,語句執行的時間
module, --當前執行模組呼叫者名稱
elapsed_time - cpu_time wait_time,
trunc((elapsed_time - cpu_time)*100/elapsed_time,2) "wait_time_per%",--等待時間所佔百分比
executions, --執行次數
elapsed_time/(executions+1) per_time, --每次執行平均時間,
buffer_gets, --
disk_reads, --磁碟讀
hash_value, --sql的hash_value,以備獲取完整sql
user_io_wait_time,
sorts --排序次數
from v$sqlarea t
where elapsed_time > 20000 and parsing_schema_name<>'sys'
order by elapsed_time desc) a
where rownum < 21
order by elapsed_time desc
responsce time = service time + wait time
乙個操作的響應時間 = 必要的服務(計算)時間 + 各種等待時間
而在v$sql中
elapsed_time 代表了執行完畢的時間 , 也就是響應時間,response time,
而cpu_time 代表了執行時消耗的cpu 時間,也就是計算時間,服務時間,service time
所以 elapsed_time = cpu_time + wait_time
有時候可以通過這兩個值的差來衡量這個sql的wait time.
當然,有時候可能關心elapsed_time ,有時候則關心cpu_time ,也有時候關心wait time,取決於實際需求。
這個sql,務必儲存,掌握這些sql,比使圖形化工具,要高效方便的多得多!
select longops.sid,longops.elapsed_seconds,longops.opname,sql.sql_text from v$session_longops longops , v$sql sql where longops.elapsed_seconds>6 and longops.sql_id=sql.sql_id;
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
ORACLE中帶引數 REF游標及動態SQL例項
帶 引數的游標 declare dept code emp.deptno type 宣告列型別變數三個 emp code emp.empno type emp name emp.ename type cursor emp cur deptparam number is select empno,en...
oracle中關於日期的獲取
最近的乙個功能定時任務要求在當天凌晨2點生成前一天的資料。涉及到資料庫時間的操作,特此記錄一下,整理關於日期獲取的筆記如下 獲取當前系統的前一天日期0點到23 59 59的時間 select trunc sysdate 1 trunc sysdate 1 1 1 86400 from dual 獲取...
Mybaits在業務層獲取執行的完整sql
最近老闆提出了乙個需求,那就是把執行的sql語句儲存在操作日誌。所以還是想通過查閱mybatis的原始碼來實現。大功告成,而且把引數都已經賦值進去了。這個只是引數是物件是使用,如果是map string,參照著單獨寫即可。網上關於mybatis的介紹的文章太少,不知道有沒有其他更好的方法,因為英語有...