5

単純な更新クエリがあります(foo列タイプはBOOLEAN(デフォルトはfalse)):

update tablename set foo = true where id = 234;

どの「id」が(主)キーに設定されており、「explainanalyze」を実行すると次のようになります。

Index Cond: (id = 234)
Total runtime: 0.358 ms

しかし、それでも、200秒以上かかった遅いログ(pgfouine)で説明のつかないクエリがたくさんあります(?!):

Times executed: 99, Av. duration (s): 70

誰か説明してもらえますか、その理由は何ですか?(テーブルの1.5 mio行、postgresql 8.4)

4

2 に答える 2

2

私の最初の推測は、テーブル全体または更新中の行をロックする他のクエリがあることです。単純な更新は、他の操作が完了するまで待機する必要があります。

于 2010-05-24T19:47:43.240 に答える
1

更新された列にインデックスや制約がないことを確認してください。その場合、データベースはインデックスの再計算または制約の評価を行っている可能性があります。これらの追加タスクは、EXPLAINANALYZEの結果には含まれていません。

その他の可能性としては、I/O操作のために低速である可能性があります。PostgresでのUPDATEのパフォーマンスについてはこのスレッドを確認してください。

于 2011-07-27T12:44:10.090 に答える