[pgsql-jp: 42069] WALWriteLockの大量発生原因について

Mao Shibata shibata @ ryobi.co.jp
2020年 10月 29日 (木) 08:07:09 UTC


柴田と申します。

軽量ロックのWALWriteLockについてご教授いただきたくご質問させていただきます。

バッチ処理による更新処理(INS,UPD)が定期的に実施されるのですが
共有バッファへのデータ持ち上げ(暖機)を目的とした参照処理(SEL,prewarm)と
実行タイミングが重なった場合のみ更新処理のスループットが急激に下がってしまい
ます。
待機イベントを確認したところ「WALWriteLock」が大量に発生しており
スループット低下の直接的な原因かと思われます。
暖機目的の参照処理自体はpsqlからSELECT文を発行するのみにも関わらず
更新処理がWALWriteLockで待機してしまうのはなぜでしょうか?

以下、環境情報になります。

[データベース]
 環境  :クラウド
 OS    :CentOS 7
 メモリ:2TB
 CPU   :128コア
 DB    :PostgreSQL10.3
 構成  :ストリーミングレプリケーションによる2重化構成
  (一部DBパラメタ)
   - shared_buffers:1TB
   - wal_buffers   :512MB
   - work_mem      :100MB

[更新処理について]
・更新処理実行時の断面
  Activeセッション総数:1219
   実行中:0
   待機中:1219
   (待機イベント内訳)
    - WALWriteLock  :1198
    - wal_insert    :  11
    - transactionid :   5
    - buffer_content:   4
    - WALInitWrite  :   1

[暖機目的の参照処理について]
・1回目にディスク読み込みが走った場合にも本事象は発生する
・2回目以降、キャッシュヒットする場合にも本事象は発生する
・ソート時の一時ファイルが大量に生成されていた(約100GB程度)
・15分程度動作する
・参照処理実行時の断面
  Activeセッション総数:53 ※パラレルワーカー含
   実行中:2
   待機中:51
   (待機イベント内訳)
    - BufFileWrite  :35
    - buffer_content:10
    - WALWriteLock  : 4
    - wal_insert    : 2

[その他]
・バッチ処理による更新対象テーブルと暖機目的の参照対象テーブルの重複は2,3
テーブル程度
・WAL出力先とソートによる一時ファイル出力先(テーブルスペース)は別ディスクで
ともにSSD
・暖機目的の参照処理実行時、更新処理がストップしており、WAL出力先のディスク
IOは急激に下がっている
  (WALWriteLockで待っていればWAL出力が頻繁に行われており、writeは多いと思っ
ていた)

以上、よろしくお願いいたします。



pgsql-jp メーリングリストの案内