程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle數據庫共享連接和專用連接方式比較

Oracle數據庫共享連接和專用連接方式比較

編輯:關於Oracle數據庫

  在專用連接方式中,每一個連接到數據庫服務器的客戶端請求,服務器會和客戶端之間建立起連接,這個連接用於專門處理該客戶端的所有請求,直到用戶主動斷開連接或網絡出現中斷。在連接處於空閒時,後台進程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 進程的嚴重排隊,造成性能的嚴重下降,給你看一個極端的例子,以前的同事公司的。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved