このLWLock:buffer_content
待機イベントは、セッションがデータページをメモリに読み取るまたは書き込むために待機中、他のセッションがそのページを書き込み用にロックしている場合に発生します。RDS for PostgreSQL 13 以降では、この待機イベントは BufferContent
と呼ばれます。
サポート対象エンジンバージョン
この待機イベント情報は、RDS for PostgreSQL のすべてのバージョンでサポートされています。
Context
データの読み取りや操作のために、PostgreSQL は共有メモリバッファを介してデータにアクセスします。バッファから読み取るために、プロセスは共有モードでバッファコンテンツに対する軽量ロック (LwLock) を取得します。バッファに書き込むには、排他モードでそのロックを取得します。共有ロックを使用すると、他のプロセスがそのコンテンツの共有ロックを同時に取得できます。排他ロックは、他のプロセスによるいかなるタイプのロック取得も防ぎます。
LWLock:buffer_content
(BufferContent
) イベントは、複数のプロセスが特定のバッファの内容をロックしようとしていることを示します。
待機時間が増加する原因の可能性
LWLock:buffer_content
(BufferContent
) イベントが通常より頻繁に発生し、パフォーマンスの問題を示している可能性がある場合、代表的な原因として以下が挙げられます。
- 同一データに対する同時更新の増加
-
同じバッファコンテンツを更新するクエリによる同時実行セッションの数が増加する可能性があります。この競合は、インデックスの多いテーブルではより顕著になることがあります。
- ワークロードデータがメモリ内に存在しない
-
アクティブなワークロードが処理しているデータがメモリ上にない場合、これらの待機イベントが増加する可能性があります。この効果は、ロックを保持しているプロセスが、ディスク I/O 操作の実行中にロックを長く維持できるためです。
- 外部キー制約の過度の使用
-
外部キー制約により、プロセスがバッファコンテンツロックを保持する時間を増やすことがあります。この効果は、読み取り操作では、そのキーが更新されている間、参照キーに対する共有バッファコンテンツのロックが必要になるためです。
アクション
待機イベントの原因に応じたさまざまなアクションをお勧めします。LWLock:buffer_content
(BufferContent
)イベントは、Amazon RDS Performance Insights を使用するか、ビューpg_stat_activity
のクエリで特定することができます。
インメモリ効率の向上
アクティブなワークロードデータがメモリ内に存在する可能性を高めるには、テーブルをパーティション化するか、インスタンスクラスをスケールアップします。DB インスタンスクラスの詳細については、「 DB インスタンスクラス」を参照してください。
外部キー制約の使用を減らす
外部キー制約の使用で、LWLock:buffer_content
(BufferContent
)待機イベントが多発しているワークロードを調査します。不要な外部キーの制約を削除します。
未使用インデックスの削除
LWLock:buffer_content
(BufferContent
) 待機イベントが多いワークロードで、未使用のインデックスを特定して削除します。
シーケンスを使用する場合は、キャッシュサイズを増やしてください
テーブルがシーケンスを使用している場合は、キャッシュサイズを増やして、シーケンスページとインデックスページの競合をなくします。各シーケンスは共有メモリ内の 1 ページです。定義済みのキャッシュは接続ごとです。多くの同時セッションによってシーケンス値を取得している場合、これではワークロードを処理するのに不十分な場合があります。