Ora, ho letto il documento su "Transaction ID Wraparound", ma c'è qualcosa che davvero non capisco, il documento è il seguente URL http://www.postgresql.org/docs/9.0/static/routine-vacuuming .html # VUOTO PER L'AVVOLGENTE
23.1.4. Prevenzione di errori avvolgenti dell'ID transazione
La semantica della transazione MVCC di PostgreSQL dipende dalla possibilità di confrontare i numeri ID transazione (XID): una versione di riga con un XID di inserimento maggiore dell'XID della transazione corrente è "in futuro" e non dovrebbe essere visibile alla transazione corrente. Ma poiché gli ID di transazione hanno dimensioni limitate (32 bit), un cluster in esecuzione per un lungo periodo (oltre 4 miliardi di transazioni) subirebbe un avvolgimento dell'ID transazione: il contatore XID si sposta a zero e tutte le improvvise transazioni che si trovavano nel il passato sembra essere nel futuro, il che significa che la loro produzione diventa invisibile. In breve, catastrofica perdita di dati. (In realtà i dati sono ancora lì, ma è un conforto freddo se non riesci a raggiungerlo.) Per evitare ciò, è necessario aspirare ogni tabella in ogni database almeno una volta ogni due miliardi di transazioni.
Non capisco le affermazioni "subirebbero un avvolgimento dell'ID transazione: il contatore XID si sposta a zero e tutte le transazioni improvvise che erano in passato sembrano essere in futuro - il che significa che il loro output diventa invisibile"
Qualcuno può spiegare questo? Perché dopo che il database subisce un wrapping di ID transazione, le transazioni in passato sembrano essere in futuro? In breve, voglio sapere se PostgreSQL si troverà nella situazione di "perdita di dati" dopo l'ID transazione avvolgente da parte di autovacuum。
Per le mie opinioni personali, possiamo ottenere l'ID della transazione corrente utilizzando la funzione txid_current () che produce output a 64 bit e non verrà ciclicamente. Quindi penso che l'ID della transazione di inserimento delle tuple che sappia come xmin non sarà più grande dell'xid che ottiene dalla funzione txid_current (). Tranne che si utilizzerà pg_resetxlog reset reimposta ID transazione dopo aver chiuso il server PostgreSQL. Ho ragione ? Grazie