在Oracle中session和process的區別(轉)

路途中的人2012發表於2017-10-26
  • 對應後設資料表

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.

    trace:http://fusnow.itpub.net/post/681/214188

    trace:

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2146435/,如需轉載,請註明出處,否則將追究法律責任。

相關文章