[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 メーリングリストの案内