使用者/伺服器程式概念及v$session/V$PROCESS檢視簡介

還不算暈發表於2013-11-24

伺服器程式概念:

Oracle的伺服器程式有Oracle例項自動建立,用來處理連線到例項的客戶端程式發出的請求,使用者必須通過連線到Oracle的伺服器程式來獲取資料庫中的資訊。
對於專用伺服器模式(建庫時預設),客戶端程式和Oracle伺服器程式是一一對應的,新增一個伺服器程式,大約需要的記憶體是: AIX 5-10M  ;LINUX 3-5M記憶體--實測是1M多。
而在共享伺服器模式下,一個Oracle伺服器程式可能同時服務多個客戶端程式。                 
伺服器程式主要用來執行下列的任務:
 解析、執行客戶端提交的SQL語句。
從磁碟資料檔案中讀取必須的資料塊到SGA得資料快取區。
以適當形式返回SQL語句執行結果。

user process使用者程式概念

客戶機使用SQLPLUS/PLSQL等工具通過tnsnames.ora中的服務名,連線到資料庫伺服器的伺服器程式。要經過監聽--伺服器程式--PGA。
PROCESSES與SESSIONS數之間關係:   --
11g 官方預設值:sessions=1.5*processes + 22     文件:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams234.htm#sthref696
10g 官方預設值sessions=1.1*processes + 5       文件:http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams191.htm#REFRN10197

連線和會話的關係:

連線:
使用者程式和 Oracle 例項間的通訊通道communication pathway。
這個通訊通道是通過程式間的通訊機制interprocess communication mechanisms(在同一個計算機上執行使用者程式和 Oracle 程式)或網路軟體network software(當資料庫應用程式與 Oracle 伺服器執行在不同的計算機上時,就需要通過網路來通訊)建立的。
會話 :  --在專有伺服器模式下,一個連線對應一個會話。
主要指使用者和資料庫間的聯絡。
例如,當使用者啟動 SQL*Plus時必須提供有效的使用者名稱和密碼,之後 Oracle 為此使用者建立一個會話。從使用者開始連線到使用者斷開連線(或退出資料庫應用程式)期間,會話一直持續。見下圖1
例如:使用PLSQL連線資料庫,就有一個連線,相應也有一個會話。在PLSQL中開啟一個SQL視窗,就又是一個連線,相應也有一個會話。
在PLSQL裡開啟的SQL視窗查詢:
select sid from v$mystat where rownum=1;
40
select  b.spid,a.sid,a.username,a.program,a.machine  from v$session a,v$process b where a.paddr=b.addr and a.type='USER';
30152    51    BYS    plsqldev.exe    WORKGROUP\BYS  ---這一條是開啟PLSQL軟體連線到資料庫的會話資訊
30187    40    BYS    plsqldev.exe    WORKGROUP\BYS --這一條是當前PLSQL中的SQL視窗對應的會話資訊

在執行資料庫的LINUX系統上查詢:  ---程式的PID與PLSQL中查詢的可以對應。
[oracle@bys3 ~]$ ps -ef |grep LOCAL |grep -v grep
oracle   30152     1  1 21:01 ?        00:00:02 oraclebys3 (LOCAL=NO)      --對應PLSQL程式的會話
oracle   30187     1  0 21:02 ?        00:00:00 oraclebys3 (LOCAL=NO)      --對應PLSQL中的SQL視窗
#####################
使用SQLPLUS測試:  --實驗環境,現在沒有連線到資料庫。

[oracle@bys3 ~]$ ps -ef |grep LOCAL |grep -v grep   ---查詢無返回,當前系統中沒有ORACLE的連線資訊
然後另開一視窗2,SSH到資料庫所在伺服器,啟動SQLPLUS登陸資料庫。再查詢:
[oracle@bys3 ~]$ ps -ef |grep LOCAL |grep -v grep
oracle   30305 30302  3 21:10 ?        00:00:00 oraclebys3 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) --這一條就是視窗2中新開啟SQLPLUS連線的資訊 LACAL=YES,表明不是通過監聽連線的--本地IPC




使用者程式與伺服器程式相關的檢視及10G官方文件連結:
--下面幾個檢視都需要具有DBA許可權才可以查
v$session       http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2088.htm#REFRN30223
v$proess        http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2022.htm#REFRN30186
V$MYSTAT        http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1183.htm#REFRN30158
V$TRANSACTION   http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2170.htm#REFRN30291
V$LOCK          http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1147.htm#REFRN30121
v$event_name    http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1097.htm#REFRN30079
###############################################

V$MYSTAT--這個主要就是來查當前會話SID吧

SID 顯示當前會話的SID
STATISTIC#  統計號
VALUE       統計的值
###############################################

v$session    此檢視列出當前會話的詳細資訊-使用者程式通過網路連線到伺服器程式,即產生一個會話--不論會話是否有操作。

常用欄位及其描述:

SADDR   Session address     所產生的會話在記憶體中的位置
SID     Session identifier  與select distinct sid from v$mystat;中對應
SERIAL# 同一會話下的多個操作,用序列號SERIAL#來表示
PADDR   程式的地址,與與V$PROCESS中ADDR對應
USER#   其中SYS使用者為0,與後面的SCHEMA#欄位對應
USERNAME    當前程式使用的ORACLE資料庫使用者名稱,與後面SCHEMANAME對應
COMMAND     檢視程式當前正在執行的操作型別--顯示數字,要查詢數字對應的操作型別。-有鎖定時可查
OWNERID     固定值2147483644。如是其它值,則是遷移會話的使用者的識別符號。
TADDR       與V$TRANSACTION中ADDR對應,與V$LOCK中ADDR對應
LOCKWAIT    與V$LOCK中KADDR對應
STATUS      會話ACTIVE 狀態:1.SQL正在執行 2.在等待-鎖。
SERVER      網路連線模式:(DEDICATED| SHARED| PSEUDO| NONE)
####################################################

客戶端主機相關欄位描述:

OSUSER      客戶端的作業系統使用者名稱:WIN下Administrator,LINUX下oracle
PROCESS     客戶端的程式號:LINUX客戶端程式號為25819: ps aux|grep 25819|grep -v grep
MACHINE     客戶端主機名:比如WIN WORKGROUP\BYSORACLE,LINUX bys3.bys.com
TERMINAL    控制檯名:比如WIN BYSORACLE,LINUX pts/3
PROGRAM     客戶端程式,比如WIN PLSQL:plsqldev.exe,LINUX的SQLPLUS sqlplus@bys3.bys.com (TNS V1-V3)
TYPE        會話型別:分為使用者會話與後臺程式會話兩種
SERVICE_NAME    會話如果是通過網路監聽連線,顯示的是服務名。如通過IPC,可能是SYS$USERS
SQL_TRACE   SQL TRACE是否開啟
LOGON_TIME  客戶端登陸時的時間
RESOURCE_CONSUMER_GROUP  會話當前資源組的名稱
####################################################

會話執行的SQL語句的相關欄位描述:

SQL_ADDRESS 目前正在執行的SQL語句的SQL識別符號
SQL_HASH_VALUE
SQL_ID      為空,執行完畢。不為空,會話ACTIVE。與V$SQL中SQL_ID對應。select sql_text from v$sql where sql_id='9mk1dmrqf9dv8';
SQL_CHILD_NUMBER
SQL_EXEC_START 10G無此欄位,11G有,顯示SQL語句開始執行的時間
SQL_EXEC_ID     目前正在執行的SQL語句的SQL識別符號
PREV_SQL_ADDR
PREV_HASH_VALUE
PREV_SQL_ID
PREV_CHILD_NUMBER   
PREV_EXEC_START  11G新增
PREV_EXEC_ID        11G新增。這6個PREV_開頭的欄位描述的均是最後一次執行的SQL語句的資訊。
####################################################

會話相關的鎖、等待事件欄位描述:

ROW_WAIT_OBJ#   等待的物件;與DBA_OBJECTS中OBJECT_ID對應
ROW_WAIT_FILE#  等待的OBJECTS所在的資料檔案編號,與dba_data_files 中 file_id對應。select * from dba_data_files where file_id=4;
ROW_WAIT_BLOCK# 在資料檔案 的第N個塊上
ROW_WAIT_ROW#   在資料檔案 的第N個塊上第N行 0指從第一行開始
BLOCKING_SESSION_STATUS 阻塞會話狀態,VALID 被阻塞;NO HOLDER 無阻塞;
BLOCKING_SESSION        顯示被哪個會話阻塞
BLOCKING_INSTANCE       顯示補哪個例項阻塞-RAC時
SEQ#        等待事件的惟一標識,此數字會遞增。
EVENT#      事件ID;五V$EVENT_NAME中的EVENT#對應
EVENT       事件描述:如enq: TX - row lock contention 行鎖  正常狀態:SQL*Net message from client
WAIT_CLASS  等待事件的型別-Application/IDLE;
WAIT_TIME   WAIT_TIME非零值是會話的最後等待時間。零值表示會話正在等待。
SECONDS_IN_WAIT 如果WAIT_TIME=0,則SECONDS_IN_WAIT是在當前等待狀態所花費的秒。如果WAIT_TIME> 0,則SECONDS_IN_WAIT是秒自上次等待的開始,SECONDS_IN_WAIT - WAIT_TIME/100自上等待結束的活躍秒。
#####################################################33

V$PROCESS

ADDR    與v$session中PADDR對應
PID      Oracle程式識別符號,ORACLE的後臺程式及使用者程式都在內。查select pid,pname from v$process;
SPID     ORACLE中程式ID--ps -ef |grep LOCAL    查出的程式號
PROGRAM     顯示所用的程式--如oracle@bys3.bys.com (SMON)  後臺程式 oracle@bys3.bys.com (TNS V1-V3) 伺服器上直接連線  oracle@bys3.bys.com 通過監聽連線的使用者程式
BACKGROUND 值為1,是後臺程式。NULL表示是普通使用者程式
TRACEID     
TRACEFILE   11G中新增欄位,顯示了當前程式的TRACEFILE的具體位置。

LATCHWAIT   等待的鎖的地址; NULL,沒有鎖
LATCHSPIN     Address of the latch the process is spinning on; NULL if none

關於會話程式的PGA記憶體相關資訊:

PGA_USED_MEM    程式當前使用的PGA記憶體值,
PGA_ALLOC_MEM   PGA分配給會話的記憶體的大小:1138050BYTES 11.2.0.4中分配的空間是1M。
PGA_FREEABLE_MEM
PGA_MAX_MEM     已經分配給會話的最大記憶體空間值

效能分析思路:
先看OS資源,CPU 記憶體消耗最多的程式,從程式找到會話,再檢視會話詳細資訊。

相關文章