我的會話(session)在做什麼? (轉)
原文作者:John Weeg
當一個坐在的終端前的提交了一個查詢卻等不出結果,這很是讓人恢心的。他們很希望語句執行正常,但他們卻不知道實際上是怎麼樣的。因些讓我們找出一個辦法來消除他們的擔心。
你是誰?
第一個問題當然指的是我們正在提及的是哪個會話?使用者可以在做其它事情前用如下的語句得它:
sid from v$mystat where rownum=1;
實際上,直到你提交的語句執行很正常時這個問題才不會被提出,如果使用者有一個唯一的使用者名稱,那麼你可以用如下語句得到那個SID,比如查使用者JOHN的SID.
select sid,machine,osuser,module from v$session where username='JOHN';
SID MACHINE OSUSER MODULE
----- -------------------- ------------------------------ ----------
150 MSHOMEJOHN-LAPTOP John?Weeg *Plus
我用其它的一些資訊校驗這恰恰是我的會話
糟糕一點的是共享使用者名稱被使用的狀況,因些我們將需要看一下哪些會話正在執行:
break on sid sk1
column sid format 99999
column sql_text foa64
select a.sid, a.last_call_et ,b.sql_text
from v$session a
,v$sqltext b
where a.username is not null
and a.status = 'ACTIVE'
and a.sql_address = b.address
order by a.last_call_et,a.sid,b.piece;
這給出了我們正在目前正在執行的語句和多長時間,你應該就能能夠看出哪一個會話你需要檢查一下。
因些,接著應做什麼?
我們知道通常在語句這段時間伴隨著等待,正在執行操作,或正在執行IO操作。透過v$sessstat,v$sessio,v$session_wait這三張表我們可以得到我們想知道的一些資訊,可以透過SID去單查我們觀注的一個表,但我發現很被容易把這些資訊結合在一起。
Column event format a30
Column sid format 9999
Column session_cpu heading "CPU|used"
Column physical_reads heading "physical|reads"
Column consistent_gets heading "logical|reads"
Column seconds_in_wait heading "seconds|waiting"
select a.sid, a.value session_cpu, c.physical_reads,
c.consistent_gets,d.event,d.seconds_in_wait
from v$sesstat a,v$statname b, v$sess_io c, v$session_wait d
where a.sid=150
and b.name = 'CPU used by this session'
and a.statisti = b.statistic#
and a.sid=c.sid
and a.sid=d.sid;
我執行這個語句幾次,因為我們需要找出哪些項在變化。
CPU physical logical seconds
SID used reads reads EVENT waiting
--- ----- --------- -------- ------------------------------ ----------
150 1159 0 117476 SQL message from client 5
/
CPU physical logical seconds
SID used reads reads EVENT waiting
--- ----- --------- -------- ------------------------------ ----------
150 1970 0 204484 SQL*Net message from client 4
因些我們可以看到這個會話在我們檢查時正在等待客戶端的資訊。在我們兩次檢查的期間它執行了邏輯讀的操作並消耗了CPU資源,這說明會話執行是正常的。
什麼情況下我們需要進一步檢查?
通常有這麼幾個事件(event)標識潛在存在問題:'buffer busy waits',' file sequential read','db file scattered read','free buffer waits','latch free',對於前4上事件,我們可以找出相關的是哪個,如下語句:
select owner,segment_name,segment_type
from (select p1 file#, p2 block# from v$session_wait
where sid = 150
and event in ('buffer busy waits'
,'db file sequential read'
,'db file scattered read'
,'free buffer waits')) b
,_extents a
where a.file_id = b.file#
and b.block# between a.block_id and (a.block_id+blocks-1);
這裡我們能夠發現IO等待是由於大量的資料訪問引起的,還是由有些東西不對比如丟失引起的,我們也可以去掉SID子句那行找出那些正在經歷等待的物件。
對於最後一個潛在的問題我們可以查正在等待什麼栓(latch):
select name
from (select p2 latch# from v$session_wait
where sid = 150
and event in ('latch free')) b
,v$latchname a
where a.latch# = b.latch#;
我們可以看到是不是會話經歷栓的衝突,這個衝突是不是經常發生的
使你的使用者輕鬆下來
因此,你現在要可以告訴那些不安的使用者他們執行的語句在等待一些其它的資源。我最終的做法是幫助他們那些語句,以使語句不至於執行得太慢使使用者不安。
(全文完)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981959/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Cassandra的Session會話Session會話
- 會話技術之 Session會話Session
- 會話層技術-session會話Session
- 10、flask-會話-sessionFlask會話Session
- 為什麼sleeping的會話會造成阻塞會話
- 用大白話告訴你 :Java 後端到底是在做什麼?Java後端
- 為什麼sleeping的會話會造成阻塞(2)會話
- 次世代的會話管理專案 Spring Session會話SpringSession
- ZooKeeper如何模擬會話失效(Session Expired)會話Session
- 令牌Token和會話Session原理與攻略會話Session
- MQTT 持久會話與 Clean Session 詳解MQQT會話Session
- App啟動之Dyld在做什麼APP
- 什麼是cookie,什麼是sessionCookieSession
- ssl會話建立的過程(原理)是什麼?會話
- 《我的朋友佩德羅》:是什麼催生出了那根會說話的香蕉?
- 藏在煤箱中的文明:一個會說話的箱子能告訴我們什麼?
- nodejs學習08——會話控制 session cookie tokenNodeJS會話SessionCookie
- oracle 會話(session)被鎖瞭解決方法Oracle會話Session
- 當我談自律的時候,我會談什麼(一)
- 我為什麼從php轉go?PHPGo
- session是什麼時候建立的Session
- Java 程式設計師每天都在做什麼?Java程式設計師
- 《後來的我們》,為什麼我們會錯過彼此?
- Redis分散式Session和普通的cookie session有什麼區別?Redis分散式SessionCookie
- 為什麼我會重回到Windows的懷抱?Windows
- 因果迷境:為什麼我們會問“為什麼”?
- 巨杉核心筆記(一)| SequoiaDB 會話(session)簡介筆記會話Session
- python+pytest介面自動化(10)-session會話保持PythonSession會話
- SAP:什麼熱 什麼不熱 為什麼你會關心?(轉)
- cookie是什麼?和session有什麼區別?CookieSession
- 玩家會在什麼情景下玩我的遊戲?遊戲
- 使用dbms_monitor.session_trace_enable跟蹤一個會話Session會話
- PHP 會話(Session)如何實現使用者登陸功能PHP會話Session
- Session是什麼?它與Cookie有什麼區別?SessionCookie
- GitHub:我們為什麼會棄用jQuery?GithubjQuery
- 為什麼《GRIS》會差點勸退我?
- CTO(技術總監)平時都在做些什麼?
- 我們為什麼會刪除不了叢集的 Namespace?namespace
- session 和 cookie 有什麼區別?SessionCookie