您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關在Oracle中session和process的區別什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
對應元數據表
v$resource_limit。
相互關系
sessions=1.1 * processes + 5 ,至于開多少個進程和你的用戶并發數有關。
如果修改要修改數據庫初始化參數,processes 和session
在Oracle中session和process的區別
問:在Oracle中session和process的區別是什么?
答:一、一個process可以有0個、1個或者多個session,一個 session也可以存在若干個process中,并行同樣是一個session對應一個process,主session是coordinator session,每個parallel process同樣會對應數據庫里一個單獨的session。可以從v$px_session和v$session中驗證這點。;
二、連接connects,會話sessions和進程pocesses的關系
每個sql login稱為一個連接(connection),而每個連接,可以產生一個或多個會話,如果數據庫運行在專用服務器方式,
一個會話對應一個服務器進程(process),如果數據庫運行在共享服務器方式,一個服務器進程可以為多個會話服務。
三、A session is a specific connection of a user to an Oracle server.The session starts when the
user is validated by the Oracle server, and it ends when the user logs out or when there is an
abnormal termination.
In the UNIX environment, most Oracle processes are threads of one master Oracle
process rather than being individual processes. On Windows NT, all processes
consist of at least one thread.
Oracle專用服務器與共享服務器的區別建立Oracle數據庫的時候,應該會在數據庫建立助手向導上面看到這么一個選項,就是數據庫的連接模式采用什么方式。在Oracle9i或者10g中,可以看到有2種連接模式,一種叫做專用服務器連接(dedicated server) ,另外一種叫做共享服務器連接(shared server)。下面我們來分類說一下這兩種連接方式的不同點。
專用服務器模式就是說每次在對Oracle進行訪問的時候,Oracle服務器的Listener會得到這個訪問請求,然后回為這個訪問創建一 個新的進程來進行服務。所以說,對于每一個客戶端的訪問,都會生成一個新的進程進行服務,是一種類似一對一的映射關系。這種連接模式的一個很重要的特點就 是UGA(用戶全局域)是存儲在PGA(進程全局域)中的,這個特性也很好說明了當前用戶的內存空間是按照進程來進行分配的。
而另外的共享服務器連接則是一種在程序編 寫的時候通常會用到的連接池(pool)的概念。采用這種模式的話,在數據庫的初始化的時候就會創建一批服務器連接的進程,然后把這些連接進程放入一個連 接池來進行管理。初始化的池中的進程數量在數據庫初始化建立的時候是可以手動設置的。在連接建立的時候,Listener首先接受到客戶端的建立連接的請 求,然后Listener去生成一個叫做調度器(dipatcher)的進程與客戶端進行連接。調度器把把客戶端的請求放在SGA(系統全局域)的一個請 求隊列中,然后再共享服務器連接池中查找有無空閑的連接,然后讓這個空閑的服務器進行處理。處理完畢以后再把處理結果放在SGA的相應隊列中。調度器通過 查詢相應隊列,得到返回結果,再返回給客戶端。這種連接模式的優點在于服務器進程的數量可以得到控制,不大可能出現因為連接人數過多而造成服務器內存崩 潰。但是由于增加了復雜度以及請求相應隊列,可能性能上有所下降。
總之,在開發階段中,用第一種專用服務器可能好一些,因為少了一些中間的復雜度,而且開發的時候一般連接的數量也少。而在多個應用同時使用一個 數據庫的實際應用環境下,采用第二種方法可能好一些,因為如果到時候突然有1000個或者10000個請求連接的話,數據庫服務器如果同時建立10000 個連接,肯定要受不了的。當然,也要看到時候的實際情況如何再做決定,兩者沒有絕對的哪種好哪種不好的差別
關于這兩者的比較"假如你來到一個城市,要在這個城市的不同的地方辦幾件事情,在交通方面你有兩種選擇:一個是雇一輛專車,這輛專車將會把你從A帶到B, 一直等你把在B的事情辦完,在把你從B帶到C。。。。。。另一種選擇是給出租車公司打電話訂輛出租車,先把你從A帶到B,然后你和出租車該干嘛干嘛,你去 辦你的事情,出租車去接別的生意,等你在B的事情辦完了,你再跟出租車公司訂車,出租車公司將會聯系當時在B附近的其他出租車去接你。。。。。。
首先,dedicated servers的設置非常簡單-----不需要設置,這個是oracle的默認選項
而對于shared servers,你就要需要做一些額外的設置,當讓按照administrator
guide并不難,關鍵是你需要決定到底需要多少個shared server
servers和多少個dispatcher,這不僅僅需要經驗的積累,還需要持續的觀察和調整。
在dedicated servers里,你所有的等待都是數據庫本身的等待,而在shared servers里你有可能需要等待一個available的shared server process。
很明顯,當用戶并發的連接數很大的時候,dedicated servers的server process個數也會變得很大,對于操作系統來說多一個process就意味著多一點管理負擔,要知道操作系統支持的同時并發數可不是無限的。這意味 著,在dedicate servers里,當你有大量的用戶連接(比如,同一時間超過5000個用戶連上來),你的系統負擔就會相當大。而這種情況shared servers就可以處理的相對好一些,因為加入同時有5000個用戶連上來而且我們知道一般只有1%的連接是active,那我們只需要設置50個 shared servers就可以把所有的用戶請求處理得很好,并節省了系統資源。
作為一個好處,shared servers可以用來控制concurrent。要知道用戶的并發數和系統的處理能力決不是成正比的(可以下面的圖),當用戶并發數超過一個閥值,系統 的處理能力會明顯下降。通過shared servers可以控制系統的concurrent不超過這個閥值。
在引入PGA的自動管理以前,shared servers是要比dedicated servers節省內存的,然后在自動管理的PGA引入之后,shared servers的這個優勢已經不像我們想象的那么不明顯了。
dedicate servers一個server process為了一個較大的request而長時間的工作而不影響其它的users,然而在shared servers,一些較大的request會影響其它的用戶。
還需要考慮其他的因素,比如,如果在前端使用了weblogic的connecting pool,那么你在database level再使用shared servers可能就不是很必要,因為這時你的用戶連接已經在weblogic層面上得到了控制。
shared servers還有一個所謂的偽死鎖的問題,這點大家參考一下tom的新書就知道了。
關于dedicated servers和shared servers的話題我們就討論這么多,最后給大家一個小提示:其實dedicated servers和shared servers是可以并存的,實際上,即使你使用了shared servers,某些管理操作也是必須在dedicated 模式下來做的,比如startup或shutdown database。如果你實在難以選擇,如果你的應用可能一部分是OLTP的(用戶量也很大),一部分是DW的,其實你可以考慮同時使用 dedicated servers和shared servers。
"
查看運行情況:
idle> show parameter shared_server mts_servers
NAME_COL_PLUS_SHOW_PARAM TYPE
---------------------------------------------------------------- -----------
VALUE_COL_PLUS_SHOW_PARAM
-----------------------------------------------------------------------------------------------------------------------------------
max_shared_servers integer
20
shared_server_sessions integer
165
shared_servers integer
1
--如果VALUE_COL_PLUS_SHOW_PARAM大于0為dedicated模式
idle> select p.program,s.server from v$session s , v$process p
2 where s.paddr = p.addr
3 ;
PROGRAM SERVER
------------------------------------------------ ---------
oracle@infa (PMON) DEDICATED
oracle@infa (DBW0) DEDICATED
oracle@infa (LGWR) DEDICATED
oracle@infa (CKPT) DEDICATED
oracle@infa (SMON) DEDICATED
oracle@infa (RECO) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
oracle@infa (TNS V1-V3) DEDICATED
15 rows selected.
模式切換:
客戶端建立的連接。
如果服務器是專用模式,客戶端再怎么修改也沒有用。
服務器切換專有和共享模式的方法是修改參數文件中的參數。
sample
trace
大多數情況下我們更傾向或習慣專用模式,兩種模式下,對sga等分配都會有不同,所以如果轉換成mts模式,別忘了sga也是需要調整的。最典型的 是mts模式需要較大的large_pool_size。如果真想轉換還是仔細看看oracle關于mts的文檔。共享連接只是把連接SESSION信息 放在LARGE POOL,所以LARGE POOL要大一些。而專用連接的SESION信息放在PGA。
Note:
1. 如果是dedicated server,則客戶端只能創建dedicated server connection
2. 如果是shared server,則客戶端能創建dedicated server connection和shared server
connection,只要在service name中指定server=dedicated or server=shared.
關于在Oracle中session和process的區別什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。