oracle会话资源,oracle session 会话
管理Oracle
Session是后臺DBMS采用Oracle的信息管理系統的一個重要工作。如果管理不當,會對系統的性能和運行的穩定性產生非常大的影響。Oracle
Session是非常寶貴的資源,其數量通常都是有一個固定的設定值,對于Oracle 10g Enterprise
Edition來說,如果不修改初始化參數,那么默認最大的Session數為170個,在后期系統管理員可以根據實際的需要來修改這個數值。因此系統必須非常小心的管理這些Session。本文主要就多層分布式系統中Oracle
Session的管理提供解決方案。下圖是本文所述的多層分布式管理系統的模型圖,層與層之間的調用關系如圖:
對于使用.NET Framework作為開發平臺的系統來說,如果是Web Application或者Smart Client
Application,在中間件層,應用程序服務器多采用IIS,業務邏輯組件和數據訪問組件通常寄宿在IIS進程中運行。如果采用此種部署方案,那么影響Oracle
Session的主要是兩種因素:
1)IIS進程數;
2)連接池的設置。
一、連接池對Oracle Session的影響
在現代的軟件設計中,為了提高系統的性能,在數據訪問層通常會采用連接池來改善數據庫連接的效率來改善系統的性能,很多人可能不知道連接池的配置對Oracle
Session的產生有著至關重要的影響。連接池對Oracle Session影響主要有兩個因素:
1)對于ADO.NET來說,對于不同的連接字符串會產生不同的連接池。
2)min pool size的值。
對于使用了連接池的數據訪問層來說,Oracle Session的產生機制為:minsessions=(連接池數)X(min
pool size)。值得注意的是每次產生新的Oracle
Session是在不同AppDomain邊界產生的時候發生的,也就是說不同的進程每執行一次就會產生minsessions個oracle
Session,直到這個進程結束才會釋放這些session.
二、IIS進程數對Oracle Session的影響
在IIS6.0中,采用了新的進程隔離模式來響應用戶的請求,管理員可以設置多個進程來滿足實際的需要。IIS進程管理器(實際上是inetinfo.exe)負責調度這些進程。在IIS管理器中,我們可以這樣來增加IIS進程數.
上文說到Oracle
Session是在不同的AppDomain邊界產生的時候發生的,因此不同的請求發送到IIS以后,每一個IIS進程使Oracle產生min
pool size個Sessions。按照這個推算,那么實際產生的會話數為:
Sessions = (IIS process number) X (min pool size)。
從上文的分析中我們可以得出,對于Oracle來說,安全的Sessions數應該為Sessions = (IIS process
number) X (min pool size)X(連接池數)。假定連接池數為1,連接池min pool
size為10,iis進程數為30,那么安全的Oracle
Sessions的數量應該為300。如果不按照這個數量進行設置,那么系統運行的過程中IIS會經常報告一些莫名奇妙的錯誤,如認證失敗。很多人可能會認為IIS已經Crash了,實際上是由于Session的數量超過了Oracle允許的數量。
當然我們還必須將由于程序異常處理不當等造成的壞死的Session的可能數量計算在內。為了保證系統的運行問題,應該在上文所說的計算方法上加一個保險值,如350.
什么是session
通俗來講,session
是通信雙方從開始通信到通信結束期間的一個上下文(context)。這個上下文是一段位于服務器端的內存:記錄了本次連接的客戶端機器、通過哪個應用程序、哪個用戶在登錄等信息[在pl/sql
developer中,通過Tools-->Sessions可以查看當前數據庫的session]。session
是和connection同時建立的,兩者是對同一件事情不同層次的描述。簡單講,connection是物理上的客戶機同服務器段的通信鏈路,session是邏輯上的用戶同服務器的通信交互。
oracle中一個用戶登錄oracle服務器的前提,就是該用戶具有oracle的 “create
session”權限。oracle允許同一個用戶在同一個客戶機上建立多個同服務器的連接,這一點從oracle的視圖V$session中可以看到[select
* from
v$session;]。每個session都代表了用戶與服務器的一個交互。就像兩個國家之間可以同時開展很多談判,經濟的,環境的等等。關閉了有關經濟的談判,不會影響到環境談判的進行。后臺進程PMON會每隔一段時間,就會測試用戶連接狀況,如果連接已斷開,PMON會清理現場,釋放相關的資源。
在具體的應用場景中connction 和 session 有很多情況:
1. sqlplus 登錄 oracle
這種場景比較容易理解,一個連接對應一個session。
2. 其他客戶端工具登錄oracle
比如:pl/sql developer 登錄oracle。pl/sql developer
可以設置是否每個窗口共用同一個session. 如果想在調試窗口調試存儲過程或函數,則必須設置為共享session。如果設置為非共享,
則每次打開一個操作窗口,pl/sql developer 會利用最初輸入的帳戶和口令建立新的connection 和
session.
3. IIS 用程序登錄oracle
這種情況下,其實是IIS在登錄oracle。connection 和 session
的建立情況和iis機制相關。(以下是參考了網友的觀點,文章來源:http://www.cnblogs.com/)
“對于Oracle來說,安全的Sessions數應該為Sessions = (IIS process number) * (min
pool size)。”
IIS進程:在IIS6.0中,采用了新的進程隔離模式來響應用戶的請求,在IIS管理器中,可以設置應用程序池的最大進程數。對于新的WEB應用請求,IIS進程管理器會啟動多個W3wp.exe進行響應。
4、 其他情況 有待各路英雄補充
orcale的session內存
oracle 的連接分為兩種:獨占式,共享式。
在獨占式連接情況下,session(如游標,排序去,sql區)是在PGA中分配的。
在共享式連接情況下,session的一部分(如UGA)是在中SGA的larg pool中分配的。
oracle session 和process
oracle中每個process 都有對應的session。
process 分為
用戶進程在V$session 中可用條件:$session.type = ‘USER’.查詢。
后臺進程在V$session 中可用條件:$session.type = ‘BACKGROUND’查詢。
常見的后臺進程:
SMON,PMON,DBWR,LGWR,MMAN,MRP,
RFS,RECO,CKPT,ARCH,Dnnn,Snnn,LMON,LMD0,QMNn,TRWR,WMON,LCKnnn,SNPnnn,
MMON,DMON,SNP
session 相關的初始化參數:
process:oracle的連接數(sessions)與其參數文件中的進程數(process)相關,它們的關系如下:sessions=(1.1*process+5),我們可以通過修改inia.ora的這個process參數在更改可連接的最大session數。
workarea_size_policy:PGA用手動管理還是自動管,
在AUTO的時候每個session最多能用到5%或100M
總結
以上是生活随笔為你收集整理的oracle会话资源,oracle session 会话的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx php7 fastcgi,W
- 下一篇: oracle进城有哪些,oracle主要