Bây giờ, tôi đã đọc tài liệu về "Gói giao dịch ID", nhưng có một điều mà tôi thực sự không hiểu, tài liệu này là url sau http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html # VACUUM-CHO-VIẾT
23.1.4. Ngăn chặn các lỗi giao dịch ID
Ngữ nghĩa giao dịch MVCC của PostgreQuery phụ thuộc vào việc có thể so sánh các số ID giao dịch (XID): phiên bản hàng với XID chèn lớn hơn XID của giao dịch hiện tại là "trong tương lai" và không thể hiển thị cho giao dịch hiện tại. Nhưng vì ID giao dịch có kích thước giới hạn (32 bit), một cụm hoạt động trong một thời gian dài (hơn 4 tỷ giao dịch) sẽ bị ảnh hưởng bởi ID giao dịch: bộ đếm XID bao quanh bằng 0 và tất cả các giao dịch đột ngột nằm trong quá khứ dường như là trong tương lai - có nghĩa là đầu ra của họ trở nên vô hình. Trong ngắn hạn, mất dữ liệu thảm khốc. (Trên thực tế dữ liệu vẫn còn, nhưng đó là sự thoải mái lạnh lẽo nếu bạn không thể truy cập được.) Để tránh điều này, cần phải hút sạch mọi bảng trong mỗi cơ sở dữ liệu ít nhất hai tỷ giao dịch một lần.
Tôi không hiểu các tuyên bố "sẽ bị ảnh hưởng bởi ID giao dịch: bộ đếm XID kết thúc bằng 0 và tất cả các giao dịch đột ngột trong quá khứ dường như là trong tương lai - điều đó có nghĩa là đầu ra của chúng trở nên vô hình"
Ai đó có thể giải thích điều này? Tại sao sau khi cơ sở dữ liệu bị ảnh hưởng ID giao dịch, các giao dịch trong quá khứ sẽ xuất hiện trong tương lai? Nói tóm lại, tôi muốn biết liệu PostgreSQL sẽ trong tình huống "mất dữ liệu" sau khi hoàn tất ID giao dịch bằng cách tự động
Đối với quan điểm cá nhân của tôi, chúng tôi có thể nhận được ID giao dịch hiện tại bằng cách sử dụng hàm txid_cản () có đầu ra là 64 bit và sẽ không bị chu kỳ. bởi hàm txid_cản (). Ngoại trừ việc bạn sẽ sử dụng ID giao dịch đặt lại pg_resetxlog sau khi tắt máy chủ PostgreQuery. Tôi có đúng không Cảm ơn