ORACLE session中SPID、PID、SID的區別

bitifi發表於2015-10-09

session中SPID、PID、SID的區別

SPID一一system process id,
表示該server process在OS層面的Porcess ID ,即作業系統程式ID

PID一一Oracle process id 
可以理解為Oracle自己用的,Oracle程式ID

SID一一SESSION標識,常用於連線其它列

 

我們一般都用 V$process.spid 或 V$session.sid + V$session.serial# 來kill session

 

v$process檢視: 
        v$process檢視包含當前系統oracle執行的所有程式資訊。常被用於將oracle或服務程式的作業系統程式ID與資料庫session之間建立聯絡。 
常用列: 
        ADDR:程式物件地址 
        PID:oracle程式ID 
        SPID:作業系統程式ID 
        V$PROCESS中的連線列 
        Column View Joined Column(s) 
        ADDR V$SESSION PADDR 

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語句的詳細 
資訊. 

v$sqltext檢視 
        v$sqltext檢視包括Shared pool中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; 
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等

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1813554/,如需轉載,請註明出處,否則將追究法律責任。

相關文章