Oracle 的共用串連和專用連線方式之初探

來源:互聯網
上載者:User

        在專用連線方式中,每一個串連到資料庫伺服器的用戶端請求,伺服器會和用戶端之間建立起串連,這個串連用於專門處理該用戶端的所有請求,直到使用者主動中斷連線或網路出現中斷。在串連處於空閑時,後台進程PMON會每隔一段時間,就會測試使用者串連狀況,如果串連已斷開,PMON會清理現場,釋放相關的資源。 專用連線相當於一對一的串連,能夠快速的響應使用者的請求。當然,在串連的時候,首先要建立PGA(Program global area),參數pga_aggregate_target 決定可以由所有伺服器處理序使用的記憶體的總量,參數 workarea_size_policy  決定是用手動管理還是自動管理。如:

SQL> show parameter pga_aggregate_target

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 10485760

SQL> show parameter workarea_size_policy

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------
workarea_size_policy                 string      AUTO

而Pga由三部分構成,其中有可以配置的 sort_area_size,還有會話資訊,堆棧空間。

sort_area_size是使用者用來排序的記憶體空間:

SQL> show parameter sort_area_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------
sort_area_size                       integer     524288

    如果排序的資料量比較大,排序空間不夠用,這時Oracle通過專用演算法,對資料進行分段,分段後的資料轉移到暫存資料表空間中,在暫存資料表空間中進行排序,完成後,再合在一起,返回給請求的使用者。這是大排序為什麼使用暫存資料表空間的原因。

    在專用連線中,串連所需要的資源全部在PGA中分配。該記憶體區為指定串連私人,其它進程不能訪問。

   專用連線採用一對一的串連方式,能很的響應使用者的請求,但是,如果串連使用者太多時,由於要對每一個串連分配資源,因此,串連數受硬體限制比較大。為了克服這種情況,Oracle 提出了共用串連的串連方法,即用一個伺服器的進程響應多個使用者串連,與專用連線不同有串連時才建立PGA不同,共用串連在執行個體一啟動,就分配指定數量的伺服器處理序,所使用者的串連,以排隊的方式,由分配器指定給伺服器處理序,其它的進程排隊等待。只要使用者的請求一執行完,就會馬上中斷連線,分配器會把閒置伺服器處理序分配給其它排除的進程。

        採用共用串連可以有效提高伺服器資源的利用率,但是對一個分配器,只支援一種協議,每個分配器有自已的排隊隊列,在請求的任務完成後,由分配器將操作結果返回給相應的使用者進程。但是共用串連的建立, 需要Oracle的監聽進程、分配器、共用伺服器處理序才能共同完成一個串連的建立,所以串連的分配也需要一定的時間和資源。

    在共用串連中,sort_area_size 將在 SGA 的 Large_pool 中分配。

    上面所說的是兩種串連的建立方法和管理方法,在理想的情況下,對於長事務或大事務,使用專用連線,可以有效提高系統的效能,減少使用者等待和事務的排隊,提高系統的利用率。對於超短事務和短事務、小事務,使用共用串連方式,可以在資源與效率之間達到一種平稀。比如對於OLTP 系統,使用專用連線,而對於網站等,可以使用共用串連。

      那麼,能不能在OLTP系統中使用共用串連呢?如果能使用,那麼,能不能提高效能呢?

    OLTP系統,一般而言,有較多的長事務和大事務,如使用者的某幾步操作,必須作為一個事務。對於這種情況,我們分析一下,看看,會發生什麼樣的情況:

    分析首先有一個前提,那就是使用者請求數要大於共用伺服器處理序數,否則,減去分配器管理效能支出,共用串連的效能要低於專用連線。

      如果使用者請求數大於共用伺服器處理序數,那麼肯定有請求是在排隊,假定目前一個共用伺服器處理序正在執行一個長事務,那麼請求隊列就要一直等,直到當前的事務結束。從使用者請求的角度看,很明顯,響應的時間加長了。從伺服器角度看,我們先看一下由網友 WESTLIFE_XU 提供的執行個體:

      共用串連和長事務是背道而馳的,長事務的共用串連會造成shared 進程的嚴重排隊,造成效能的嚴重下降

     給你看一個極端的例子,以前的同事公司的

代碼:
top
6191 oracle    16   0  532m 410m 408m R 14.1 40.6   1969:23 oracle                                                                           
12599 oracle    15   0  533m 423m 419m S 13.2 41.8   4379:02 oracle                                                                           
  458 oracle    16   0  532m 411m 409m R 12.5 40.7   1808:48 oracle                                                                           
12602 oracle    16   0  532m 421m 419m R  9.7 41.7   4295:49 oracle                                                                           
4007 oracle    16   0  533m 410m 408m R  9.7 40.6   1527:16 oracle                                                                           
13053 oracle    16   0  532m 370m 368m R  8.5 36.6  77:44.69 oracle                                                                           
13967 oracle    16   0  533m 421m 419m R  8.1 41.7   2384:56 oracle                                                                           
6228 oracle    16   0  532m 408m 406m R  7.8 40.4 773:24.11 oracle                                                                           
30806 oracle    16   0  533m 415m 412m R  7.5 41.0   1139:41 oracle                                                                           
12595 oracle    15   0  533m  97m  96m S  4.4  9.7   1355:51 oracle                                                                           
12597 oracle    15   0  533m  98m  96m S  2.2  9.7 710:42.61 oracle                                                                           
12520 oracle    16   0 33388 3680 3000 S  0.3  0.4   4:21.43 tnslsnr                                                                          
12583 oracle    16   0  533m 308m 306m S  0.3 30.5   6:54.57 oracle                 


vidb:~# ps -ef|grep 6191
oracle    6191     1 13 Dec01 ?        1-08:49:28 ora_s002_SERVICE
vidb:~# ps -ef|grep  12599
oracle   12599     1 13 Nov18 ?        3-00:59:09 ora_s000_SERVICE

top10的進程全部都是類似ora_s000的共用伺服器處理序,伺服器負載在10以上

---------

      舉個例子,200個request共用比說10個共用進程,每個shared進程在一個時間內只能處理一個request,也就是說10個進程在同一時間內只能處理10個request,如果一個request需要很長的處理,會造成其它請求的嚴重排隊。

    shared進程要求用戶端的每個request要特別快,如果用戶端的一個request就佔了很長時間,那別的request就得一直等著,共用就沒有什麼意義了。

    從上面可以看出,如果在有大事務和長事務的OLTP系統中,系統會比原來更慢!

    綜合來看,共用串連和專用連線各有所長,關鍵是看應用,能適用於自已應用的串連方式,就是好方式。

   

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.