2010年2月17日

[pgsql-jp: 40178] Re:update文のフリーズ

2010/2/17 Eiichiro Sakai <sakai@xxxxx>:
> 1についてですが、SQLログというのはpostgresサーバで出力されているログで
> 「log_min_duration_statement = 0」にして出力しております。
> ログの抜粋を下記添付させていただきますが、下記出力後同一pid(28636)のログが
> 出力されていない状況となっておりました。
> fujii様よりexecute messageが届いてるかどうかというご指摘をいただいたのです
> が、
> ログを見るとSQL文を実行される際、最後のupdate文で「parse」「bind」が出力され

> ていて、
> 「execute」が出力されていない状況です。
> 「bind」と「execute」の間はpostgres内部の処理と認識していたので、
> SQLの実行メッセージは届いていると認識しておりました。

了解しました。

> 2010-02-10 13:00:31 JST [28636] LOG: duration: 0.081 ms parse <unnamed>:
> update AAA set column_1 = $1, column_2 = $2, column_3 = $3, column_4 = $4,
> column_5 = $5, column_6 = $6, column_7 = $7, column_8 = $8, column_9 = $9,
> column_10 = $10, column_11 = $11, column_12 = $12, column_13 = $13,
> column_14 = $14, VERSION = VERSION + 1 where AAA_id = $15 and VERSION = $16
> 2010-02-10 13:00:31 JST [28636] LOG: duration: 0.097 ms bind <unnamed>:
> update AAA set column_1 = $1, column_2 = $2, column_3 = $3, column_4 = $4,
> column_5 = $5, column_6 = $6, column_7 = $7, column_8 = $8, column_9 = $9,
> column_10 = $10, column_11 = $11, column_12 = $12, column_13 = $13,
> column_14 = $14, VERSION = VERSION + 1 where AAA_id = $15 and VERSION = $16
> 2010-02-10 13:00:31 JST [28636] DETAIL: parameters: $1 = 'xxx', $2 = 'xxx',
> $3 = 'xxx', $4 = 'xxx', $5 = 'xxx', $6 = 'xxx', $7 = 'xxx', $8 = 'xxx', $9 =
> 'xxx', $10 = 'xxx', $11 = 'xxx', $12 = 'xxx', $13 = 'xxx', $14 = 'xxx', $15
> = '9', $16 = 'xxx'

このとき、pg_stat_activity では pid = 28636 はどのような内容になっていたでしょうか?
"waiting" 列が "t" となっていた場合は、UPDATE 文はロックで待たされています。その場合は、
UPDATE 文と競合する SQL が他になかったか確認してみてください。

例えば、SELECT FOR UPDATE では where 句の条件は "AAA_id = $1" のみですが、UPDATE 文
では "AAA_id = $15 and VERSION = $16" と条件が増えています。このため、VERSION を
条件に SELECT FOR UPDATE 等を行っている SQL が他に存在すると、UPDATE 文だけ競合が
発生することになります。

--
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center


投稿者 xml-rpc : 2010年2月17日 13:52
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/93398
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。