今、私は「トランザクションIDの折り返し」についてのドキュメントを読みましたが、本当に理解できないことがあり、ドキュメントは次のURLです http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html#VACUUM-FOR-WRAPAROUND
23.1.4。トランザクションIDの折り返しエラーの防止
PostgreSQLのMVCCトランザクションセマンティクスは、トランザクションID(XID)番号を比較できるかどうかに依存します。現在のトランザクションのXIDより大きい挿入XIDを持つ行バージョンは「将来」であり、現在のトランザクションからは見えません。ただし、トランザクションIDのサイズは制限されている(32ビット)ため、長時間実行されるクラスター(40億を超えるトランザクション)はトランザクションIDのラップアラウンドに悩まされます。XIDカウンターがゼロに戻り、すべての突然のトランザクションが過去は未来にあるように見えます—つまり、彼らの出力は見えなくなります。つまり、壊滅的なデータ損失です。(実際にはデータはまだ残っていますが、それが得られない場合は非常に快適です。)これを回避するには、20億トランザクションごとに少なくとも1回、すべてのデータベースのすべてのテーブルをバキュームする必要があります。
「トランザクションIDのラップアラウンドが発生します。XIDカウンターがゼロに折り返され、過去にあった突然のトランザクションはすべて未来にあるように見えます。つまり、出力が見えなくなります」というステートメントを理解できません。
誰かがこれを説明できますか?データベースでトランザクションIDのラップアラウンドが発生した後、過去にあったトランザクションが未来にあるように見えるのはなぜですか?要するに、トランザクションIDがautovacuumでラップアラウンドした後に、PostgreSQLが「データ損失」の状態になるかどうかを知りたいのです。
私の個人的な見解では、出力が64ビットで循環されないtxid_current()関数を使用して現在のトランザクションIDを取得できます。 txid_current()関数によって。ただし、PostgreSQLサーバーのシャットダウン後にpg_resetxlogリセットリセットトランザクションIDを使用します。私は正しいですか?ありがとう