oracle 各模塊詳解


1.oracle 工作模式

MTS模式:MTS(Multi-Threaded Server)。一個Dispatch進程專門處理處理Client Connection Request,進行排隊,由后台多個Shared Server並行處理排隊的請求。

  可見:MTS模式下,進程和會話是一對多的關系

  優點:在以不用增大物理內存的前提下支持更多的並發的連接。換句話說,如果你只有2G的物理內存,而你又想支持2000個連接,在獲取最好性能的前提下,你就應該使用MTS模式

  缺點:如果存在某個Client Request請求處理耗時過長,則整體處理效率就會下降。

Dedicated模式:會為每個Client Connection Request分配專門進程進行處理,所以該模式更適應於請求處理時間較長,請求數相對較少情況。

  可見:Dedicate模式又叫專有模式,進程和會話是一對一關系

  優點:1)每個用戶都有一個連接,不至於有的應用占着連接造成別的客戶的請求給掛起了;2)數據庫處理性能較高。

  缺點:1)內存管理上,此種模式隨着用戶連接數的增加而消耗更多的系統CPU與內存。因為隨着連接數的增加,每增加一個連接,就要分配一份PGA,如果增加10000個連接,那就是10000個PGA要提供,內存很容易吃爆掉。而共享連接方式優點在於連接數。

查看v$session視圖

SQL> select username,server,program from v$session where username is not null;

USERNAME     SERVER         PROGRAM
---------   ---------    -------------------
GWM           NONE   

SYS           SHARED         plsqldev.exe

SYS           SHARED         plsqldev.exe --MTS模式

SYS          DEDICATED       sqlplus.exe    --專用模式

 注:以下內容將主要圍繞專有模式進行講解

2.PGA

PGA划分為多個不同的區域,每個區域都有不同的目的。如下所示:

   圖中是專有服務器會話,當然不是所有PGA區域都會在所有案例中存在。

  PGA主要包含兩個部分Private SQL Area和 SQL Work Areas.

SQL Work Areas:包含了sort Area 、Hash Area、Bitmap Merge Area

Private SQL Area:包含了Persistent Area 、Runtime Area

2.1 Private SQL Area

當一個會話執行一個sql語句的時候,這個私有sql area 就會在pga中進行分配了。每個session都會有一個private sql area,如果不同session執行的同一個sql那么會指向同一個shared sql area(在SGA區)。

當一個服務進程執行SQL或PL/SQL代碼,進程使用Private SQL Area來存儲已解析的SQL語句相關的綁定變量、語句執行狀態信息以及語句執行工作區域信息。

如上圖:我們在進行dml以及ddl操作的時候隱含的都是打開cursor,每個游標都作為客戶端一邊指向服務端的一條指針,每個游標打開都會分配相應的private sql area。正因為CURSOR和私有SQL區域這樣的相關性,所以兩個術語經常互用。

注:一個連接,就會建立一個游標,也會創建一個session。

         如上上圖中所訴:

         私有SQL區域分為兩個區域:運行區域(Runtime Area)和持久區域(Persistent Area)。

         運行區域:包含查詢sql語句當前的執行狀態信息。例如,如我在一個全表掃描的時候,這個運行區就跟蹤在檢索的數目進度。當這個執行的dml sql語句結束的時候,該區域就會被釋放了。

         持久區域:包含綁定變量值。在語句執行的時候提供。該區域在CURSOR關閉的時候才釋放。通常,應用程序需要在關閉不再使用的CURSOR,來釋放持久區域,來減少應用程序的內存需求。

         客戶端進程要負責管理私有區域大小。分配和返回私有區域很大程度取決於應用,當然一個客戶端進程能分配的私有區域大小是被初始化參數限制的OPEN_CURSORS。

2.2.SQL Work Area

 SQL工作區域是用於內存密集型操作的從PGA內存分配的。如前面內容所述:

SQL Work Areas:包含了排序區(sort Area) 、哈希區(Hash Area)、位圖區(Bitmap Merge Area)

        排序區:當sql語句涉及排序時,那么從數據庫中查找到的內容,要在排序區排好序后,才會返回給用戶。

        哈希區:當進行多表聯合查詢時,若使用了hash連接,那么此時就需要使用哈希區進行多表合並。

        位圖區:用於位圖合並和位圖創建。

         如果,操作的數據綜合不能一次性放到工作區域,那么ORACLE會把輸入的數據劈成更小的片。當然,多余的會先放到臨時磁盤空間(臨時表空間),后續處理。

         當自動PGA內存管理使能的時候,數據庫自動調整工作區域大小。通常,大的工作區域可能明顯提升操作性能,當然代價是消耗很多的內存。

         最好的是,工作區域大小足夠容納輸入的數據和相關SQL操作需要的輔助內存結構。如果不夠大,輸入的數據將會被放到磁盤上,那么響應時間就會增大。

         在極端CASE下,如果工作區域和輸入的數據相比實在太小,數據庫必須多次將數據分片,大大增加響應時間。

2.3 性能影響

從上面所述,我們可以得知:若sql語句沒有涉及排序等,那么獲取到的數據將直接從database buffer cache中一行一行的直接返回給客戶。若sql語句涉及到排序,那么數據將會前往工作區的sort區進行排序。那么此時工作區的大小將直接影響數據庫的處理能力。所以工作區的大小是我們性能的關注重點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM