PREPARATION
受験対策

Goldの例題解説
「G3.1 性能に関係するパラメータ」

今回は、Goldの「G3 パフォーマンスチューニング - G3.1 性能に関係するパラメータ」からの出題です。

例題

3.15

PostgreSQLサーバをレプリケーション構成で稼働させる場合、synchronous_commit パラメータによってプライマリ機とスタンバイ機の同期レベルをチューニングすることが可能である。
以下の選択肢は、プライマリ機でトランザクションのコミットを実行した際の、synchronous_commit パラメータの設定値毎の動作の説明をしたものである。誤っているものを1つ選びなさい。

  1. on にすると、WALがスタンバイ機のディスクに正常に書き出されたタイミングでコミット成功とする

  2. off にすると、WALがプライマリ機にもスタンバイ機にもまだ書き出されていない状況でもコミット成功とする

  3. local にすると、WALがスタンバイ機のディスクに書き出される前の、バッファに書き出されたタイミングでコミット成功とする

  4. remote_apply にすると、スタンバイ機でのWALのディスク書き込みだけでなく、WALの記述内容がデータベースに適用されたタイミングでコミット成功とする

※この例題は実際のOSS-DB技術者認定試験とは異なります。

解答と解説

正解は「 C 」です。

synchronous_commit パラメータは、レプリケーション構成における同期レベルを制御します。
以下では、synchronous_commit パラメータに設定可能な値とその解説をします。

●remote_apply
同期レベルが最も高い設定値です。この設定の場合、プライマリ機でのトランザクションのコミットを実行してから、コミット成功となるまでの流れは以下の通りです。
 STEP 1. ユーザが、プライマリ機でコミットを実行する
 STEP 2. プライマリ機が、WALをプライマリ機のディスクに保存する
 STEP 3. プライマリ機が、WALをスタンバイ機に送信し、スタンバイ機がWALを受取る
 STEP 4. スタンバイ機が、WALをオペレーションシステムのバッファキャッシュに保存する
 STEP 5. スタンバイ機が、バッファキャッシュに保存されたWALをディスクに保存する
 STEP 6. スタンバイ機が、WALの記述内容に従って、データベースを更新する(ここでSELECTクエリを実行すると更新された状態になる)。
 STEP 7. プライマリ機が、スタンバイ機からの報告を受取る
 STEP 8. プライマリ機が、コミットを成功と判定する

●on
デフォルトの同期設定です。remote_applyと比べて、STEP 6. の完了を待たずに STEP 7. に進みます。この設定では、プライマリ機およびすべてのスタンバイ機がデータベース記憶装置の故障を被った場合を除いて、トランザクションが失われないことが保証されます。

●remote_write
同期レベルが準同期の設定です。remote_applyと比べて、STEP 5., STEP 6. の完了を待たずに STEP 7. に進みます。
この設定の特徴として、プライマリ機のWAL書き込み処理の待ち時間が短縮されることにより、「on」よりも性能がやや向上します。また、スタンバイ機のPostgreSQLサーバがクラッシュしたとしても、データの保護を保証できます。ただし、スタンバイ機がOSレベルでクラッシュした場合は、システムのバッファが失われる可能性があるため、データ保護を保証できません。

●local
非同期の設定です。remote_applyと比べて、STEP 4.〜 STEP 7.の完了を待たずに STEP 8. に進みます。この設定は、同期レプリケーション構成では望ましい設定ではありません。

●off
完全非同期の設定です。remote_applyと比べて、STEP 2.〜 STEP 7. の完了を待たずに STEP 8. に進みます。
プライマリ機でのトランザクションのコミット時、WALレコードがプライマリ機およびスタンバイ機に書き込まれたかどうかを待たずにコミット成功とするため、性能が向上します。一方で、OSやPostgreSQLサーバのクラッシュ時にトランザクションが失われる可能性があります。


なお、非レプリケーション構成では、「remote_apply」、「on」、「remote_write」は、「local」と同じ動作となります。


例題の選択肢を一つずつ見ていきましょう。

[A. on にすると、WALがスタンバイ機のディスクに正常に書き出されたタイミングでコミット成功とする]
正しいです。onにすると、スタンバイ機はWALをディスクに書込んだ時点でプライマリ機に対して報告を行い、プライマリ機はその報告をもとにトランザクションのコミットを成功と判定します。

[B. off にすると、WALがプライマリ機にもスタンバイ機にもまだ書き出されていない状況でもコミット成功とする]
正しいです。offにすると、プライマリ機はWALのプライマリ機へのディスクへの書き出完了、スタンバイ機でのWALの書き出し、クエリ実行完了などの報告を待たずにコミット成功と判定します。

[C. local にすると、WALがスタンバイ機のディスクに書き出される前の、バッファに書き出されたタイミングでコミット成功とする]
誤りです。この記述は、設定値「local」でなく、設定値「remote_write」に関する記述です。

[D. remote_apply にすると、スタンバイ機でのWALのディスク書き込みだけでなく、WALの記述内容がデータベースに適用されたタイミングでコミット成功とする]
正しいです。remote_applyにすると、プライマリ機は、スタンバイ機にてWALの内容が適用された旨の報告を待って、コミット成功と判定します。

今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。

※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システム、AIなどの
新領域での「PostgreSQL」の採用が拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定です

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。