PREPARATION
受験対策

Goldの例題解説「パフォーマンスチューニング - 性能に関係するパラメータ(ロック管理)」

今回は、Goldの「パフォーマンスチューニング - 性能に関係するパラメータ(ロック管理)」からの出題です。

例題

3.02

デッドロックに関する GUC パラメータ deadlock_timeout の説明として、正しいものをすべて選びなさい。

  1. deadlock_timeout で指定された時間を経過してもロックが獲得できなければ、デッドロックが発生していると判断される。

  2. deadlock_timeout の値を調整することで、デッドロックの発生を回避できる。

  3. deadlock_timeout の値を小さくすると、ロック待ちのプロセスが減るので、結果的にCPU負荷を小さくすることができると考えられる。

  4. デッドロックはアプリケーションの作り方を工夫することで回避すべきであり、deadlock_timeout の値はなるべく大きくすることが望ましい。

  5. deadlock_timeout のデフォルトの設定では、デッドロックの検出は自動的には実行されない。

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

解答と解説

データ更新のトランザクションは、他のトランザクションとの競合によるデータ不整合を防ぐため、更新の前にデータのロックを獲得します。
他のトランザクションがデータを更新中で当該データをロックしているときは、ロックが解放されるまで待ちます。
複数のトランザクションがそれぞれ別のトランザクションがロックしたデータの解放を待ち、どちらも処理を先に進めることができなくなった状態をデッドロックと呼びます。
PostgreSQLにはデッドロックを自動的に検出し、検出した場合はそのうちの1つのトランザクションを強制的に終了させることで、デッドロックを解決する、という機能があります。
deadlock_timeout は、ロック待ちの状態になったときにデッドロックの検出処理を開始するまでの待ち時間を指定します。デフォルト値は 1s、つまり1秒です。
あくまでも、この指定時間の経過後に検出処理を開始する、というだけですから、この場合に必ずしもデッドロックが発生しているとは限りません。
値を小さくすると、デッドロックの検出は早くなりますが、実際にはデッドロックが発生していないのに検出処理が動くということも多くなります。
値を大きくすると、この反対に、無駄なデッドロック検出処理の回数は減りますが、デッドロックが実際に発生したときに、それが検出されるまでに待たされる時間は長くなります。
デッドロックの検出はそれ自体が CPU 負荷の高い処理なので、できる限り実行しないで済むようにすべきです。
デッドロックが頻繁に発生するような環境では、deadlock_timeout を小さくすることで、デッドロックを早く解決できるかもしれませんが、なるべくデッドロックが発生しないようにアプリケーション側で工夫し、CPU 負荷の高いデッドロック検出処理が不必要に実行されないように deadlock_timeout を大きくする、というのが正しいやり方です。

従って、正解は D です。

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

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

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors