拡張ログ・スペース管理

Db2® 11.5.4 以降を実行する場合は、Advanced Log Space Management (ALSM) を使用して、トランザクション・ログが満杯状態になる可能性を減らします。 この機能を有効にするには、 DB2_ADVANCED_LOG_SPACE_MGMTレジストリー変数を ON に設定します。

概説

拡張ログ・スペース管理 (ALSM) は、長期実行トランザクションがアクティブ・ログ・スペースを保持した結果として発生するログ・フル状態のエラー (SQL0964N) によって引き起こされるアプリケーション障害を最小限に抑えるのに役立ちます。 これは特に、長期実行トランザクションが、同時に実行されている他のトランザクションと比較して、トランザクション・ログ・データを多く生成しない場合に効果的です。 他のアプリケーションに影響を与えるログのフル状態を引き起こす可能性のある長期実行トランザクションの例を以下に挙げます。
  • LOAD オペレーション (LOAD を使用する ADMIN_MOVE_TABLE を含む)。
  • CREATE INDEX オペレーション。
  • 未確定トランザクション。
  • データベースの変更後に COMMIT または ROLLBACK を発行していないアイドル・アプリケーション。

ALSM を使用すると、 Db2 トランザクション・マネージャーは、ログ満杯状態を引き起こす可能性がある長期実行トランザクションを識別し、それらのログ・データをアクティブ・ログ・ファイルからそのトランザクション専用の個別の抽出ログ・ファイルに (コピーすることによって) 抽出します。 これにより、元のログ・ファイルが削除されディスク・スペースが解放されるため、アクティブなログ・ファイルを新たに作成できるようになります。

ALSM を有効にすると、ログ・スペースの使用状況とアクティブなトランザクションが定期的に検査され、ログ・データの抽出にメリットがあるかどうかが評価されます。 抽出による効果が限定的である場合や、効果が一切ない場合もあります。 例えば、ログのアーカイブが適切に機能していない場合は、すべてのログ・ファイルがアクティブなログ・パスに残ります。 このような場合、抽出されたデータは対応するログ・ファイルに既に存在しているログ・データを複製するだけで、ログ・ファイルは解放されないため、抽出のメリットはありません。

もう 1 つの例は、ディスク・スペースの不足です。 ALSM は、構成済みのアクティブ・ログ・ファイルおよび 2 次ログ・ファイルに必要なディスク・スペースを妨げないように設計されています。 この評価プロセスは「スロットル」と呼ばれます。スロットルの理由の詳細については後述します。 アクティブな抽出プロセス中にスロットル条件も定期的に評価され、抽出を継続することが引き続き効果的であるかどうかが判別されます。 つまり ALSM は、ログのフル状態をすべて防ぐのではなく、その大半を防ぐように設計されています。

一般的に、ALSM のパフォーマンス・オーバーヘッドは比較的低いため、進行中のワークロードへの影響は多くありません。 現行のトランザクション・ワークロードに大量のシステム・リソースが必要な場合、ALSM は進行中のワークロードに徐々にシステム・リソースを解放して、必要なシステム・リソースをトランザクション処理で使用できるようにします。 ワークロードを正常に実行することが、ログ・データの抽出より優先されます。

ALSM は、パフォーマンスのオーバーヘッドが小規模であるだけでなく、データベースの回復力や安定性の問題に対応できるように設計されています。 抽出ログ・ファイルが使用不可になった場合は、元のアクティブ・ログ・ファイルが代わりに使用されます。 このログ・ファイルがアーカイブ内にある場合は、取得してから使用されます。

プロセス・モデル

すべての ALSM 抽出ロジックが、シングルスレッド・エンジン・ディスパッチ可能単位 (EDU) である db2loggx に含まれています。 ログ抽出 EDU は、実行するように構成されていると、データベースの活動化中、あるいはユーザーまたはユーティリティーの接続中 (クラッシュ・リカバリー、データベースのロールフォワードなど) にバックグラウンド・エージェントとして開始されます。

db2loggx は開始されると、アクティブなログ・パスとその他の関連するログ・パラメーターのサンプルを定期的に取得して、抽出を開始するかどうかを決定します。 ログ抽出 EDU はサンプリングを行うため、抽出が実行されていない場合でも、少量のシステム・リソースを消費します。 ただし、このオーバーヘッドがパフォーマンスに与える影響はごくわずかです。

条件に適合して抽出が許可されると、db2loggx はすべての関連ログ・ファイルに対して単一のログ・ストリーム・スキャンを開始します。 ログ・ストリーム・スキャンで検出されたログ・レコードを使用して、必要に応じてログ抽出ファイルにデータを入力します。 抽出が完了すると、ログ・ストリーム・スキャンが終了し、EDU はデフォルトのサンプリング状態に戻ります。 ログ抽出 EDU は、データベースが非活動化されるまで存在し続けます。 db2loggx が終了すると、非活動化により、不要なメモリー・リソースおよび抽出ファイルの完全なクリーンアップが実行されます。

抽出ログ・ファイル

抽出ログ・ファイルは、 logpathデータベース構成パラメーターによって示されるアクティブ・ログ・パスにあります。 抽出ファイルは、トランザクション・ログ・フル・エラーを引き起こす可能性がある、単一のトランザクションのみのデータを含むログ・ファイルと考えることができます。 通常、親アクティブ・ログ・ファイルにはより多くのログ・レコードが含まれ、これには既に終了している他のトランザクションのログ・レコードも含まれます。

抽出ログ・ファイルは、構成されたログ・ファイル数の上限logprimaryおよびlogsecondの範囲外で使用可能なディスク・スペースを使用します。 ALSM は、データベース用に構成されたログ・スペースに干渉しないように設計されています。 抽出ログ・ファイルは、ログ・アーカイブによって管理されることはありません。 特定の抽出ログ・ファイルに含まれるトランザクションが完了した場合にのみ、アクティブなログ・パスから削除されます。

抽出ログ・ファイルには次の 3 つのタイプがあります。

  • X<log file number>_TID<tid>_<tidLogStreamId>.log

    抽出トランザクション ID (TID) ファイル。 このファイルには、<tid>_<tidLogStreamId> で識別される単一トランザクションのログ・ファイル <ログ・ファイル番号> から抽出されたログ・レコードが含まれます。 使用可能な場合、TID ファイルはロールバック、現在コミットされているもの、およびクラッシュ・リカバリーやデータベース・ロールフォワードなどのすべてのリカバリー目的に使用されます。 トランザクション ID ごとに 1 つのアクティブ・ログ・ファイルが存在し、アクティブ・ログ・ファイルごとに 1 つの TID ファイルがあります。

  • X<ログ・ファイル番号>.TMP

    ログ・ファイル <ログ・ファイル番号> から抽出されたトランザクションおよびログ・レコードを記述する一時メタデータ・ファイル。 このファイルは、アクティブな抽出の進行中に作成され、まだ完了していません。

  • X<ログ・ファイル番号>.META

    ログ・ファイル <ログ・ファイル番号> から抽出されたトランザクションおよびログ・レコードを記述する永続メタデータ・ファイル。 このファイルは、抽出による現在のログ・ファイルの処理を終了した後に、前述のTMPファイルの名前を変更することによって作成されます。

拡張スロットル

ALSM が条件を満たすログ・レコードを選択し、抽出の開始と終了を制御するためには、一連の基準を定義しておく必要があります。 このプロセスはスロットルと呼ばれます。 以下のイベント中に、基準が検査され、ログ抽出スキャンに適用されます。

  • Extraction scan start

    このイベントは、事前定義された間隔で継続的かつ定期的にトリガーされます。 イベントの存続期間は、ALSM EDU、db2loggx の存続期間と密接に関連します。 通常、イベントはデータベースの活動化後に発生し始め、データベースが非活動化されるまでトリガーされ続けます。 抽出スキャンを無効にするエラーの場合、このイベントは、db2loggx が終了するとすぐに停止します。 データベースはその時点でまだアクティブである可能性があります。

  • Extraction scan restart

    このイベントは、スキャナーがトランザクション・ログ・レコードを読み取るたびに抽出スキャンによってトリガーされ、抽出スキャンが進行中であるアクティブなデータベースでのみ発生します。 新しいログ・レコードが読み取られた後、抽出を続行する必要があるかどうかを判別する目的でログ・レコードが検査されます。

  • New active log file

    このイベントは、スキャナーが新しいアクティブなトランザクション・ログ・ファイルに移行するたびに抽出スキャンによってトリガーされ、抽出スキャンが進行中であるアクティブなデータベースでのみ発生します。

    スロットルにより、抽出プロセスが他の重要なデータベース操作に影響を与えないことが保証されます。 抽出プロセスによって消費されるディスク・スペースの量には、特別な考慮が払われます。 抽出ログ・ファイルが、アクティブ・ログ・パスで占有するスペースが多すぎると、データベース停止を引き起こす可能性があります。 スロットルのもう 1 つの目標は、抽出によるメリットが限定的である場合、または一切ない場合に、抽出を行わないようにすることです。

    それでもトランザクション・ログのフル・エラーが発生し、スロットルが有効な場合は、問題判別のために、エラーが発生したポイントでスロットルの理由が Db2 診断ログに出力されます。 後述の「問題判別」セクションを参照してください。

    拡張スロットルについて詳しくは、 log_extraction_throttle_reason-抽出スロットルの理由モニター・エレメントを参照してください。

スロットルが発生したとき
スロットルは、以下のいずれかの理由で行われる場合があります。
スロットルが有効でない
  • スロットルが使用不可です。例えば、ALSM が使用不可になっていることが原因です。
  • スロットルの理由: n/a
ディスクがフル状態
  • ランタイムおよびリカバリーの取り消し中に、抽出ログ・ファイルが、データベース用に構成されたログ・ファイル数の上限と干渉する場合に、抽出がスロットルされます。 この規則により、抽出ファイルに必要なディスク・スペースが、データベース用に構成されたログ・スペース上で足りないことがないように保証されます。 通常のロギング・アクティビティー中にアクティブ・ログ・パスのディスク・スペースが不足すると、データベースが予期せずシャットダウンする可能性があるため、この条件により他のスロットルの理由がすべて無効となります。

    この規則は、logprimary および logsecond データベース構成パラメーターを構成し、抽出ログ・ファイルがこのスペースに違反することがないようにします。 Db2 の 1 次ログ・ファイルの数が logprimary で指定された数より多くなる場合 (抽出が実行される場合など)、または 1 次ログ・ファイルの数が少なくなる場合 (例えば、データベースがアクティブ化される処理の最中で、ログ・ファイルが非同期的に割り振られる場合) など、特殊なケースがあります。 さらに、logsecond パラメーターは動的に変更できます。 規則ではそのようなすべてのケースが考慮されます。

    ログ・スプーリングが HADR スタンバイ・データベースで有効になっている場合、ログ・スプーリングのディスク・スペースを保護するために抽出がスロットルされます。 データベースの hadr_spool_limit 構成パラメーターが固定値に設定されている場合、この規則により、ログ・スプーリングに必要なディスク・スペースが抽出によって使用されなくなります。 hadr_spool_limit が AUTOMATIC に設定され、ディスク・スペースが制限されている場合、この規則は、抽出がそれ自体とログ・スプーリングの間でディスク・スペースを共有するように強制します。 hadr_spool_limit が -1 に設定されている場合、この規則は抽出をスロットルしません。

  • スロットルの理由: DISK_FULL
アクティブなログ・ファイルからの距離
  • 抽出の対象となるログ・ファイルが、現在アクティブな書き込み用ログ・ファイルである場合、スロットル抽出します。 抽出は、閉じたログ・ファイルでのみ機能します。
  • スロットルの理由: CURRENT_ACTIVE_FILE
ログ・アーカイブ
  • データベースでログのアーカイブが有効になっていない場合、または抽出の対象となるログ・ファイルがまだアーカイブされていない場合に、スロットル抽出が発生します。 アーカイブされるのを待機するアクティブ・ログ・ファイルは常にアクティブ・ログ・パスに残り、抽出してもディスク・スペースが複製されるだけであるため、追加のメリットはありません。
  • スロットルの理由: LOG_ARCHIVING
ログ・スペースの使用
  • 消費されたアクティブ・ログ・スペースが計算されたしきい値を下回った場合に、スロットル抽出が発生します。 この規則は、システム・リソースを節約するように設計されており、データベースが構成済みのログ・スペースを使い果たしそうになったときにのみ、抽出が開始されるようにします。
  • スロットルの理由: DB_LOG_SPACE_USED
抽出率
  • 抽出されたデータの合計が、計算された構成済みログ・スペースのパーセンテージ上限を超えた場合に、スロットル抽出が発生します。 この規則の目的は、非常に大規模なトランザクションの抽出を防ぎ、アクティブ・ログ・ファイルで見つかった内容を潜在的に複製することです。
  • スロットルの理由: EXTRACTION_RATIO
新しい抽出ゾーン
  • 新しい抽出ゾーンが検出され、このゾーンより前の抽出ログ・ファイルが不要になった場合は、データを抽出しません。 抽出ゾーンは、抽出スキャンで処理する必要のあるログ・レコードの最初から最後までの範囲です。
  • スロットルの理由: NEW_EXTRACTION_ZONE
バッファー・プールのフラッシュが必要
  • 現在処理されているログ・レコードがまだディスクにフラッシュされていない場合は、スロットル抽出します。 バッファー・プールからフラッシュされていないログ・レコードは、リカバリーの目的で常に必要になるため、必ず抽出しなければなりません。 これは、データベース構成パラメーター PAGE_AGE_TRGT_MCR および PAGE_AGE_TRGT_GCR によって制御できます。
  • スロットルの理由: SLOW_BP_FLUSH
以前の抽出エラー
  • 現在処理されているログ・ファイルをスキップする必要がある場合に、スロットル抽出が発生します。 特定のタイプのエラーが発生すると、抽出スキャナーは現在処理されているログ・ファイルをスキップして、次のログ・ファイルでスキャンを再開する場合があります。
  • スロットルの理由: SCAN_ERROR

対話

クラッシュ・リカバリー

このフィーチャーは、クラッシュ・リカバリーを完全にサポートしています。 抽出ファイルが存在するときにデータベースの停止が発生した場合、抽出ファイルは、その後のクラッシュ・リカバリーの REDO フェーズおよび UNDO フェーズで使用されます。 これにより、以前にアーカイブされたログ・ファイルをアクティブなログ・パスに戻す必要がなくなるため、リカバリー・プロセスが加速します。 ディスク・エラーなどが原因で抽出ファイルを使用できない場合、以前にアーカイブされたログ・ファイルは通常どおりに取得され、クラッシュ・リカバリーでは取得されたログ・ファイルが代わりに使用されます。 クラッシュ・リカバリー中の抽出は、ランタイム規則と同様のスロットル規則によって制御されます。 ALSM は、クラッシュ・リカバリー中のトランザクション・ログまたはディスク・フルのエラーが原因で失敗しないようにあらゆる策を講じます。そのため、クラッシュ・リカバリーの REDO および UNDO フェーズでも新しい抽出ファイルが生成される可能性があります。

従来のオンライン・バックアップおよびリストア ( バージョン 11.5.6以降)
BACKUP

ログ・ファイルがバックアップ・イメージに含まれている場合、 Db2 は、バックアップ操作の終了を表すポイント・イン・タイムまでデータベースをリカバリーするのに適した範囲のログを組み込みます。 データベース・レベルのリカバリーの場合、これは、データベースの整合性が保証される最小の時点を表します。

バックアップ時に抽出ログ・ファイルが使用可能な場合、 Db2 は、上記のリカバリー・ポイントの約束を保証するイメージに含める抽出ログ・ファイルとアクティブ・ログ・ファイルの最適な組み合わせを選択します。

バックアップがオフラインの場合、または BACKUP コマンドで EXCLUDE LOGS パラメーターが指定されている場合、抽出ログ・ファイルはバックアップ・イメージに組み込まれません。

抽出ログ・ファイルのバックアップを試行中にエラーが発生した場合、 Db2 は問題のログ・ストリームの抽出ログ・ファイルのバックアップを停止します。 代わりに、失敗した範囲で始まるアクティブなログ・ファイルをバックアップします。

ALSM が構成されると、新しいバックアップ・オブジェクトはオンライン・バックアップ・イメージに含まれることに注意してください。 次の制限が適用されます。
  • Db2 11.5.3 以前では、 Db2 11.5.6 以降で作成されたオンライン・バックアップ・イメージをリストアできません。
  • Db2 11.5.4 および 11.5.5 は、 Db2 11.5.6 以降で作成されたオンライン・バックアップ・イメージをリストアできます。 復元時に、新しいオブジェクトは無視されます。
RESTORE

データベース・レベルのリストア操作の場合、バックアップ・イメージに抽出ログ・ファイルが含まれていると、 LOGTARGETパラメーターの設定に関係なく、抽出ログはアクティブ・ログ・ディレクトリーにリストアされます。

表スペース・レベルのリストア操作や、データをリストアしないリストア・タイプでは、抽出ログ・ファイルはリストアされません。 これには、RESTORE DB ... LOGS 形式のリストア操作も含まれます。

増分リストアや REBUILDなどのマルチステップ RESTORE 操作の場合、 Db2 は、後続のロールフォワード操作で使用できるように、正しいログ抽出ファイルがリストアされることを確認します。 実際には、これは増分リストアのターゲット・イメージになります。これは通常、データベースの再作成の一環でリストアされる最も古いイメージになります。

抽出ログ・ファイルをリストアできない場合は、リストア操作が続行されます。 ただし、 Db2 は、後続の ROLLFORWARD 操作の開始時に正しい範囲の抽出ログ・ファイルが存在することを検証できないため、問題のログ・ストリーム上のすべての抽出ログ・ファイルを削除します。 このため、ロールフォワード・ユーティリティーがデータベースのログ・アーカイブを使用できることを確認して、アクティブなログ・ファイルを使用できるようにすることが必要となります。 ログ・アーカイブが使用できない場合、またはNORETRIEVEオプションを使用してロールフォワード操作が実行される場合は、リカバリー・ログを手動で取得する必要があります。

オンラインの従来のバックアップおよびリストア ( バージョン 11.5.6より前)

従来のオンライン・バックアップでは、抽出ログ・ファイルはバックアップ・イメージに含まれません。 INCLUDE LOGSパラメーターでは、ログがバックアップ・イメージで必要な場合、ローカルで見つからなければアーカイブから取得されます。 抽出を使用すると、これにより、バックアップ・イメージに含める必要があるアクティブなログ・ファイルの範囲が拡大し、バックアップ・イメージのサイズが大きくなる可能性があります。

リストア後、ロールフォワードのためにログ・ファイルが必要であるにもかかわらず、ローカルで見つからないときには、必要なログ・ファイルが通常どおりアーカイブから取得されます。

オンラインのネイティブ・スナップショット・バックアップおよび復元

BACKUP コマンドで INCLUDE LOGS パラメーターを指定すると、抽出ログ・ファイルを含むアクティブ・ログ・パスがターゲット・スナップショット・イメージに組み込まれます。

データベースのロールフォワード

このフィーチャーは、データベースのロールフォワードを完全にサポートしています。 データベースのロールフォワード操作の開始時に抽出ファイルが存在する場合、それらの抽出ファイルは、データベースのロールフォワード操作の REDO および UNDO フェーズ中に使用されます。 これにより、以前にアーカイブされたログ・ファイルをアクティブなログ・パスに戻す必要がなくなるため、リカバリー・プロセスが加速します。 抽出ファイルが使用できない場合 (例えば、ディスク・エラーが原因で)、以前にアーカイブされたログ・ファイルは通常どおりに取得され (NORETRIEVEオプションが指定されていない場合)、データベースのロールフォワードでは、取得されたログ・ファイルが代わりに使用されます。 NORETRIEVEオプションが指定されている場合、データベース・ロールフォワード操作はアーカイブからログ・ファイルを取得しません。

データベースのロールフォワード中の抽出は、ランタイム規則と同様のスロットル規則によって制御されます。 ALSM は、データベースのロールフォワード中のトランザクション・ログまたはディスク・フルのエラーが原因で失敗しないようにあらゆる策を講じます。そのため、データベースのロールフォワードの REDO および UNDO フェーズでも新しい抽出ファイルが生成される可能性があります。 データベースのロールフォワード・オペレーション中にアクティブなログ・パスに存在するログ・ファイルと抽出ファイルの数は、ロールフォワード・ログ・ファイルの取得要件がランタイムの要件と異なるため、ランタイムの場合とは異なる可能性があります。

高可用性災害時リカバリー (HADR)

Db2 11.5.6以降、データベース・ロールフォワード・フィーチャーは HADR を使用するデータベースを完全にサポートします。 1 次データベースでは、ログの抽出は、スロットルと、抽出ログ・ファイルにアクセスできなくなった場合とで、同じランタイム規則に従います。 1 次データベースが ALSM 用に設定されている場合、スタンバイはこれと一致するように、ALSM を使用するように構成されている必要があります。

スタンバイ・データベースの場合、ログの抽出は 1 次データベースとは独立して動作します。 スタンバイ・ログの抽出の動作は、それが実行される構成済みの物理環境に基づいています。 ログの抽出は、スロットルと、抽出ログ・ファイルにアクセスできなくなった場合とで、同じデータベースのロールフォワード規則に従います。

ログ・スプーリングは、スタンバイ・データベースでは別の方法で処理されます。 hadr_spool_limitデータベース構成パラメーターに基づいて、ログ・スプーリング用のディスク・スペースを保護するためにログ抽出がスロットルされます。 hadr_spool_limitが固定値に設定されている場合、この規則により、ログ・スプーリングに必要なディスク・スペースが抽出によって使用されなくなります。 hadr_spool_limitが AUTOMATIC に設定され、ディスク・スペースが制限されている場合、この規則により、それ自体とログ・スプーリングの間でディスク・スペースを共有するように抽出が強制されます。 hadr_spool_limitが -1 に設定されている場合、この規則は抽出をスロットルしません。

1 次データベースとスタンバイ・データベース間で共有アーカイブを使用することをお勧めします。 まれに、ディスク・エラーなどが原因で抽出ログ・ファイルが使用できない場合は、以前にアーカイブされたログ・ファイルがアーカイブから取得され、テークオーバーに使用されます。 アーカイブされたログ・ファイルにアクセスできない場合、操作は失敗し、手動によるユーザー介入が必要になります。

表スペースのロールフォワード

表スペースのロールフォワード操作に必要なログ・レコードは、通常、ログのヘッドを含むログ・ファイル (例えば、 HeadExtentID) よりも古いため、ALSM は表スペースのロールフォワード操作には利点がありません。 ALSM はこの時点より前のデータを抽出しません。 表スペースのロールフォワード・オペレーションにアーカイブ・ログ・ファイルが必要な場合、ログ・ファイルは通常どおりアーカイブから取得されます。

ミラーリングされたデータベース (db2inidb)

このフィーチャーは、ミラーリングされたデータベースを完全にサポートしています。 AS SNAPSHOT オプションを指定して db2inidb コマンドを発行した場合、データベースはクラッシュ・リカバリーを受ける必要があります。 クラッシュ・リカバリーが開始される前に、ディスク上の抽出ファイルの完全性と正確性が検証されます。 これは、正しい数の抽出ファイルが存在し、それらが読み取り可能であり、一貫性を持っており、クラッシュ・リカバリーの目的で使用可能である点を確認します。 同様に、データベースをロールフォワード・ペンディング状態にする AS STANDBY または AS MIRROR オプションを指定して db2inidb コマンドを発行すると、同じ抽出ファイル検証が実行されます。

現在コミット済み

ALSM は、現在コミットされているフィーチャーを完全にサポートしています。 コミットされたバージョンの行がログ・バッファーに存在しない場合は、対応するログ・ファイルから行データを取得する必要があります。 目的のデータを含む抽出ログ・ファイルがある場合、データは抽出ログ・ファイルから読み取られます。 ディスクの問題などが原因で、抽出ログからの読み取りエラーが発生した場合、親アクティブ・ログ・ファイルは取得されません。 その場合は、行または表のロックを待機するデフォルトの動作に戻ります。

SET WRITE SUSPEND

ログ抽出の実行中に INCLUDE LOGS パラメーターを指定した SET WRITE SUSPEND コマンドを発行すると、ログ抽出は一時停止します。 データベースに対する I/O 書き込みが一時停止している間は、既存の抽出ファイルへの書き込み、抽出ファイルの新規作成、および既存の抽出ファイルの削除は行われません。 SET WRITE RESUME コマンドを発行した後、抽出が再開されます。 EXCLUDE LOGS パラメーターを使用して SET WRITE SUSPEND を発行しても、ログ抽出に影響はありません。これは、両方の機能が共存できるためです。

MIRRORLOGPATH を指定して構成されたデータベース

Db2 11.5.5以降、拡張ログ・スペース管理は、 MIRRORLOGPATHで構成されたデータベースの基本サポートを備えています。 このようなデータベースでは、アクティブ・ログ・パスまたはミラー・ログ・パスのいずれかにあるアクティブ・ログ・ファイルからログ・データを読み取ることができ、抽出されたログ・データをアクティブ・ログ・パスの下にある抽出ログ・ファイルに書き込むことができる限り、ログ抽出が行われます。

アクティブ・ログ・パスがアクセス不能になると、 SCAN_ERROR 状態が原因でログ抽出スキャンがスロットルされ、トランザクション・ログ・フル・エラーが発生する可能性があります。 アクティブ・ログ・パス・エラーが修正され、ログ抽出ゾーンが上に移動すると、ログ抽出スキャンが再開されます (「前の抽出エラー」セクションを参照)。 ロールバック、クラッシュ・リカバリー、またはデータベース・ロールフォワードが、アクセス不能なアクティブ・ログ・パスの下にある抽出ログ・ファイルから読み取る必要がある場合、親ログ・ファイルはアーカイブから取得され、ログ・データの読み取りに使用されます。 現在コミットされているスキャナーが、アクセス不能なアクティブ・ログ・パスの下にある抽出ログ・ファイルから読み取る必要がある場合、親ログ・ファイルは取得されません。 その場合は、行または表のロックを待機するデフォルトの動作に戻ります。

無限ロギング

ALSM は、無限ロギング (LOGSECOND = -1) で構成されたデータベースを完全にサポートします。 処理中のトランザクションに必要なログ・データはローカルで検出されるため、アーカイブからログ・ファイルを取得する必要のない、高速で信頼性の高いロールバックとクラッシュ・リカバリーが保証されます。 これは、ALSM より前の無限ロギングの動作に加えられた改善です。

無限ロギングは、トランザクション・ログがフル状態にならないように保証します。 スロットル (抽出率など) が原因で抽出スキャンが低速やアイドル状態になっている場合は、アクティブ・ログ・ファイルを新しいログ・データ用に再利用しないと、ログを抽出できないことがあります。 これは、構成されたログ・ファイル数に達した場合に生じます。 この場合、処理中のトランザクションに必要なログ・データがローカルで見つからない可能性があるため、ロールバックまたはクラッシュ・リカバリー用に、ログ・ファイルをアーカイブから取得しなければならないことがあります。 これを回避するには、 LOG_DISK_CAPを -1 または十分な大きさの値に設定して、追加のアクティブ・ログ・ファイルを作成できるようにします。 詳しくは、 log_disk_cap-アクティブ・ログ・スペース・ディスク容量構成パラメーターを参照してください。

MAX_LOG

MAX_LOGデータベース構成パラメーターは、トランザクションが消費できる 1 次ログ・スペースのパーセンテージに制限があるかどうか、およびその制限が何であるかを指定します。 ALSM をオンにすると、このパラメーターは以前と同様に動作します。

NUM_LOG_SPAN

NUM_LOG_SPANデータベース構成パラメーターは、1 つのトランザクションがスパンできるログ・ファイルの数に制限があるかどうか、およびその制限が何であるかを指定します。 このパラメーターを再検討し、対象トランザクションがロールバックされてからでなければ抽出を行えない値に設定されていないことを確認してください。

db2ReadLog API

db2ReadLog API は、指定された開始 LRI からすべてのログ・レコードを読み取る必要があるため、抽出ログ・ファイルはサポートされません。

オンライン索引作成

オンライン索引作成 (OLIC) 操作では、すべてのログ・レコードを読み取る必要があるため、抽出ログ・ファイルはサポートされません。

db2flsn

db2flsn ツールでは、抽出ログ・ファイルを使用して LSN をログ・ファイル番号にマップできます。 アクティブ・ログ・ファイルがローカルに存在しないものの抽出ログ・ファイルが存在する場合には、抽出ログ・ファイルの情報がマッピングに使用されます。

db2fmtlog

db2fmtlog ツールが更新され、抽出ログ・ファイルの内容が表示されるようになりました。 db2fmtlog -ログ・ファイル情報のフォーマット設定および表示コマンドを参照してください。

ディスク容量

ALSM は、抽出ログ・ファイルを格納するためにディスク・スペースを追加で消費します。 ALSM は、構成されたアクティブ・ログ・スペース (LOGPRIMARYLOGSECOND、およびLOGFILSIZデータベース構成パラメーター) で必要とされるスペースよりも多くの物理ディスク・スペースがある場合に最適です。 構成された量より 20% 以上多いディスク・スペースを確保することをお勧めします。 時間の経過とともに、このトピックで後述するモニター・ツールを使用して、LOGPRIMARYLOGSECOND、および標準的なワークロードに最適なディスク・スペースの物理量を調整します。

制限事項/制約事項

ALSM では、以下の構成はサポートされません。
  • 循環保存ロギングまたはログ保存ロギングを使用して構成されたデータベース (logarchmeth1 またはlogarchmeth2データベース構成パラメーターの少なくとも 1 つが OFF または LOGRETAIN 以外の値に設定されている必要があります)。
  • IBM Db2 pureScale® 環境のデータベース。
  • Db2 11.5.6より前のバージョンでは、データベースは高可用性災害時リカバリー (HADR) フィーチャーを使用して構成されていました。

これらの状況では、ログの抽出は行われず、トランザクション・ログのフル・エラーは以前と同様に発生する可能性があります。

モニター

新しいモニター・エレメントはすべて、SQL および db2pd -logs を介して使用できます。 以下のモニタリング・インターフェースが更新されました。詳しくは、各リンクをクリックしてください。

例 1: ALSM が有効であるかどうかの確認

ALSM が有効になっているかどうかを確認するには、次のコマンドを実行します。
db2pd -db sample -logs
Extraction Status             Active
Current Log to Extract        1038

これは、ログ抽出が有効になっていることを示しています。 「Extraction Status」には、「Idle」または「Recovery」と示されることもあります。 Db2 診断ログには、ログ抽出が有効になったことを示すメッセージも含まれます。

以下は、ALSM が有効になっていないことを示しています。
Extraction Status            n/a
Current Log to Extract       n/a

Db2 診断ログには、ログ抽出が有効になっていない理由を示すメッセージも含まれます。

例 2: 抽出率の判別

抽出率によって、データベースのワークロードが、ALSM のメリットを享受できる理想的なモデルに適合するかどうかが決まります。 このモデルは、長時間実行されておりログ量の少ないいくつかのトランザクションと、短時間実行されている多数のトランザクションで構成されています。 抽出が有効化されて機能している場合、これは、分析されたログ・データの量を抽出されたログ・データの量と比較した結果に基づいて判別できます。
                SELECT log_extraction_written_bytes,
                       log_extraction_processed_bytes 
                FROM TABLE(MON_GET_TRANSACTION_LOG(-1)) as t

LOG_EXTRACTION_WRITTEN_BYTES LOG_EXTRACTION_PROCESSED_BYTES
---------------------------- ------------------------------
                       16589                         647632

これは、アクティブ・ログ・データの約 3% が抽出されたことを示しており、ALSM 使用のメリットを示す理想的なモデルに適合しています。

例 3: 抽出のディスク・スペース使用量

前回のデータベースの活動化以降の、抽出ログの現在のディスク・スペース使用量と最高水準点を確認するには、次のようにします。
      SELECT log_extraction_processed_bytes AS processed_bytes,
      log_extraction_written_bytes AS written_bytes,
      log_extraction_disk_space_used_total AS disk_space_used_total,
      log_extraction_disk_space_used_total_top AS disk_space_used_total_top
      FROM TABLE(MON_GET_TRANSACTION_LOG(-1)) as t

PROCESSED_BYTES WRITTEN_BYTES DISK_SPACE_USED_TOTAL DISK_SPACE_USED_TOTAL_TOP
--------------- ------------- --------------------- -------------------------
         266882           165                 35165                     54461

問題判別

抽出ログ・ファイルからの読み取り中にエラーが発生した場合、 Db2 は対応するアクティブ・ログ・ファイルからの読み取りを検索します。このログ・ファイルはローカルで検出されるか、アーカイブから取得されます。 このようなエラーでは、次の ADM メッセージが書き込まれます。
ADM1560W  Unable to read from extraction log file "<log-file-name>".

Explanation:

  Not able to read transaction log data from this file, either
  because the file is missing, or its content is not correct.
  This may result in retrieving of active log file(s) from archive.

User response:

  Investigate the cause of the failure by reviewing the Db2 diagnostic (db2diag) log file.

ALSM を使用すると、トランザクション・ログがフル状態になる可能性を低減することができますが、特定の条件下では、抽出スキャンがスロットルされている場合でも、トランザクション・ログのフル・エラーが発生する可能性があります。

これが発生した場合は、 Db2 診断ログを db2pd -logs と組み合わせて使用すると、ログ抽出の詳細を判別するのに役立ちます。 ほとんどの場合、抽出スキャンは特定の理由でスロットルされます。 以下にいくつかの例を示します。
理由: ログのアーカイブの失敗
トランザクション・ログのフル・エラーが発生した時点で、Db2 診断ログが表示されます。
Active log S0001038.LOG has not been archived yet.
Active log S0001038.LOG has not been extracted from yet.

Current log extraction information:
          loggxLastProcessedLsn = 0000000000072FEE
          loggxLastProcessedLso = 78454802
     logExtractionCurrentExtNum = 1038
             logExtractionState = IDLE
          logExtractionFlushLsn = 0000000000000000
                 throttleReason = LOG_ARCHIVING
db2pd -logs コマンドを実行すると、「Extraction Status」が「Active」に設定されていることが示されますが、ログ・アーカイブ・メソッド 1 は、トランザクション・ログ・ファイル 1038 でエラー状態になっています。 これと同じファイルからの抽出が試行中でもあります。
Logs:
Current Log Number            1047
Pages Written                 0
Cur Commit Disk Log Reads     0
Cur Commit Total Log Reads    0
Method 1 Archive Status       Failure
Method 1 Next Log to Archive  1047
Method 1 First Failure        1038
Method 2 Archive Status       n/a
Method 2 Next Log to Archive  n/a
Method 2 First Failure        n/a
Extraction Status             Active
Current Log to Extract        1038
Log Chain ID                  0
Current LSO                   78605624
Current LSN                   0x00000000000735A6

Db2 診断ログのトランザクション・ログ・フル・エラーから逆方向に検索すると、ログ・アーカイブが失敗した理由が分かります。 アーカイブの問題を調べて解決すると、抽出が再開されます。

理由: ディスクがフル状態
トランザクション・ログのフル・エラーが発生した時点で、Db2 診断ログが表示されます。
Active log S0001051.LOG has not been extracted from yet.

Current log extraction information:
          loggxLastProcessedLsn = 0000000000073801
          loggxLastProcessedLso = 78666799
     logExtractionCurrentExtNum = 1051
             logExtractionState = IDLE
          logExtractionFlushLsn = 0000000000000000
                 throttleReason = DISK_FULL
db2pd -logs コマンドを実行すると、「Extraction Status」が「Active」に設定されていることが示されますが、「Current Log to Extract」は、アクティブ・ログ・パスの最初のアクティブ・ログと同じ値です。これは通常、抽出が停止していることを示します。
Logs:
Current Log Number            1060
Method 1 Archive Status       Success
Method 1 Next Log to Archive  1060
Method 1 First Failure        n/a
Extraction Status             Active
Current Log to Extract        1051
Current LSO                   78818610
Current LSN                   0x0000000000073E38

StartLSN         StartLSO  State      Filename
0000000000073802 78666801  0x00000000 S0001051.LOG

ディスク・スペースの問題が解決された時点で、抽出が再開されます。

理由: スキャン・エラー

トランザクション・ログ・フル・エラーの時点で、 Db2 診断ログは以下のように表示されます。

Active log S0001079.LOG has not been extracted from yet.

Current log extraction information:
          loggxScanStartExtNum = 1079
                       loggxScanStartLsn = 0000000000074AC5
               loggxMinLsnToStartOnError = 0000000000074AF3
              logExtractionCurrentExtNum = 1079
                      logExtractionState = ERROR
                   logExtractionFlushLsn = 0000000000000000
                          throttleReason = SCAN_ERROR
Db2 診断ログのトランザクション・ログ・フル・エラーから逆方向に検索すると、エラー戻りコードにリストされているスキャン・エラーの理由が分かります。
MESSAGE :ZRC=0xFFFFFFFF=-1

Log extraction scan error.
                   Function = sqlpshrScanNext
       File Array Element 0 = 1073
                Head Extent = 1050
          Group Head Extent = 1050
       loggxScanStartExtNum = 1079
          loggxScanStartLsn = 0000000000074AC5
  loggxMinLsnToStartOnError = 0000000000074AF3
   loggxLastProcessedExtNum = 1079
      loggxLastProcessedLsn = 0000000000074AF1
      loggxLastProcessedLso = 79139424
     loggxLastProcessedByte = 79139471
 logExtractionCurrentExtNum = 1079
logExtractionPendingReadLso = 79139471
       logExtractionReadLso = 79123332

スキャン・エラーがアクティブ・ログ・パスからの読み取りまたは書き込みによって引き起こされている場合は、1 つ以上のアクティブ・ログ・パスにアクセスでき、十分なストレージがあることを確認する必要があります。

ただしこのエラーが、解決できずに問題化している状況に関連している場合は、IBM サポートに連絡してください。 スキャン・エラーが解決されると、スキャンが再開されます。

理由: バッファー・プールのフラッシュの低速化
トランザクション・ログ・フル・エラーの時点で、 Db2 診断ログは以下のように表示されます。
Active log S0001060.LOG has not been extracted from yet.

Current log extraction information:
          loggxLastProcessedLsn = 0000000000073801
          loggxLastProcessedLso = 78666799
     logExtractionCurrentExtNum = 1060
             logExtractionState = IDLE
          logExtractionFlushLsn = 0000000000074801
                 throttleReason = SLOW_BP_FLUSH

db2pd -logs コマンドを実行すると、「抽出状況」が「アクティブ」に設定されているが、「抽出する現行ログ」がアクティブ・ログ・パス内の最初のアクティブ・ログと等しいことが示されます。これは通常、抽出が停止していることを示します。

スロットルの理由に、バッファー・プールのフラッシュの低速化が示されているため、次のコマンドを実行して、バッファー・プール内の最も古いダーティー・ページに属するログ・レコードの LSN を取得します。
db2pd -db sample -dirtypages | grep minbuflsn
minbuflsn               : 0000000000073802
この LSN を db2flsn に指定すると、このログ・レコードを含むログ・ファイルが判別されます。
db2flsn -db sample 0000000000073802
Given LSN is in log file S0001060.LOG

返されたログ・ファイルは、引き続き抽出する必要があるログ・ファイルと一致します。

低速バッファー・プール・フラッシュは、例えば、データベースの構成の誤り (PAGE_AGE_TRGT_MCRおよびPAGE_AGE_TRGT_GCRデータベース構成パラメーター)、またはデータベースにページをフラッシュするための呼吸ポイントを与えずに同じページに頻繁にアクセスして更新するトランザクションが原因で発生する可能性があります。 このような場合、手動の FLUSH BUFFERPOOLS ステートメントが役立つことがあります。