Re: [HACKERS] Open 6.5 items
От | Vadim Mikheev |
---|---|
Тема | Re: [HACKERS] Open 6.5 items |
Дата | |
Msg-id | 375686DA.B584296E@krs.ru обсуждение исходный текст |
Ответ на | RE: [HACKERS] Open 6.5 items ("Hiroshi Inoue" <Inoue@tpf.co.jp>) |
Ответы |
Re: [HACKERS] Open 6.5 items
RE: [HACKERS] Open 6.5 items |
Список | pgsql-hackers |
Hiroshi Inoue wrote: > > However,when I did vacuum while testing I got the following error > message. > ERROR: Child itemid marked as unused > > TransactionId-s of tuples in update chain may be out of order. 1. Fix and explanation in xact.c:CommitTransaction(): RecordTransactionCommit(); /* * Let others know about no transaction in progress by me. * Note that this must be done _before_ releasing lockswe hold * and SpinAcquire(ShmemIndexLock) is required - or bad (too high) * XmaxRecent value might be used byvacuum: UPDATE with xid 0 is * blocked by xid 1' UPDATE, xid 1 is doing commit while xid 2 * gets snapshot - if xid2' GetSnapshotData sees xid 1 as running * then it must see xid 0 as running as well or XmaxRecent = 1 * might beused by concurrent vacuum causing * ERROR: Child itemid marked as unused * This bug was reported by HiroshiInoue and I was able to reproduce * it with 3 sessions and gdb. - vadim 06/03/99 */ if (MyProc != (PROC *)NULL) { SpinAcquire(ShmemIndexLock); MyProc->xid = InvalidTransactionId; MyProc->xmin = InvalidTransactionId; SpinRelease(ShmemIndexLock); } 2. It was possible to get two versions of the same row from select. Fixed by moving MyProc->xid assignment from StartTransaction()inside GetNewTransactionId(). Thanks, Hiroshi! And please run your tests - I used just 3 sessions and gdb. Vadim
В списке pgsql-hackers по дате отправления: