程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle調優淺析“會話管理開銷”

oracle調優淺析“會話管理開銷”

編輯:Oracle教程

調優之淺析“會話管理開銷”

【簡介】

在調優的過程中,對於會話的管理是比較普遍的問題,因為維護會話的開銷相對是比較高的。

【過程表現如下】

客戶請求(sid)→監聽接收到→監聽派生出新的進程(systemprocess id)→客戶進程

注釋:

SPID:system process id,表示該serverprocess在OS層面的Process ID(操作系統進程ID);

PID:oracle process id,可以理解為Oracle自身使用的進程ID;

SID:session標識,在連接其它列時使用

【操作過程】

SQL> select sid from v$mystat whererownum=1;

--當前會話的sid

SID

----------

159

SQL> select p.spid

2 from v$process p,v$session s

3 where p.addr=s.paddr ands.sid=159;

--通過sid(session標識)找到相應的serverprocess

--spid(system process id)serverprocess在OS層面的Porcess ID,即操作系統進程ID

--pid(oracle process id)oracle進程ID

--查詢條件為進程地址等於會話裡的進程地址,並且會話sid為159

--查詢出為sid159服務的system processid為426192

SPID

------------

426192

$ps -ef |grep 426192|grep -v grep

--查看system process id(serverprocess id)為426192的進程,並且把grep進程本身排除掉

oracle 426192 303338 0 09:29:21 - 0:02 oraclemetro (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

--查看到spid為426192的oracle進程,這是一個專有模式連接的進程

--以上查詢表明維護一個會話的開銷是比較高的

【情景舉例】

假設操作人員登陸一個系統時,會將sql發送給應用服務器,符合驗證後會反饋回來,此時數據庫鏈接斷掉。一段時間後操作人員想根據ID查詢相應數據時,會重新發送一個鏈接,這次把信息返回後,又會斷掉。這就是一個比較糟糕的會話鏈接,循環往復,因為在不停的創建鏈接、終結鏈接、創建鏈接、終結鏈接......將這種情況體現在oracle上面,成本就會比較高了。

在實際生產環境下,對於應用服務器(B\S結構)會建立長鏈接(或鏈接池)以解決前面的問題。比如說,以weblogic作為應用服務器,創建了許多鏈接對象連接到oracle數據庫,連上以後就不再斷開了。之後,前端的應用需要使用數據庫的時候,會先連接到應用服務器,應用服務器分配一個鏈接池裡的空閒鏈接給這個應用請求使用。這個鏈接用完之後不會中斷,而是把它變成空閒的狀態再放回鏈接池。這個過程就是有效的減少了會話的數量。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved