Enterprise PostgresでSAVEPOINTを含むトランザクションを実行している間、インスタンス全体でSQLコマンドの実行がスローダウンする事象について

Enterprise Postgres の技術情報はこちら

Enterprise PostgresでSAVEPOINTを含むトランザクションを実行しているとき、そのトランザクションが完了するまでインスタンス全体で一部のSQLコマンドの実行が極端にスローダウンすることがあります。原因と対処方法を教えてください。
[原因]
単一トランザクション内にSAVEPOINTコマンドなどにより作成されたサブトランザクションが多く存在している場合、同時に実行された複数のSQLコマンドによるサブトランザクション情報の読み込みが競合したことが原因の可能性があります。
PostgreSQLでは64個より多くのサブトランザクションが存在する場合、ある行の可視性を判断する際にディスク上のサブトランザクション情報をキャッシュ領域に展開して参照する必要があります。この展開時に排他ロックを取得するため、同時にサブトランザクション情報を参照しようとしたトランザクションが待ち状態となる場合があります。
なお、長トランザクションが残存している期間が長いほど、参照するサブトランザクション情報が多くなるため、本事象が発生する可能性が高くなります。

[対処方法]
長トランザクションが発生しないように適切なタイミングでCOMMITするか、トランザクションあたりのサブトランザクション作成数を64個以下に削減してください。
製品・サービス情報
対象製品Enterprise Postgres
プラットフォームWindows,Solaris,Linux
アンサー種別 運用/保守
このページの先頭へ