PGA與SGA的區別,PGA的功能介紹

2021-06-19 17:41:20 字數 3021 閱讀 1310

一、pga與sga的區別。

pga(程式快取區)與sga(系統全域性區)類似,都是oracle資料庫系統為會話在伺服器記憶體中分配的區域。不過兩者的作用不同,共享程度也不同。sga系統全域性區顧名思義,是對系統內的所有程序都是共享的。當多個使用者同時連線到乙個例程時,所有的使用者程序、服務程序都可以共享使用這個sga區。為此這個sga的主要用途就是為不同使用者之間的程序與服務程序提供乙個交流的平台。除了這個作用,另外有乙個重要的作用就是各種資料庫的操作主要就是在這個sga區內完成。

而pga程式緩衝區則主要是為了某個使用者程序所服務的。這個記憶體區不是共享的,只有這個使用者的服務程序本身才能夠訪問它自己的pga區。做個形象的比喻,sga就好像是作業系統上的乙個共享資料夾,不同使用者可以以此為平台進行資料方面的交流。而pga就好像是作業系統上的乙個私有資料夾,只有這個資料夾的所有者才能夠進行訪問,其他使用者都不能夠訪問。雖然程式快取區不像其他使用者的程序開放,但是這個記憶體區仍然肩負著一些重要的使命,如資料排序、許可權控制等等都離不開這個記憶體區。

二、 為排序設定合理的排序區大小(sort area)。

當使用者需要對某些資料進行排序時,資料庫是如何處理的呢?首先,資料庫系統會將需要排序的資料儲存到pga程式快取區中的乙個排序區內。然後再在這個排序區內對這些資料進行排序。如需要排序的資料有2m,那麼排序區內必須至少要有2m的空間來容納這些資料。然後排序過程中又需要有2m的空間來儲存排序後的資料。由於系統從記憶體中讀取資料比從硬碟中讀取資料的速度要快幾千倍,為此如果這個資料排序與讀取的操作都能夠在記憶體中完成,無疑可以在很大程度上提高資料庫排序與訪問的效能。如果這個排序的操作都能夠在記憶體中完成,顯然這是很理想的。但是如果pga區中的排序區容量不夠,不能夠容納排序後的資料,那會如何呢?此時,系統會從硬碟中獲取乙個空間,用來儲存這需要排序的資料。此時排序的效率就會降低許多。為此在資料庫管理中,如果發現使用者的很多操作都需要用到排序,那麼使用者會設定比較大的排序區,可以提高使用者訪問資料的效率。

在oracle資料庫中,這個排序區主要用來存放排序操作產生的臨時資料。一般來說,這個排序區的大小佔據這pga程式快取取的大部分空間,這是影響pga區大小的主要因素。在小型應用中,資料庫管理員可以直接採用其預設的值。但是在一些大型的應用中,或者需要進行大量記錄排序操作的資料庫系統中,管理員可能需要手工調整這個排序區的大小,以提高排序的效能。如果系統管理員需要調整這個排序區大小的話,需要通過初始化引數sort_area_size來實現。為了提高資料訪問與排序的效能,資料庫系統利用記憶體比硬碟要快幾千倍的實施,會將準備排序的資料臨時存放到這個排序區,並在排序區內完成資料的排序。管理員需要牢記這個原則,並在適當的情況下調整排序區的大小,以提高資料訪問與資料排序的效能。

三、 會話區儲存著使用者的許可權等重要資訊(user sesson data)。

在程式快取區內還包含著乙個會話區。雖然絕大部分情況下,管理員不要維護這個會話區,可以讓資料庫系統進行維護。但是,管理員還是需要了解一下這個會話區的作用。因為這個會話區直接關係著資料庫系統中資料的安全性。資料庫系統不僅是存放資料的乙個很好的載體,而且在還提供了乙個統一管理資料的平台,可以根據實際需要,為不同的使用者設定不同的訪問許可權。簡單的說,在資料庫中可以控制使用者可以訪問哪些資料。從而提高資料的安全性。

當使用者程序與資料庫建立會話時,系統會將這個使用者的相關許可權查詢出來,然後儲存在這個會話區內。如此的話,使用者程序在訪問資料時,系統就會核對會話區內的使用者許可權資訊,看看其是否具有相關的訪問許可權。由於系統將這個使用者的許可權資訊存放在記憶體上,所以其核對使用者許可權的速度非常的快。因為系統不用再去硬碟中讀取資料,直接從記憶體中讀取。而從記憶體讀取資料的效率要比硬碟上快幾千倍。

通常情況下,這個會話區內儲存了會話所具有的許可權、角色、效能統計等資訊。這個會話區一般都是由資料庫進行自我維護的,系統管理員不用干預。

四、 堆疊區儲存變數資訊(stack space)。

有時候為了提高sql語句的重用性,會在語句中使用繫結變數。簡單的說,就是sql語句可以接受使用者傳入的變數。從而使用者只需要輸入不同的變數值,就可以滿足不同的查詢需求。如現在使用者需要查詢所有員工的資訊。然後其又要查詢所有工齡在3年以上的員工等等。此時其實他們採用的是同乙個sql語句,只是傳遞給系統的變數不同而已。這可以在很大程度上降低資料庫開發的工作量。這個變數在oracle資料庫系統中就叫做繫結變數。利用繫結變數可以加強與使用者的互動性。另外在這個堆疊區內還儲存著會話變數、sql語句執行時的記憶體結構等重要的資訊。

通常情況下,這個堆疊區跟上面講到的會話區一樣,都可以讓資料庫系統進行自我維護,而管理員不用參與到其中。這些分割槽的大小,也是系統根據實際情況來進行自動分配的。當這個使用者會話結束時,系統會自動釋放這些區所占用的空間。

五、 游標區 (cursor state)。

無論是sqlserver資料庫還是oracle資料庫中,有時候都需要用到游標技術。當執行使用游標的語句時,oracle資料庫系統會在程式快取區中間為其分配一塊區域。這塊區域就叫做游標區。通常情況下,游標用來完成一些比較特殊的功能。而且一般來說,採用游標的語句要比其他語句的執行效率低一點。為此管理員在使用游標的時候,還是需要慎重。

游標區是乙個動態的區域。當使用者執行游標語句時,系統就會在這個游標區內置立乙個區域。當關閉游標時,這個區域就會被釋放。這建立與釋放,需要占用一定的系統資源,花費一定的時間。為此在使用游標時,如果頻繁的開啟和關閉游標,就會降低語句的執行效能。所以筆者建議,在寫語句時,如果真的有必要使用游標技術時,則要注意游標不要頻繁的開啟和關閉。

另外在oracle資料庫中,還可以通過限制游標的數量來提高資料庫的效能。如在資料庫系統中有乙個初始化引數open_cursors。管理員可以根據實際的需要,來設定這個引數,控制使用者能夠同時開啟游標的數目。不過需要注意的是,在確實需要才有游標的情況下,如果硬體資源能夠支援的話,那麼就需要放寬這個限制。這可以避免使用者程序頻繁的開啟和關閉游標。因為頻繁的開啟和關閉游標這對游標的操作是不利的,會影響資料庫的效能。

從以上的分析中可以看出,程式全域性區(pga)主要包含排序區、會話區、堆疊區和游標區四個部分的內容,他們各司其職,完成使用者程序與資料庫之間的會話。通常情況下,系統管理員主要關注的是排序區,在必要時需要手工調整這個排序區的大小。另外需要主要的是,游標區是乙個動態的區域,在游標開啟時建立,關閉時釋放。故在資料庫開發時,不要頻繁的開啟和關閉游標可以提高游標操作的效率,改善資料庫的效能。其他分割槽的內容管理員只需要了解其用途,日常的維護交給資料庫系統來完成即可。

PGA與SGA的區別,PGA的功能介紹

這個使用者會話終止時,資料庫系統會自動釋放這個pag區所占用的記憶體。這個pga區對於資料庫的效能有比較大的影響,特別是對於排序操作的 效能。所以,在必要的時候合理管理pga區,能夠在很大程度上提高資料庫的效能。一 pga與sga的區別。pga 程式快取區 與sga 系統全域性區 類似,都是orac...

Oracle10g之SGA與PGA分配建議

關於sga pga與系統記憶體三者間的關聯,目前有乙個相對通用的計算規則可供參考 對於oltp資料庫,sga 系統記憶體 70 80 pga sga 10 20 sga 系統記憶體 0.56 pga 系統記憶體 0.05 0.1 對於olap資料庫,sga 系統記憶體 80 60 pga sga 4...

與 的區別? 與 的區別?

相同點 和 都是表示與的邏輯運算子,其運算結果一致 不同點 邏輯與 當兩邊的表示式都為true的時候,整個運算結果才為true,否則為false。短路與 當第乙個表示式的值為false的時候,則不再計算第二個表示式 注意 還可以做位運算子,當表示式不是boolean型別的時候 例項1 public ...