使用者/伺服器程式概念及v$session/V$PROCESS檢視簡介
伺服器程式概念:
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 顯示當前會話的SIDSTATISTIC# 統計號
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下oraclePROCESS 客戶端的程式號: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 記憶體消耗最多的程式,從程式找到會話,再檢視會話詳細資訊。
相關文章
- v$session 檢視Session
- v$session/v$process檢視涉及的相關會話資訊的查詢Session會話
- v$sesstat,v$mystat,v$statname和v$sysstat檢視簡介
- 幾個檢視 v$mystat v$systata v$sessionSession
- v$session.PROCESS/V$process.SPID含義Session
- 關於v$process與v$session中process的理解Session
- 【會話】V$SESSION檢視會話Session
- v$session_wait和v$session_event檢視SessionAI
- v$active_session_history檢視Session
- v$process和v$session中欄位解釋Session
- 幾個重要檢視(V$SYSTEM_EVENT V$SESSION_EVENT V$SESSION_WAIT)SessionAI
- 【Oracle九大效能檢視】之6.v$process檢視Oracle
- v$active_session_history檢視[轉]Session
- V$session 檢視的小運用Session
- 效能檢視 V$Session_LONGOPSSessionGo
- 【檢視】V$BGPROCESS與V$PROCESS間的區別與聯絡
- [20171102]檢視v$session中process欄位含義Session
- V$ACTIVE_SESSION_HISTORY檢視的使用Session
- V$SESSION_LONGOPS 檢視的用法SessionGo
- Oracle等待檢視v$session_waitOracleSessionAI
- V$session 及該檢視的小運用Session
- (轉)Oracle動態效能檢視學習之v$processOracle
- A discussion of Dead Connection Detection, Resource Limits, V$SESSION, V$PROCESS and OS processesMITSession
- 授權某使用者,檢視動態效能檢視的許可權(如v$latch,v$lock,v$sqlarea,v$sql,v$sysstat)SQL
- 轉載--V$ACTIVE_SESSION_HISTORY檢視的使用Session
- V$ACTIVE_SESSION_HISTORY 檢視中包含的資訊Session
- v$session_longops 檢視回滾進度SessionGo
- 動態檢視V$SESSION_LONGOPS學習SessionGo
- v$sql檢視和v$sqlarea檢視的構建SQL
- Oracle 動態效能表 v$session & v$process各個欄位的說明OracleSession
- 動態檢視學習之v$session_waitSessionAI
- v$session檢視中的sid和serial#研究Session
- [20120307]檢視v$session檢視的定義.txtSession
- Oracle動態效能檢視學習筆記(7)_v$sessionOracle筆記Session
- Oracle動態效能檢視之v$session_longops ztOracleSessionGo
- V$SESSIONSession
- 【Oracle】-【v$session】v$session的SNIPED狀態OracleSession
- v session_wait v session_event v system_eventSessionAI