4

私のアプリケーションのテストは、データベースではかなり難しいものです。create、drop、alter table ステートメントを実行します。ただし、デッドロックが発生した場合でも、postresql がこれらを処理することを期待します (つまり、ロックを検出して 1 つのスレッドを削除します)。私も同時にリクエストを実行していません。

ただし、私の場合はフリーズするだけで、手動で手動で強制終了する必要があります (実行順序を少し変更すると機能しますが、自信が持てません)。ロックは、create table ステートメントに排他ロックがあり、トランザクションにも排他ロックがあることを示しています。

誰かが似たようなことを経験しましたか? 役立つサーバー設定はありますか? それとも何かアドバイス?

4

1 に答える 1

8

PostgreSQL はデッドロックを自動的に検出します。ほとんどの場合、まだ完了していないステートメントをブロックしているだけです。デッドロックは、2 つのステートメントが互いに待機している場合にのみ発生します。

「ロック ツリー」をルートまで調べると (d ブロッキング on b ブロッキング on a はルートに a があります)、実行に時間がかかっているか、適切にコミットされていないトランザクションが見つかる可能性が高くなります。しかし、「アイドル・イン・トランザクション」モードになっているだけです。

ただし、スレッドについて言及しているため、すべてのクライアント ライブラリがクライアント側で必ずしもスレッドセーフであるとは限らないことに注意してください。

于 2009-07-20T14:51:47.987 に答える