Oracle專有(dedicated)連線和共享(shared)連線

tolywang發表於2010-10-24

專有連線 ---   客戶端的使用者程式和伺服器程式一一對應,使用者程式不直接訪問資料庫,而是將請求發給伺服器程式,讓伺服器程式執行具體的命令並返回結果。   這個連線用於專門處理該客戶端的所有請求,直到使用者主動斷開連線或網路出現中斷。在連線處於空閒時,後臺程式PMON會每隔一段時間,測試使用者連線狀況,如果連線已斷開,PMON會清理現場,釋放相關的資源。 專用連線相當於一對一的連線,能夠快速的響應使用者的請求。當然,在連線的時候,首先要建立PGA(Program global area)。因為是專有,所以如果併發非常多,要求的記憶體大小也不少。

在專用連線中,連線所需要的資源全部在PGA中分配。該記憶體區為指定連線私有,其它程式不能訪問。 專用連線採用一對一的連線方式,能很快的響應使用者的請求,但是,如果連線使用者太多時,由於要對每一個連線分配資源,因此,連線數受硬體限制比較大

共享連線 ---     為了克服以上硬體資源的問題,Oracle 提出了共享連線的連線方法,即用一個伺服器的程式響應多個使用者連線,與專用連線有連線時才建立PGA不同,共享連線在例項一啟動,就分配指定數量的伺服器程式,所使用者的連線,以排隊的方式,由分配器指定給伺服器程式,其它的程式排隊等待。只要使用者的請求一執行完,就會馬上斷開連線,分配器會把空閒的伺服器程式分配給其它排除的程式。

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

  在共享連線中,sort_area_size 將在 SGA 的 Large_pool 中分配。

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

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

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

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

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

  共享連線和長事務是背道而馳的,長事務的共享連線會造成shared 程式的嚴重排隊,造成效能的嚴重下降,給你看一個極端的例子,以前的同事公司的。



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

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

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

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

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

相關文章