Oracle 11g DRCP連接方式——基本原理

  學習Oracle是一個復雜、繁瑣的過程。在浩如煙海的Oracle官方資料、新特性、MOS資料和各種Internal知識面前,我們總是覺得力不從心、不知所措。但是,這往往也就是我們不斷堅持、積累和追尋的樂趣。
  在Oracle 11g中,提出了突破傳統專用/共享連接的第三種連接方式——Database Resident Connection Pooling(DRCP)。本篇我們一起來探討這項技術。

1、 從Dedicated Server到Shared Server

  Client Process連接到Server Process的方式,傳統上有兩種方式:Dedicated Server和Shared Server。在Client連入到Oracle Server的過程中,默認是通過監聽器listener監聽器進行Oracle實例服務定位。只有再由監聽器fork出的子進程向Instance請求出一個Server Process與Client Process遠程通信。不同的連接方式,就體現在數據庫實例在接受到Server Process請求后,是怎么樣提供出Server Process進程,以及該進程如何管理的。
Dedicated Server模式也稱為專用連接方式,就是Oracle Instance會專門創建出一個新的Server Process與Client Process進行遠程通信。在整個Client Process請求過程中,Server Process只為該Client提供服務。UGA信息也保存在Server Process的PGA空間中。當會話結束,Client連接中斷,Server Process就失去“存在意義”被清除掉,分配內存回收。Dedicated方式是我們最常使用的數據庫連接方式。在長會話或前端應用使用連接池組件的情況下,Dedicated方式的優勢是很明顯的。
與Dedicated Server模式對應的是Shared Server。在該模式下,Oracle實例會維持兩種Server Process:分發進程(Dispatcher DXXX)和共享進程(SXXX)。
?

SQL> select addr, pid, spid, username, program from v$process where program like '%000%';ADDR            PID SPID         USERNAME        PROGRAM-------- ---------- ------------ --------------- --------------------

6D24BA1C         13 648          SYSTEM          ORACLE.EXE (D000)6D24C00C         14 1736         SYSTEM          ORACLE.EXE (S000)

?

?
當監聽器向數據庫實例提出Server Process分配請求的時候,在Shared Server模式下,監聽器會向分發進程DXXX請求分配Server Process。DXXX會根據當前的空閑Server情況,分配出一個Server Process供使用。當Client使用結束之后,Server Process(SXXX)并不是被釋放,而是重新回到D000管制下。系統也會依據參數設置,維持一個穩定的SXXX數量。

SQL> show parameter shared_servers
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
max_shared_servers                   integer    shared_servers                       integer     1


Shared Server連接模式的出現,是和短會話、高并發的互聯網應用發展相關。每次創建和回收Server Process的成本是很高的。如果應用沒有中間層連接池,而是高并發的創建Server Process并且快速回收,這對于數據庫來說是很高的壓力。
?從現在的應用設計開發看,連接池管理已經滲透入主流應用系統框架,shared server方式實際中應用不是很廣泛。

2、Database Resident Connection Pooling(DRCP)
?
如果我們站在軟件模式的角度看,Shared Server本質上也是想實現一種在數據庫層面上的連接池。這點在Oracle 11g上得到了實現,Oracle駐留連接池(DRCP)就是一個允許在多進程(Multi-Process)和多線程(Multi-Threads)之間共享連接的新特性。
Shared server在一定程度上緩解了Server process IDEL和頻繁創建銷毀Server process的問題。但是,Shared Server沒有解決Session數據共享的問題。當存在client需要長時間持有session,同時其他client沒有大量會話要求的時候,這種模型是有效的。但是,在每次請求會話的時間很短(短會話)和數據庫活動需要多次會話交互的時候,DRCP就是更加理想的連接池模型了。
DRCP新特性主要針對的就是應用程序在訪問數據庫時,出現高并發連接數問題。DRCP連接池將Server和Session信息進行緩存,為多個訪問的應用程序提供連接共享。
?同Shared Server一樣,DRCP前端存在一個代理(Connection Broker),負責應用中間件連接的共享要求,同時負責管理數據庫實例上的連接池連接。當應用中間件想Broker提出連接請求的時候,Broker會從連接池中找出空閑連接。當交互結束后,Server Process被釋放回連接池供重用。
同shared server不同的方面在于。當共享池中連接池被分配出之后,等價于dedicated server方式。

3、三種連接方式的內存使用情況

三種連接方式下,Oracle實例、Server Process和內存使用方式截然不同。

Dedicated Server方式
?
當Client Server請求連接的時候,全新的Server Process和session信息被創建。當連接中斷,Server Process和Session全部被釋放。內存分配是一個連接要分配Server Process和Session的空間。UGA信息是保存在PGA里的。
?
Shared Server方式

當接收到Client Server的請求之后,Dispatcher會將請求放置在一個common隊列中。可用的Server Process就從隊列中獲取請求信息。當終止會話之后,對應的會話信息就被釋放掉。Session信息是從SGA中分配出。

?DRCP方式

當Client Server請求之后,Connection Broker從連接池中尋找一個空閑Pooled Server提供給Client Server。如果沒有空閑的,Connection Broker就會創建出一個新的連接。如果當前連接池已經達到最大數量限制,就將請求放置在等待隊列中,等待空閑Server。
當釋放Pooled Server回到Connection Pool的時候,相應的數據庫資源被釋放掉。DRCP的內存要求與存儲池大小和會話有關。每個Pooled Server有一個Session信息,且存儲在PGA中。
?
下面一個分配實例,來說明情況:
?
場景:一個應用程序,其每個session需要400k的空間。每個Server process對應4M空間。連接池大小為100,共享shared Server大小數據量也是100。如果有5000個連接數。

在Dedicated Server模式下:
Memory Usage=5000*(0.4M+4M)=22GB;

在Shared Server模式下:
?Memory Usage=5000×0.4M+4M×100=2.5GB;注意,其中Session信息的2G是從SGA中分配的。
?
在DRCP模式下:
Memory Usage=100×(4M+0.4M)+5000×35K=615MB。注意:35K為維護會話信息使用的內存大小。
?

4、結論

DRCP模式在傳統的shared server基礎上,為前端應用提供更加成熟的數據連接池解決方案。從目前的資料看,DRCP對OCI、PHP等多種驅動提供了支持。注意:對JDBC Thin和JDBC OCI的支持還不存在。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280522.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

django項目開發1:搭建虛擬環境

需求 不同項目依賴不同模塊版本,不能共用一套環境,虛擬環境。在系統的python環境安裝 安裝 pip3 install virtualenv pip3 install virtualenvwrapper-win環境變量 # 配置環境變量: # 控制面板 > 系統和安全 > 系統 > 高級系統設…

IPC之——消息隊列

消息隊列作用&#xff1a; 可以用于兩個沒有聯系的進程間通信&#xff0c;創建一個消息隊列類似于打開了一個文件&#xff0c;兩個不同的進程都可以進行操作 消息隊列之函數介紹&#xff1a; 頭文件&#xff1a;<sys/type.h> <sys/ipc.h> <sys/msg.h> 1.msgg…

【招聘(上海)】To B數字化營銷公司-市場易,直招.NET后端研發工程師

【招聘背景】公司&#xff1a;上海光潾網絡科技有限公司成立于2016年&#xff0c;系上海市高新技術企業&#xff0c;2021年獲數千萬A輪融資項目&#xff1a;公司自主研發營銷自動化SaaS平臺- 市場易 (Custouch) &#xff0c;通過數字手段為B2B營銷賦能&#xff0c;現服務100多家…

div 包裹_如何查看到達之前收到的包裹和郵件

div 包裹The United States Postal Service, UPS, and FedEx all offer online dashboards where you can see exactly what packages (and letters, in the case of the US Postal Service) are scheduled to arrive at your address. They’ll even email and send you text …

py文件的運行

安裝過程及配置 安裝過程準備&#xff1a; 下載好Python的安裝程序后&#xff0c;開始安裝&#xff0c;在進入安裝界面后一定確保勾選將Python加入到系統環境變量的路徑里。如圖所示&#xff1a; 2如果沒有選取&#xff0c;那么按照下面的步驟進行操作。在桌面上用鼠標右鍵點擊…

加州大學信息科學院長:數據科學課程不只是工程師才修的

一般在考慮圍繞數據科學的基礎教育時&#xff0c;傳統上的重點仍停留在計算和工程等硬性技能上。不過&#xff0c;在周四于紐約市召開的GigaOm結構數據&#xff08;Structure Data&#xff09;會議上&#xff0c;美國加州大學伯克利分校信息科學院長AnnaLee Saxenian教授表示&a…

查看安裝軟件/Select-object/Where-Object xxx -like

查看已安裝軟件 1.通過注冊列表查看 $Path(HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\WOW6432…

網絡編程基礎(一)

一.楔子 你現在已經學會了寫python代碼&#xff0c;假如你寫了兩個python文件a.py和b.py&#xff0c;分別去運行&#xff0c;你就會發現&#xff0c;這兩個python的文件分別運行的很好。但是如果這兩個程序之間想要傳遞一個數據&#xff0c;你要怎么做呢&#xff1f; 這個問題以…

dotnet-exec 讓 C# 程序更簡單

dotnet-exec 讓 C# 程序更簡單Introdotnet-exec是一個可以執行 C# 程序而不需要項目文件的命令行工具&#xff0c;并且你可以指定自定義的入口方法不僅僅是Main方法在 python/NodeJs 里&#xff0c;可以使用python xx.py/node xx.js來運行代碼&#xff0c;在 C# 中一般是需要項…

office數據集dslr_如何將照片從DSLR無線傳輸到智能手機

office數據集dslrYou’ve got a great digital camera. You’ve got all your social media apps on your phone. Wouldn’t it be nice if you could snap a beautiful shot with your DSLR and shuttle it right over to your phone to throw up on Facebook or Instagram? …

文件管理、命令別名和glob

一、復制命令:cp src dest1.如果scr是文件a.如果dest不存在&#xff0c;則新建dest并將src的內容填充到dest里b.如果dest存在&#xff0c;則會用src里的內容覆蓋dest里的內容&#xff0c;即覆蓋dest2.如果src是目錄a.如果dest不存在&#xff0c;則新建dest,然后把src下的內容復…

大數據匯聚全球精英

投資10億美元&#xff0c;選址貴安新區&#xff0c;建設iCloud服務的中國主數據中心。7月12日蘋果公司的這一舉動再次將全球目光聚集在貴州。 “貴州有令人矚目的增長&#xff0c;是中國新數據中心領域最具發展潛力的地點之一。”蘋果公司環境、政策和社會事務副總裁麗薩杰克遜…

django版本區別/與版本匹配

一、區別 路由層 1.django 1.x路由層使用url方法 django 2.x和3.x版本使用path方法 url() 第一個參數支持正則 path()第一個參數是不支持正則的 可以使用 re_path替代url() from django.urls import re_path # django2.0中的re_path #不建議導入url,不能區分版本 #from djang…

復制

ab,像這樣的復制&#xff0c;本質上a與b引用的是同一對象&#xff0c;當a改變時相應的b也會做出同樣的改變&#xff1b; 對于列表和字典這樣的容器對象分為&#xff1a;淺層復制blist(a)和深層復制bcopy.deepcopy(a) 淺層復制對對象共有的元素進行改變時同時改變&#xff1b; 深…

天坑,這樣一個lambda隨機取數據也有Bug

前幾天&#xff0c;一位網友跟我說他編寫的一段很簡單的代碼遇到了奇怪的Bug&#xff0c;他要達到的效果是從一個List中隨機取出來一條數據&#xff0c;代碼如下&#xff1a;var random new Random(); var users Enumerable.Range(0, 10).Select(p > new User(p, "A&…

中興面試一個星期沒有回音_如何在沒有回聲的情況下從亞馬遜獲取即時時尚建議...

中興面試一個星期沒有回音The Echo Look is a new device from Amazon that’s able to take a look at your outfits and tell you which one looks the best on you. However, you actually don’t need the Echo Look to get this kind of instant fashion advice from Amaz…

table分頁的簡單實現邏輯

為什么80%的碼農都做不了架構師&#xff1f;>>> //table分頁函數showPageNum: function(pageNum, allPageNum) { //pageNum點擊第幾頁&#xff0c;allPageNum總頁數$(".c_page .c_page_list").children().remove();for(var i1;i<allPageNum;i){var p…

django22:復制網頁與css/時區設置

復制網頁 1.復制文章 右擊——檢測——選中——復制——copy outerhtml (整體html) 2.復制點贊點踩 a.復制html b.css也要復制 如果是模板&#xff0c;在html head內 {% block css %}{% endblock %} 網頁 {% block css %}<style>#div_digg {float: right;margin-…

Cocos Creator Ui系統

為什么80%的碼農都做不了架構師&#xff1f;>>> 游戲場景&#xff1a;開發時組織游戲內容的中心&#xff1b;其中渲染根節點Canvas&#xff0c;包括屬性 Design Resolution&#xff08;設計分辨率&#xff09; fit width,fit height 設計分辨率是內容生產者在制作場…

關于spring boot多張表建立外健的討論

現在有四張表&#xff1a;student(學生表)、blogs(博客表)、comment(評論表)、reply(回復表) 現在說一下這四張表&#xff1a; student(學生表)&#xff1a;學生的信息記錄表 blogs(博客表)&#xff1a;學生發表的博客表 comment(評論表)&#xff1a;學生評論博客文章的表 repl…