1. 程式人生 > 其它 >SAP系統優化 之 SAP記憶體管理

SAP系統優化 之 SAP記憶體管理

引子:

之前有很多Developer’s Guide To protecting Memory。現在硬體記憶體都很大了,不知道現在的開發人員是否還考慮記憶體分配。

下面我們從系統管理員的角度談談SAP記憶體管理。

 我們系統管理員偶爾會發現Dialog程序進入了PRIV模式,那麼如何避免程序進入到PRIV模式呢?這就需要從SAP記憶體管理談起。

PRIV緣由:

在SAP標準課程ADM315中,對SAP記憶體分配以及如何避免進入到PRIV模式有著詳細的介紹。

DIA程序是先用Roll mem, 再 Extended mem 然後再是Heap mem, 一但DIA用到了Heap 就會出現PRIV的現象。

 

上圖是SAP的記憶體區域,主要分為共享記憶體和本地記憶體兩部分。本地記憶體是給每個SAP工作處理程序而生成的,這部分記憶體包括SAP指標快取;傳輸資料到資料庫或者從資料庫中傳輸資料的I/O快取區。共享記憶體部分對所有的工作程序都是透明的,都可以被讀取。一臺物理伺服器上可以有多個SAP例項,一個例項只能讀取自己例項的共享記憶體,而不能讀取其他例項的共享物件。

SAP虛擬記憶體是什麼?

這裡的虛擬記憶體是指操系統上所有可用的記憶體,一般是實際實體記憶體與交換分割槽的總和。

1。在共享記憶體中,SAP Buffer存放著所有使用者以及工作程序的全域性物件,例如程式,被快取表的內容(在SAP系統管理中,可以對一些資料庫表在應用伺服器層面進行快取)。這些快取還包括PXA快取,Nametab快取,日曆。

PXA是指ABAP程式快取(SAP 程式也是放到資料庫中的),命中率要在95%以上。

NameTab快取指的是ABAP 資料字典快取,包含了表DDNTT(表定義)以及DDNTF(欄位定義)中的資料,NTAB的資料存放於四個快取塊中。

分別是:

TTAB:由引數rsdb/ntabe/entrycount決定其大小

FTAB:由引數rsdb/ntab/ftabsize決定其大小

IRBD:由引數rsdb/ntab/irdb決定其大小

SNTAB:由引數rsdb/ntab/sntabsize決定其大小

NTAB的命中率應該要在95%以上,低於這個指標,一定要找到原因,否則影響效能。

2。卷記憶體(Roll Buffer)包含了使用者上下文的初始部分,例如使用者的基本資訊,以及使用者主記錄中的一些預設值。下圖說明了Roll buffer的作用

3。擴充套件記憶體

主要存放使用者的背景資訊 從3.0版本開始,使用者的背景資訊大部分存放於此。因為這部分記憶體是Shared Memory,因此,所有的SAP工作程序可以直接編輯所儲存的使用者背景資訊。因此,在Roll-in過程中不是整個使用者資訊都被複制到工作程序的本地記憶體中(可以參考Roll buffer的圖),而只是複製指明在SAP擴充套件記憶體中使用者背景資訊位於何處的地址(也就是指標拉)。通過使用擴充套件記憶體可以最大的減少Roll-in和Roll-out中複製的資料量,使得卷處理總體上更快。SAP擴充套件記憶體是作為共享記憶體來分配的:

1)當SAP 例項啟動的時候,所分配的SAP擴充套件記憶體的大小由引數em/initial_size_MB 定義

2)擴充套件記憶體在內部被分為塊大小使用,引數em/blocksize_KB 預設是1024KB,建議不要改,除非有notes指出

3)ztta/roll_extension定義了在SAP擴充套件記憶體中一個使用者背景資訊的最大值。這個用來防止單個使用者用一個高記憶體集中的交易而耗光整個擴充套件記憶體,而不給其他使用者留下可用空間。

4。頁面快取 不要跟我們所說的作業系統級的頁面交換搞混。它專門存放了呼叫專門ABAP命令得到的物件,如extract 資料抽取,與上下文相對獨立的物件,。但它確實會跟作業系統進行交換,這也是為啥它叫頁面快取的原因了。

5。堆記憶體(heap Memory)與擴充套件記憶體存放的東西相同。只有在擴充套件記憶體被耗盡的時候,這部分記憶體才會啟用。所以,它是按需要進行分配和釋放的。也就是說它不是SAP系統啟動時候就預先分配好的,只有當擴充套件記憶體被耗光並且仍然需要記憶體的時候,heap memory才會被分配。