を使用して変更することはできません。変更がコミットされるまで他のトランザクションには表示されず、決してコミットされない場合には失われる書き込み操作の方が重大です。
それは、コストいくつかのRAMないと永久にはあなたの許可された接続(または重要ではないかもしれない可能性がある)の1を占めます。
トランザクションが非常に長く実行されると、さらに深刻な結果になります。古い行が表示される古いトランザクションが存在するため、VACUUM
はブロックします。システムが膨張し始める。
特に、SELECT
は、すべての参照テーブルでACCESS SHARE
ロック(すべてのブロックが最も少ないブロック)を取得します。これは、他のDMLに干渉しないINSERT
、UPDATE
またはDELETE
などのコマンドが、それはブロックDDLはだけでなく、TRUNCATE
または(自動バキュームジョブを含む)VACUUM
をコマンドします。それは十分に長いオープン/あなたは十分に速く、十分なXIDを燃やす留まる場合See "Table-level Locks" in the manual.
それはまた、様々な複製ソリューションの妨げとトランザクションIDにつながることができますが、長期的にをラップアラウンド。その詳細についてはin the manual on "Routine Vacuuming"。
ブロッキング効果マッシュルーム他のトランザクションがコミットをブロックされていて、自分でロックを取得している場合接続が閉じられるまで
しかし、長く必要以上に開いているトランザクションを離れることはない(サーバーは明らかに、再起動されたときにも起こりいる。) - など
あなたは(ほぼ)無限に開いているトランザクションを維持することができます。
影響:1.あなたのデータは他のトランザクションには見えません2。最終的にコミットしないと、データが失われます。 – zerkms
@zerkms私はサーバーの処理への影響にもっと関心があります。変更が行われた場合、他の接続では表示されないことに気づきます(この場合は、データの読み取りのみで、何も変更しません) – wolfcastle
データを失うことはありません最終的にSAVEPOINTSを使用することができます。 – Madthew