您好,登錄后才能下訂單哦!
本篇文章為大家展示了ORACLE sid,pid,spid和v$session中的saddr,paddr和taddr示例分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
概念上:
1.spid (system process id) 是操作系統層面的進程id .
2.pid(process id) 這個是基于oracle的進程id個人理解為就是oracle給自己的進程的一個編號。
3.sid.(這個就是session 的id) 這個個人理解為,就是有人在同oracle連接會話,oracle為其分配的一個編號。長用于連接其他列。
v$session中的saddr,paddr和taddr
saddr(session address):表示當前記錄的內存地址;
paddr(process address):該session對應的進程地址,關聯v$process的addr字段,可以通過這個字段查處當前session對應操作系統的那個進程的id;
taddr(transation address):當前有活動事務的地址,關聯v$transaction表的addr,通過這個字段關聯查出當前session正在使用的回滾段的情況,以及當前事務的大小等信息
說道這還的和幾個動態性能視圖聯系起來。
1.v$process視圖
此視圖包含當前系統中oracle的所有的進程信息,常被用于將oracle或服務進程的操作系統進程ID與數據庫session之間建立聯系。
常用列:
ADDR:進程對象地址
PID:oracle進程ID
SPID:操作系統進程ID
V$PROCESS中的連接列 ADDR 通常與V$SESSION PADDR相連接。
如:select p.addr,P.PID,P.PID, s.paddr from v$process p,v$session s
where P.ADDR=S.PADDR
2.v$session視圖
V$SESSION是基礎信息視圖,用于找尋用戶SID或SADDR。不過,它也有一些列會動態的變化,可用于檢查用戶。
常用列:
SID:SESSION標識,常用于連接其它列。
SERIAL#:如果某個SID又被其它的session使用的話則此數值自增加(當一個SESSION結束,另一個SESSION開始并使用了同一個SID)。
AUDSID:審查session ID唯一性,確認它通常也用于當尋找并行查詢模式
USERNAME:當前session在oracle中的用戶名。
STATUS:這列用來判斷session狀態是:
Achtive:正執行SQL語句(waiting for/using a resource)
Inactive:等待操作(即等待需要執行的SQL語句)
Killed:被標注為刪除
paddr, process addr, 通過這個字段我們可以查看當前進程的相關信息, 系統進程id,操作系統用戶信息等等.
(sql_address,sql_hash_value) (prev_sql_addr,prev_hash_value) 根據這兩組字段, 我們可以查詢到當前session正在執行的sql語句的詳細
3.v$sqltext視圖
此視圖包括共享池(share poll)中sql語句的完整文本,一條sql語句可能被分成多個快被保存。
常用列:
HASH_VALUE:SQL語句的Hash值
ADDRESS:sql語句在SGA中的地址
SQL_TEXT:SQL文本。
PIECE:SQL語句塊的序號
V$SQLTEXT中的連接列
Column View Joined Column(s)
HASH_VALUE, ADDRESS V$SQL, V$SESSION HASH_VALUE, ADDRESS
HASH_VALUE. ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS
按pid查看正在執行的程序:
select sid,program from v$session b where paddr in (select addr from v$process where spid=$pid);
按pid查看正在執行的sql語句
select sql_text from v$sqltext where hash_value in (select sql_hash_value from v$session where
PADDR in (select addr from v"$process where spid=$pid)) order by piece;
4.V$SESSION_WAIT視圖
這是一個尋找性能瓶頸的關鍵視圖。它提供了任何情況下session在數據庫中當前正在等待什么(如果session當前什么也沒在做,則顯示它最后的等待事件)。當系統存在性能問題時,本視圖可以做為一個起點指明探尋問題的方向。
V$SESSION_WAIT中,每一個連接到實例的session都對應一條記錄。
常用列:
SID: session標識
EVENT: session當前等待的事件,或者最后一次等待事件。
WAIT_TIME: session等待事件的時間(單位,百分之一秒)如果本列為0,說明session當前session還未有任何等待。
SEQ#: session等待事件將觸發其值自增長
P1, P2, P3: 等待事件中等待的詳細資料
P1TEXT, P2TEXT, P3TEXT: 解釋說明p1,p2,p3事件
附注:
1.State字段有四種含義:
Waiting:SESSION正等待這個事件。
Waited unknown time:由于設置了timed_statistics值為false,導致不能得到時間信息。表示發生了等待,但時間
很短
Wait short time:表示發生了等待,但由于時間非常短不超過一個時間單位,所以沒有記錄。
Waited knnow time:如果session等待然后得到了所需資源,那么將從waiting進入本狀態。
Wait_time值也有四種含義:
值>0:最后一次等待時間(單位:10ms),當前未在等待狀態。
值=0:session正在等待當前的事件。
值=-1:最后一次等待時間小于1個統計單位,當前未在等待狀態。
值=-2:時間統計狀態未置為可用,當前未在等待狀態。
3.Wait_time和Second_in_wait字段值與state相關:
如果state值為Waiting,那么wait_time值無用。Second_in_wait值是實際的等待時間(單位:秒)。
如果state值為Wait unknow time,那么wait_time值和Second_in_wait值都無用。
如果state值為Wait short time,那么wait_time值和Second_in_wait值都無用。
如果state值為Waiting known time,那么wait_time值就是實際等待時間(單位:秒),Second_in_wait值無用。
V$SESSION_WAIT中的連接列
Column View Joined Colum
SID V$SESSION SID
查看session等待事件:
select sid,event from v$session_wait where event not like ’rdbms%’ and event not like ’SQL*Net message%’;
多數的session都是空閑事件如:SQL*Net message from client, pipe get, PMON timer等
上述內容就是ORACLE sid,pid,spid和v$session中的saddr,paddr和taddr示例分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。