SAP HANA コックピットを使用した監視

SAP HANA パーシスタンスストレージのチェック

Objective

After completing this lesson, you will be able to SAP HANA パーシスタンスストレージをチェックします。

パーシスタンス

図 "SAP HANA パーシスタンスレイヤ" は、パーシスタンスレイヤのアーキテクチャを簡略化して示しています。分離と一貫性の制御はインメモリストアとトランザクションマネージャによってすでに提供されていますが、パーシスタンスレイヤによって、変更が永続的であることと、再起動後にデータベースを最後にコミットされた状態に復元できることを保証します。

パーシスタンスレイヤは、ページ単位で整理された永続ディスクボリュームにデータを保存します。4K から 16M のさまざまなページサイズがサポートされています。データはディスクからロードされ、ページ単位でディスクに保存されます。読込アクセスと書込アクセスの場合は、ページはメモリ内のページバッファにロードされます。ページバッファには特定の最小サイズも最大サイズもありません。代わりに、他の用途に使用されていないすべての空きメモリをページバッファに使用することができます。メモリが別の場所で必要な場合は、LRU (最低使用頻度) ページがキャッシュから削除されます。変更されたページを削除対象として選択した場合、そのページを最初にディスクに保持する必要があります。ページとページバッファはパーシスタンスレイヤによって管理されますが、インメモリストアはロードされたページ内のデータにアクセスできます。

この図は、データストレージ、キャッシュ、バッファリング、および永続データ管理のためのメモリ階層コンポーネントを示しています。

カラムストアパーシスタンス

カラムストアでは、通常のカラムのデータが、連続したメモリ配列に保存されます。このメモリ配列のサイズは、何ギガバイトにも及ぶことがあります。一方、パーシスタンスレイヤでは、よりサイズの小さなページ単位でメモリが管理されます。カラムがメモリにロードされると、データは最初にパーシスタンスレイヤのページバッファにロードされてから、カラム全体を含む連続したメモリ領域にコピーされます。メモリの重複消費を防ぐため、パーシスタンスレイヤでは、コンテンツがカラムストアメモリにコピーされるとすぐに各ページが解放されます。

インメモリテーブルがロードされ、データがパーシスタンスレイヤに書き込まれると、カラムストアとパーシスタンスレイヤ間でデータがコピーされます。

カラムテーブルに対する書込操作は、インメモリカラムデータ構造で実行されます。さらに、REDO ログエントリが書き込まれ、基盤となるページは "ダーティ" とマークされます。後でページをフラッシュする必要があるときに、データはインメモリカラムからデルタページに書き込まれます。

ローストアパーシスタンス

ローストアメモリは、64 MB 単位のセグメントからなる 16,000 ページに編成されます。パーシスタンスレイヤのページバッファとローストアメモリの間のコピーを回避するために、パーシスタンスレイヤには、ローストアページの登録およびアクセスのための特別なインタフェースが用意されています。ローストアページはパーシスタンスレイヤによって登録されますが、メモリの実際の割当はローストアに委任されます。ローストアページマネージャにより、メモリがローストア永続セグメントに割り当てられます。このコンセプトでは、同じメモリがローストアページとしてローストアによって管理されます。また、ページバッファ内のページとしてパーシスタンスレイヤによっても管理されます。同時実行性制御などの要素は、ローストアによって処理されます。シャドウページングや I/O などその他の側面は、パーシスタンスレイヤによって管理されます。この設計では、ローストアデータは、ローストア永続メモリセグメントに直接ロードされます。その際に、ページをコピーする必要はありません。

ディスクストレージ

電源障害の際に再起動できるようにするため、また恒久的な永続性のために、ディスクストレージが必要となります。SAP HANA パーシスタンスレイヤでは、ページ単位で整理された永続ディスクボリュームにデータが保存されます。これは、以下のようにログとデータ領域に分かれています。

  • 挿入、削除、更新といったデータ変更は、ディスクのログ領域にただちに保存されます (同期的)。これはトランザクションに永続性を持たせるために必要です。データ全体を保持する必要はありませんが、トランザクションログは、クラッシュやデータベースの再起動の後に変更を再現するために利用できます。

  • カスタマイズ可能な間隔 (標準: 5 分ごと) で、新しいセーブポイントが登録されます。つまり、変更されたすべてのページがパーシスタンスのデータ領域でリフレッシュされます。

ディスクアクセスがパフォーマンスのボトルネックになり得るかどうかは、その用途によります。変更はデータボリュームに非同期的に書き込まれるので、ユーザやアプリケーションは書込を待つ必要がありません。すでにメインメモリに存在するデータを読み込む場合、永続ストレージにアクセスする必要はありません。しかし、変更をデータに適用する場合、その変更がログ領域に保持されるまでトランザクションは正常にコミットされません。

パフォーマンスを最適化するために、ログ領域には高速ストレージが使用されます。たとえば、ソリッドステートドライブ (SSD) または Fusion-io ドライブが使用されます (製品出荷マトリクスの認定ハードウェア構成を参照)。

REDO ログ

REDO ログエントリは、書込トランザクションが完了する前に保持されます。これらは、別個のログボリュームに保持され、通常のデータはデータボリュームに保持されます。対応するデータページが保持されていなくても、REDO ログエントリを使用することで、コミットされた変更を復元することができます。

SAP HANA データベースシステムによって書き込まれた REDO ログエントリは、ログ先行書込エントリです。つまり、実際のデータが書き込まれる前にエントリが書き込まれます。REDO ログの管理は、ロガーコンポーネントのタスクです。他のコンポーネントによるログエントリの登録を可能にし、バッファされた REDO ログエントリのディスクへのフラッシュを要求できるようにするためのインタフェースが提供されます。

クラッシュ後にデータベースを再起動する場合は、永続ログエントリを処理する必要があります。この処理を高速化するために、セーブポイントが定期的に書き込まれます。セーブポイント操作中に、直近のセーブポイント以降にメモリ内で行われたすべての変更がディスクに確実に保持されます。したがって、システムの起動時には、直近のセーブポイントの後に登録された REDO ログエントリのみを処理する必要があります。ログバックアップ後は、セーブポイント位置より前の古いログエントリを削除することができます。

UNDO 情報

SAP HANA は、コミットされた変更を保持するだけでなく、コミットされていない変更を保持することもできます。セーブポイントでは、変更がコミットされているかどうかに関係なく、変更されたローストアページの最新バージョンがディスクに書き込まれます。同じことが、カラムテーブルのデルタストレージの新規行にも当てはまります。変更は、対応するページがフラッシュされるときに保持されます。これは、この変更がコミットされたかどうかに関係なく行われます。

起動時に、コミットされていないこれらの変更をロールバックする必要があります。このために、UNDO 情報も保持する必要があります。REDO ログエントリとは異なり、UNDO 情報はログボリュームには書き込まれません。代わりに、システムの再起動後に変更をロールバックするために、シャドウページのコンセプトと UNDO 情報という 2 つのメカニズムが一緒に使用されます。この UNDO 情報はデータボリュームに保持されます。

データボリュームへのデータ保存: 詳細

この図は、ファイルシステムでのデータボリュームの増加を示しており、スーパーブロックと論理ボリューム管理の使用が強調表示されています。

最近の多くのデータベース管理システムと同様に、SAP HANA でもホストオペレーティングシステムのファイル抽象化レイヤを使用できます。

各データボリュームには 1 つのファイルが含まれており、そのファイルはデータが 4 KB から 16 MB のサイズ (ページサイズクラス) の複数のページにより構成されています。データは、データボリュームにページ単位で書き込まれ、データボリュームからページ単位で読み込まれます。時間の経過とともに、ページは登録、変更、上書き、および削除されます。データファイルのサイズは、より多くのスペースが必要になるのに応じて自動的に増加します。しかし、必要な領域が少なくなっても、そのサイズは自動的には減少しません。つまり、ある時点におけるデータボリュームの実際のペイロード (その時点で使用中のページの累積サイズ) は、その合計サイズよりも少ない場合があります。

これは必ずしも重要なことではありません。このことが意味するのは、単純に、ある時点におけるファイルのデータ量が、過去の別の時点 (たとえば、大きいデータのロード後) におけるデータ量より少ないということです。データボリュームにかなりの空き容量がある場合、データボリュームの縮小を検討すべきかもしれません。ただし、通常のペイロードに対してデータファイルが非常に大きい場合、データベースにより重大な問題があることを示している場合があります。SAP サポートは、この状況について分析するために役立ちます。

ディスクボリュームの監視

データおよびログストレージのディレクトリ階層

インストールプロセス時に、データボリュームおよびログボリュームの保管場所として以下のデフォルトディレクトリが登録されます。

  • /usr/sap/<SID>/SYS/global/hdb/data
  • /usr/sap/<SID>/SYS/global/hdb/log

注記

これらのデフォルトディレクトリは、global.ini ファイルの persistence セクションで、パラメータ basepath_datavolumes および basepath_logvolmes で定義されます。

データを保持しているためボリュームが必要なサービスは以下のとおりです。

サービス 
nameserverシステムデータベースの nameserver サービスによりデータが保持されます。
indexserverすべてのテナントデータベースの indexserver サービスによりデータが保持されます。
xsengine (個別のサービスとして実行されている場合)xsengine サービスにより、それを実行しているホスト上のデータが保持されます。

ディスク使用量の監視

SAP HANA コックピットを使用して、ディスク統計をチェックし、データボリュームおよびログボリューム用に十分な領域がディスク上にあることを確認できます。Database Overview ページの Disk Usage カードでは、非 SAP HANA データで使用される領域を含む、すべてのディスクの合計使用量が監視されます。ディスク使用量が最大 (最も重大) であるディスクについては、詳細に表示されます。

この図は、ディスク使用量データおよび監視オプションを示しており、ディスクボリューム管理およびワークロード分析のセクションが強調表示されています。

Disk Volume Monitor には、データボリュームおよびログボリュームに関する詳細が表示されます。Disk Usage カードの … (More) アイコンを選択し、Disk Volume Monitor を選択します。

この図は、棒グラフおよびボリューム詳細テーブルを含む SAP ディスクボリュームモニタを示しています。

Disk Volume Monitor には、データボリュームファイル名に関する情報のほかに、各ファイルのサイズ、およびファイルで現在使用されている容量が、MB 単位とその合計サイズに対する割合 (%) の両方で表示されます。使用サイズは、ファイルのデータ量です。ファイルのサイズはペイロードとともに自動的に増加しますが、縮小は自動ではないため、使用サイズと合計サイズは異なる場合があります。さらに、ログファイル名、合計サイズ (ログファイルの場合は使用サイズと同等)、および状態が表示されます。ファイルがいっぱいになると、利用可能な次のログセグメントファイルにログエントリが書き込まれます。

Disk Volume Monitor で行を選択すると、ディスクボリュームに関する詳細が表示されます。

この図は、SAP データボリュームモニタでディスクボリューム統計および詳細にアクセスして表示する方法を示しています。

I/O 統計およびページ統計に関する情報は、以下のタブに表示されます。

TabInformation
Volume I/O Statistics

ボリュームの集計 I/O 統計が表示されます。

すべてのボリュームの統計収集をリセットするには、Reset Volume I/O Total Statistics を選択します。

Data Volume Page Statisticsデータボリュームのページ (またはブロック) の統計がページサイズクラスに従って分割されて表示されます。スーパーブロックとは、同じページサイズクラスのページを含むデータボリュームのパーティションです。特定のサイズクラスに使用されているスーパーブロックの数と、使用されているページ/ブロックの数を分析することができます。書込率により、不要なスーパーブロックの再編成および解放 (つまり、データボリュームの縮小) を行うことに意味があるかどうかを決定することができます。

シャドウページングの概念

パーシスタンスレイヤは、トランザクションの永続性と原子性を確保する役割を担っています。その設計の一部が MaxDB のコンセプトの影響を受けています。パーシスタンスレイヤにより、再起動後にデータベースが直近のコミットされた状態に復元されるようになり、またトランザクションを完全に実行したり完全に取り消したりできるようになります。効率的な方法でこの目標を達成するために、パーシスタンスレイヤでは、先行書込ログ、シャドウページング、およびセーブポイントの組合せが使用されます。パーシスタンスレイヤにより、永続データの書込および読込のためのインタフェースが提供されます。また、トランザクションログを管理するロガーコンポーネントも含まれています。トランザクションログエントリは、ログインタフェースを使用して明示的に書き込まれるか、仮想ファイル抽象化の使用時に暗黙的に書き込まれます。

この図は、トランザクションのセーブポイントフェーズ (データロック、バージョン管理、コミット後の再起動プロシージャなど) を示しています。

パーシスタンスレイヤでは、セーブポイントが定期的に実行されます。セーブポイント操作時に、ページバッファ内の変更されたページ、ダーティカラムストアのデルタページ、およびローストアによって提供される結果ページがディスクに書き込まれます。バッファされた REDO ログエントリもディスクにフラッシュされます。セーブポイントを実行する目的の 1 つは、再起動を高速化することです。システムの起動時に、REDO ログを最初から処理する必要はなく、直近のセーブポイント位置からのみ処理することができます。これにより、システムが直近のコミットされた状態に復元されます。

セーブポイントは、セーブポイントコーディネータによって非同期的に書き込まれます。セーブポイント書込の時間間隔は、たとえば 10 分に設定することができます。また、セーブポイントは、データバックアップ、データベースのシャットダウン、再起動の完了後など、その他の複数の操作によってトリガされます。管理者は、セーブポイントをマニュアルで要求することもできます。

注記

セーブポイント登録の頻度は設定することができます。これについては、このコースの後半で詳しく説明します。セーブポイントは、データバックアップやデータベースのシャットダウンおよび再起動といった他のいくつかの操作によっても自動的にトリガされます。また、ALTER SYSTEM SAVEPOINT 文を実行して、セーブポイントをマニュアルでトリガすることもできます。

セーブポイント操作の間にシステムがクラッシュした場合でも、直近のセーブポイントから復元できます。これは、書込操作で新しい物理的ページに書込を行うと、その前のセーブポイントバージョンはシャドウページに保存されるためです。

セーブポイント操作は、以下の 3 つのフェーズに分かれています。

  • フェーズ 1: 変更されたデータの大部分がディスクに書き込まれます。このフェーズでは、通常どおりデータベース操作が続行されます。

  • フェーズ 2: これは、同時書込操作が許可されないセーブポイント操作の重要な部分です。このフェーズは、整合性のある変更ロックを使用して実現されます。フェーズ 2 の開始時に、このロックが排他モードで取得されます。これにより、共有モードで同じロックを必要とする同時書込操作は除外されます。フェーズ 2 では、トランザクションの開始および終了もブロックされます。同時操作への影響を最小限に抑えるには、フェーズ 2 をできるだけ短くする必要があります。同時変更ロックを取得した後、セーブポイントコーディネータにより、セーブポイントログ位置とオープントランザクションの一覧が決定および保存されます。これにより、セーブポイントに反映されるデータベースの状態が定義されます。フェーズ 2 では、フェーズ 1 で変更されたページもセーブポイントコーディネータによって決定されます。これらのページの内容がメモリ内のバッファにコピーされます。次に、非同期 I/O を使用してバッファがディスクに書き込まれます。

  • フェーズ 3: セーブポイントコーディネータは、基本的にフェーズ 2 でトリガされた非同期書込操作が終了するまで待機します。アンカーページを書き込みます。これには、再起動レコードへのリンクが含まれます。フェーズ 3 では再度変更が許可されますが、これらはセーブポイントの一部ではなくなります。

シャドウページングは、最後のセーブポイント以降に存続している変更を取り消す場合に使用されます。シャドウページの概念では、最後のセーブポイントで書き込まれた物理ディスクページは、次のセーブポイントが正常に完了するまでは上書きされません。この代わりに、変更された論理ページの存続に新しい物理ページが使用されます。次のセーブポイントが完了するまで、1 つの論理ページに対して 2 つの物理ページ (最後のセーブポイントのバージョンがまだ含まれているシャドウページと、最後のセーブポイント後にディスクに書き込まれた変更を含む現在の物理ページ) が存在する可能性があります。