幸せのちから

          平凡的世界
          看似平常實(shí)崎嶇
          成如容易卻艱辛

          關(guān)于Oracle Shared Server及一些參數(shù)設(shè)置(轉(zhuǎn))


          關(guān)于Oracle Shared Server及一些參數(shù)設(shè)置
          ===========================================================
          Oracle Shared Server比較適合一些小而快的事務(wù)連接,這些事務(wù)的特點(diǎn)就是事務(wù)比較短,操作和返回的數(shù)據(jù)量比較少。而對(duì)于一些數(shù)據(jù)倉庫而言,顯然是不適合建成 Shared Server模式。下面說一下Shared Server和Dedicated Server的一些區(qū)別:
          在Dedicated Server環(huán)境中,每一個(gè)連接都將啟動(dòng)一個(gè)專用服務(wù)進(jìn)程,這個(gè)專用服務(wù)進(jìn)程始終服務(wù)于這個(gè)連接直到連接斷開。每一個(gè)專用服務(wù)進(jìn)程都有一個(gè)屬于自己的內(nèi)存區(qū)域,叫做PGA(Program GlobalArea),里面存放了會(huì)話的信息,包括綁定變量、游標(biāo)、排序等等。而在Shared Server環(huán)境中,這些信息被存放到SGA中的UGA(User Global Area)區(qū)域中,這個(gè)區(qū)域一般都位于大型池中(Large pool)。見下圖:

          shared_server structure

          在Shared Server環(huán)境中,一個(gè)調(diào)度器服務(wù)多個(gè)連接的請(qǐng)求,并將請(qǐng)求放到請(qǐng)求隊(duì)列(request queue)中,所有調(diào)度器共用一個(gè)請(qǐng)求隊(duì)列,接著由共享服務(wù)進(jìn)程(Shared Server processes)來處理這些請(qǐng)求,并將處理后的結(jié)果返回到響應(yīng)隊(duì)列(response queue),與請(qǐng)求隊(duì)列不同,每個(gè)調(diào)度器都有自己的一個(gè)響應(yīng)隊(duì)列,然后由調(diào)度器把響應(yīng)隊(duì)列中的結(jié)果返回給客戶端。其中請(qǐng)求隊(duì)列和響應(yīng)隊(duì)列都是SGA中的一部分。
          在一個(gè)共享服務(wù)環(huán)境中,一個(gè)客戶端請(qǐng)求的步驟是這樣的:
          1、 客戶端發(fā)送一個(gè)請(qǐng)求到調(diào)度器
          2、 調(diào)度器將請(qǐng)求放入到請(qǐng)求隊(duì)列中
          3、 共享服務(wù)進(jìn)程從請(qǐng)求隊(duì)列中取出請(qǐng)求進(jìn)行處理
          4、 共享服務(wù)進(jìn)程將處理后的結(jié)果放到調(diào)度器的響應(yīng)隊(duì)列中
          5、 調(diào)度器從響應(yīng)隊(duì)列中取出結(jié)果返回給客戶端
          示例圖如下:

          shared_server structure

          同時(shí),在Shared server環(huán)境中,也可以使用連接池的方法來存放多個(gè)連接請(qǐng)求,數(shù)據(jù)庫定時(shí)斷開空閑的連接來服務(wù)其它新的連接請(qǐng)求。
          在Shared server環(huán)境中也存在不足,當(dāng)某一個(gè)請(qǐng)求需要處理并返回大量數(shù)據(jù)的時(shí)候,將會(huì)導(dǎo)致其它新的請(qǐng)求得不到及時(shí)的響應(yīng)。所以對(duì)于這樣的請(qǐng)求,最好使用專用服務(wù)進(jìn)程。同時(shí),部分?jǐn)?shù)據(jù)庫管理操作需要使用專用服務(wù)進(jìn)程,比如數(shù)據(jù)庫啟動(dòng)關(guān)閉,數(shù)據(jù)庫備份恢復(fù)等等,對(duì)于表分析、大量數(shù)據(jù)加載、索引重建等操作也建議使用專用服務(wù)進(jìn)程。
          監(jiān)聽器在Shared server環(huán)境中也扮演著重要的角色。PMON進(jìn)程定期檢測(cè)調(diào)度器的負(fù)載情況,并將這些信息反饋給監(jiān)聽器。監(jiān)聽器記錄著每個(gè)調(diào)度器的地址信息及負(fù)載情況(當(dāng)前服務(wù)多少個(gè)連接等等),當(dāng)有新的連接請(qǐng)求的時(shí)候,監(jiān)聽器將負(fù)載較低的調(diào)度器地址信息返回給客戶端,客戶端根據(jù)地址信息連接到相應(yīng)的調(diào)度器。
          下面談?wù)勅绾闻渲肙racle shared server環(huán)境。
          可以通過多種方法來配置shared server,包括創(chuàng)建數(shù)據(jù)庫的時(shí)候指定參數(shù)、EM、修改初始化參數(shù)文件,還有可以通過Alter system進(jìn)行修改,因?yàn)檫@些參數(shù)都是動(dòng)態(tài)參數(shù)。
          1) DISPATCHERS:指定調(diào)度器的數(shù)量、響應(yīng)的協(xié)議等等。下面是具體的參數(shù)及說明:

          shared_server structure

          其中最經(jīng)常使用的兩個(gè)屬性值就是DISPATCHERS和PROTOCOL。
          DISPATCHERS = “(PRO=TCP)(DIS=3)(PRO=IPC)(DIS=2)”
          上面表示配置了3個(gè)TCP協(xié)議的調(diào)度器,2個(gè)IPC協(xié)議的調(diào)度器。那么,調(diào)度器的數(shù)量應(yīng)該如何確定呢?主要考慮數(shù)據(jù)庫最大的連接數(shù)和每個(gè)調(diào)度器服務(wù)的連接數(shù),可以通過下面的公式進(jìn)行計(jì)算:
          調(diào)度器數(shù)量 = 數(shù)據(jù)庫最大session數(shù) /每個(gè)調(diào)度器服務(wù)的session數(shù);
          數(shù)據(jù)庫的session數(shù)可以通過下面的視圖獲得:
          1、 v$session:獲得當(dāng)前數(shù)據(jù)庫的session數(shù)
          SQL> select count(*) from v$session where username is not null;
          2、 V$LICENSE:獲得當(dāng)前數(shù)據(jù)庫的session數(shù)及數(shù)據(jù)庫啟動(dòng)以來最大的session數(shù)
          SQL> select sum(sessions_current) cur_sessions,sum(sessions_highwater) high_sessions from V$LICENSE;
          比如數(shù)據(jù)庫當(dāng)前有500個(gè)TCP/IP session,每個(gè)調(diào)度器管理50個(gè)session,那么就需要10(500/50)個(gè)調(diào)度器。參數(shù)設(shè)置如下:
          DISPATCHERS=”(PRO=TCP)(DIS=10)”
          當(dāng)然也可以根據(jù)數(shù)據(jù)庫當(dāng)前的負(fù)載,使用ALTER SYSTEM命令動(dòng)態(tài)的增加或減少調(diào)度器的數(shù)據(jù),如下:
          ALTER SYSTEM SET DISPATCHERS=”(PRO=TCP)(DIS=5)”;

          設(shè)置連接池:
          DISPATCHERS="(PROTOCOL=tcp)(DISPATCHERS=1)(POOL=on)(TICK=1)(CONNECTIONS=500)(SESSIONS=1000)"
          上面表示啟動(dòng)連接池,一個(gè)調(diào)度器的連接數(shù)最大為500個(gè),sessions數(shù)目最大為1000個(gè),并10分鐘后自動(dòng)斷開未活動(dòng)的連接。(TICK=1表示10分鐘)
          2) MAX_DISPATCHERS:設(shè)置最大的調(diào)度器數(shù),可以動(dòng)態(tài)調(diào)整
          ALTER SYSTEM SET MAX_DISPATCHERS=10;
          3) SHARED_SERVERS:設(shè)置數(shù)據(jù)庫啟動(dòng)時(shí)啟動(dòng)的最小SHARED_SERVER數(shù),默認(rèn)值庫1。設(shè)置為0表示不使用SHARED_SERVER。
          ALTER SYSTEM SET SHARED_SERVERS = 5;
          4) SHARED_SERVER_SESSIONS:設(shè)置ORACLE SHARED SERVER的最大session數(shù)。
          當(dāng)連接到SHARED SERVER的session數(shù)超過此值的話,將報(bào)錯(cuò):
          ERROR:
          ORA-00018 maximum number of sessions exceeded
          不過當(dāng)數(shù)據(jù)庫session超過此值的時(shí)候,仍然可以通過專用服務(wù)器連接進(jìn)行連接。
          ALTER SYSTEM SET SHARED_SERVER_SESSIONS = 5;
          5) MAX_SHARED_SERVERS:設(shè)置最大的SHARED_SERVER數(shù)。如果未給此參數(shù)附值,那么SHARED_SERVER數(shù)庫無限制。
          ALTER SYSTEM SET MAX_SHARED_SERVERS = 20;
          下面談?wù)凮RACLE SHARED SERVER環(huán)境的管理:
          1)從監(jiān)聽獲得信息
          D:>lsnrctl services
          LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 21-APR-2004
          20:50:35
          Copyright (c) 1991, 2004, Oracle. All rights reserved.
          Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MJW01)
          (PORT=1521)))
          Services Summary...
          Service "PLSExtProc" has 1 instance(s).
          Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
          Handler(s):
          "DEDICATED" established:0 refused:0
          LOCAL SERVER
          Instance "MJW", status READY, has 3 handler(s) for this service...
          Handler(s):
          "DEDICATED" established:0 refused:0 state:ready
          LOCAL SERVER
          "D001" established:11 refused:1 current:1 max:1002 state:ready
          DISPATCHER
          (ADDRESS=(PROTOCOL=tcp)(HOST=MJW01)
          (PORT=4152))
          "D000" established:15 refused:3 current:2 max:1002 state:ready
          DISPATCHER
          (ADDRESS=(PROTOCOL=tcp)(HOST=MJW01)
          (PORT=3845))
          The command completed successfully
          上面的信息表明當(dāng)前數(shù)據(jù)庫擁有兩個(gè)調(diào)度器,分別庫"D000"和"D001",與"D000"建立連接的總共有15個(gè),拒絕掉的有3個(gè),當(dāng)前活動(dòng)的連接有2個(gè);與"D001"建立連接的總共有11個(gè),拒絕掉的有1個(gè),當(dāng)前活動(dòng)的連接有1個(gè)。
          2)從動(dòng)態(tài)性能圖獲得信息:
          V$DISPATCHER:顯示當(dāng)前調(diào)度器的一些信息,包括調(diào)度器的狀態(tài)(等待還是繁忙)、當(dāng)前的連接數(shù)、歷史的連接數(shù)等等。
          V$DISPATCHER_CONFIG:顯示調(diào)度器的一些配置參數(shù)。
          V$SHARED_SERVER:顯示當(dāng)前數(shù)據(jù)庫SHARED SERVER的一些狀態(tài)信息
          V$SHARED_SERVER_MONITOR:顯示當(dāng)前數(shù)據(jù)庫SHARED SERVER的一些統(tǒng)計(jì)信息,包括SHARED SERVER的最大連接數(shù),會(huì)話數(shù)及啟動(dòng)的SHARED SERVER數(shù)等等。
          同時(shí),在ORACLE SHARED SERVER環(huán)境中,也可以配置專用服務(wù)器連接,但只有當(dāng)你是使用Localnaming方法的時(shí)候才可以,如果你是使用Hostnaming方法的話則不可以。有幾個(gè)方法進(jìn)行配置,如下:
          1、 手工修改Tnsname文件
          ora10g =
          (DESCRIPTION =
          (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.172)(PORT = 1521))
          )
          (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ora10g)
          )
          )
          2、通過Oracle net manager進(jìn)行配置
          3)對(duì)于配置了ORACLE SHARED SERVER的數(shù)據(jù)庫,有一些參數(shù)需要值得我們的關(guān)注:
          1、LARGE POOL SIZE
          在ORACLE SHARED SERVER環(huán)境中,ORACLE 將UGA存放在LARGE POOL中,而在沒有LARGE POOL或者LARGE POOL太小的數(shù)據(jù)庫中,UGA將存放于SHARED POOL中,這樣將影響到數(shù)據(jù)庫其它的性能。所以LARGE POOL的大小也值得我們考究。LARGE POOL最小為300K,最大為2G(不同操作系統(tǒng)可能有所不同)。一般來講,在ORACLE SHARED SERVER環(huán)境中,一個(gè)連接將占用1-3M的內(nèi)存,不過要看會(huì)話做了哪些操作。我們可以通過下面的語句獲得數(shù)據(jù)庫啟動(dòng)以來,最大的UGA值:
          select sum(value) "Max MTS Memory Allocated"from v$sesstat ss, v$statname st
          where name = 'session uga memory max'and ss.statistic# =st.statistic#;
          Max MTS Memory Allocated
          ------------------------------------
          244416

          可以看到,ORACLE分配的最大UGA庫240K,如果數(shù)據(jù)庫同時(shí)支持100個(gè)并發(fā)連接,那么可以將LARGE POOL設(shè)置庫23M(240K*100)。如果LARGE POOL設(shè)置過小,可能遇到下面的錯(cuò)誤:
          ORA-04031: unable to allocate 490 bytes of shared memory
          ("large pool","MWEIS","session heap","define var info")
          可以通過ALTER SYSTEM命令進(jìn)行動(dòng)態(tài)修改。
          ALTER SYSTEM SET LARGE_POOL_SIZE = 51200000 SCOPE=SPFILE;
          2、 調(diào)度器數(shù)目
          可以通過查詢V$DISPATCHER視圖來查看調(diào)度器的狀態(tài):
          SQL> desc v$dispatcher;
          Name Type Nullable Default Comments
          --------- ------------- -------- ------- --------
          NAME VARCHAR2(4) Y
          NETWORK VARCHAR2(128) Y
          PADDR RAW(4) Y
          STATUS VARCHAR2(16) Y
          ACCEPT VARCHAR2(3) Y
          MESSAGES NUMBER Y
          BYTES NUMBER Y
          BREAKS NUMBER Y
          OWNED NUMBER Y
          CREATED NUMBER Y
          IDLE NUMBER Y
          BUSY NUMBER Y
          LISTENER NUMBER Y
          CONF_INDX NUMBER Y
          SQL> Select name, (busy / (busy + idle))*100
          2 "Dispatcher % busy Rate"
          3 From V$DISPATCHER
          4 /
          NAME Dispatcher % busy Rate
          ---- ----------------------
          D000 0.0052861386871346
          如果繁忙的百分比超過50%,那么可以考慮增加調(diào)度器,可以使用下面的語句動(dòng)態(tài)修改:
          ALTER SYSTEM SET DISPATCHERS=“(PRO=TCP)(DIS=2)”;
          3、 調(diào)度器響應(yīng)時(shí)間
          可以通過查看V$QUEUE 和 V$DISPATCHER來獲得連接等待調(diào)度器響應(yīng)的時(shí)間:
          SELECT decode(sum(totalq),0,’No Responses’,
          Sum(wait)/sum(totalq)) “Average Wait time”
          FROM V$QUEUE q, V$DISPATCHER d
          WHERE q.type = ‘DISPATCHER’
          AND q.paddr = d.paddr;
          Average Wait Time
          ------------------
          .0413
          4、 連接等待shared server處理請(qǐng)求的時(shí)間
          Select decode(totalq,0,’No Requests’) “Wait Time”,
          Wait/totalq || ‘ hundredths of seconds’
          “Average Wait time per request”
          from V$QUEUE
          where type = ‘COMMON’
          Wait Time Average Wait time per request
          -------- -----------------------------------
          .023132 hundredths of a second

           

           

           

          tolywang 發(fā)表于:2007.07.19 10:16 ::分類: ( Oracle數(shù)據(jù)庫管理 ) ::閱讀:(543次) :: 評(píng)論 (0) :: 引用 (0)

          posted on 2009-03-20 21:26 Lucky 閱讀(1030) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          隨筆分類(125)

          文章分類(5)

          日本語

          搜索

          積分與排名

          最新隨筆

          最新評(píng)論

          主站蜘蛛池模板: 望谟县| 竹山县| 孟津县| 九台市| 阿克陶县| 沭阳县| 石棉县| 佛坪县| 横山县| 武平县| 塔河县| 潞城市| 临夏市| 眉山市| 揭西县| 阿拉善盟| 南宫市| 海阳市| 工布江达县| 图木舒克市| 弥勒县| 南皮县| 沂水县| 增城市| 台南县| 基隆市| 大洼县| 明光市| 鄢陵县| 定安县| 吴忠市| 汉阴县| 湟源县| 北京市| 西乌| 永善县| 于都县| 章丘市| 辽源市| 银川市| 孝感市|