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