物理メモリとは、ホストにインストールされた DRAM メモリです。ほとんどの SAP HANA ホストにおいて、その容量は 256 ギガバイト (GB) から 4 テラバイト (TB) の範囲となります。インメモリデータベースの 1 つである SAP HANA にとって、この重要なリソースの消費量を慎重に管理しトラッキングすることが重要です。したがって、すべての SAP HANA サーバにはメモリマネージャが付属しています。これにより、独自のメモリプールを設定可能な割当限度まで事前割当して管理することができます。このプールは、テーブルの保存、スレッドのスタックのほか、一時的な計算、中間結果、その他のデータ構造のために使用されます。プールに加えて、SAP HANA プロセスの (排他および共有) プログラムコードおよびスタックにメインメモリが使用されます。
Linux オペレーティングシステムの観点から見ると、SAP HANA は個別のプロセスの集合です。Linux プログラムは、使用するメモリを Linux オペレーティングシステムから要求して予約します。プログラムの予約済メモリフットプリント全体は、仮想メモリと呼ばれます。各 Linux プロセスには独自の仮想メモリがあります。このプロセスがオペレーティングシステムからより多くのメモリを要求すると仮想メモリは大きくなり、プロセスが未使用のメモリを解放すると仮想メモリは縮小します。SAP HANA では、仮想メモリのうち、コード、スタック、テーブル、中間結果のために現在使用されている部分を示すのに、使用メモリという用語が使用されます。SAP HANA のすべてのプロセスを全体的に表すため、図 "SAP HANA メモリプール: 使用メモリと仮想メモリ" で、SAP HANA の仮想メモリと使用メモリを示します。

インメモリデータベースの 1 つである SAP HANA にとって、そのメモリ消費量を慎重に管理しトラッキングすることは非常に重要です。このため、SAP HANA データベースは、自らのデータのメモリプールを事前に割り当て、管理を行います。このメモリプールは、インメモリテーブルの保存、スレッドのスタック、一時的な計算、中間結果、その他のデータ構造のために使用されます。したがって、SAP HANA が使用するメモリには、SAP HANA のプログラムコード (排他的および共有)、プログラムスタック、およびすべてのデータテーブル (ローとカラム) と、システムテーブルと、登録済テーブルとを含むメモリプールが含まれます。
プールの一部は、常に一時的な計算に使用されます。使用中のメモリの総容量のことを、使用メモリと呼びます。これは、SAP HANA データベースが使用するメモリの量を示すもっとも正確なインジケータです。
仮想メモリ、物理メモリ、常駐メモリ
Linux によって、ホストの物理メモリに対する仮想メモリのマッピングが管理されます。物理メモリの中で仮想メモリの部分は、常駐メモリと呼ばれます。常駐メモリとは、あるプロセスによって使用されている物理メモリのことです。
時間の経過とともに、オペレーティングシステムによって、LRU (最低使用頻度) アルゴリズムに従ってプロセスの常駐メモリの一部が "入れ替え" られ、他のコードやデータ用の領域が確保されます。したがって、プロセスの常駐メモリサイズは、仮想メモリサイズに関係なく変動する可能性があります。適正なサイズの SAP HANA アプライアンスには十分な物理メモリがあるため、入替が無効化されており、実行は不要です。
テーブル拡大や一時的な計算のためにメモリが必要になった際には、SAP HANA が既存のメモリプールからメモリを取得します。プールで要求に対応できない場合、SAP HANA メモリマネージャは、オペレーティングシステムからより多くのメモリを要求して予約します。結果として、HANA プロセスの仮想メモリサイズは増加します。一時的な計算が完了したり、テーブルが削除されたりすると、解放されたメモリはメモリマネージャに返され、Linux に通知されることなくプールに再利用されます。つまり、SAP HANA の観点からすると使用メモリは縮小していますが、プロセスの仮想サイズと常駐サイズに影響はありません。これにより、使用メモリが SAP HANA の常駐メモリのサイズを下回るという状況が起こりますが、これはまったく正常な状態です。

一般的な SAP HANA アプライアンスでは、通常、OS の常駐部分およびその他すべての実行中プロセスが 2 GB を超えることはありません。残りの物理メモリは、SAP HANA の使用に利用できます。
メモリ消費
図 "メモリ消費" は、ホストの物理メモリ、Linux の仮想メモリと常駐メモリ、および SAP HANA のメモリプールと使用メモリインジケータの関係を示しています。使用メモリの変更が、プロセスの仮想サイズおよび常駐サイズに影響を与えないことに注意してください。
SAP HANA データベースでは、複数のプロセスにわたって、実際の使用の前にメモリのプールを予約します。この割当メモリのプールは、事前に定義されたグローバル割当限度まで、時間の経過とともにオペレーティングシステムから事前に割り当てられます。その後、SAP HANA データベースコードによって必要に応じて効率的に使用されます。

Linux メモリインジケータ
オペレーティングシステムは SAP HANA をプロセスの集合として扱うため、これらのプロセスの仮想部分と常駐部分の両方を考慮する必要があります。プロセスの仮想メモリサイズは、常駐サイズよりも常に大きくなります。また、管理対象のメモリプールにより、SAP HANA 仮想サイズと常駐サイズの両方が、想定される使用メモリ区分よりも大きく表示される場合があることにも注意してください。これはまったく正常な状態です。
Linux は、仮想および常駐プロセスサイズの最高水準点 (ピーク) 区分を維持しています。安定したシステムでは、現在の仮想サイズおよび常駐サイズは、それぞれの最高水準点よりもわずかに小さくなります。これは、SAP HANA ではプールが増加しても、通常は未使用メモリが解放されないためです。したがって、常駐サイズの最高水準点は、通常、ピーク時使用メモリをトラッキングする必要があります。非常に大きな差異がある場合は、物理メモリが不足しているために、SAP HANA メモリプールの一部が解放されたことを示している可能性があります。
SAP HANA コックピットでのメモリ消費の監視
SAP HANA コックピットで Used Memory カードを選択すると、Performance Monitor アプリが開き、使用メモリ、データベース使用メモリ、割当限度、負荷グラフなどのホストおよびサービス固有のメモリ KPI が表示されます。負荷グラフでは、最初に、コーディネータホストとコーディネータインデックスサーバにおけるメモリ使用が視覚化されます。これは、必要に応じてカスタマイズできます。


