共計 5007 個字符,預計需要花費 13 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關在 Oracle 中 session 和 process 的區別什么,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
對應元數據表
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 的區別什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。