Re: serializable read only deferrable
От | Dan Ports |
---|---|
Тема | Re: serializable read only deferrable |
Дата | |
Msg-id | 20101210054201.GB25308@csail.mit.edu обсуждение исходный текст |
Ответ на | Re: serializable read only deferrable ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>) |
Список | pgsql-hackers |
On Tue, Dec 07, 2010 at 10:14:24AM -0600, Kevin Grittner wrote: > > Essentially, instead of adding dependencies as you go along and > > abort once you hit a conflict, SERIALIZABLE READ ONLY DEFERRED > > transactions would assume the worst case from the start and thus > > be able to bypass the more detailed checks later on. > > Right -- such a transaction, having acquired a good snapshot, could > release all SSI resources and run without any of the SSI overhead. Yes, this makes sense. If no running transaction has ever read, and will never read before COMMIT, any value that's modified by a concurrent transaction, then they will not create snapshot anomalies, and the current snapshot has a place in the serial ordering. > > With this scheme, you'd at least stand some chance of eventually > > acquiring a consistent snapshot, even in the case of an endless > > stream of overlapping READ WRITE transactions. > > Yeah, I'd been twisting ideas around trying to find a good way to do > this; you've got it right at the conceptual level, I think. The only thing I'm worried about here is how much risk of starvation remains. You'd need to wait until there are no running r/w transactions accessing overlapping data sets; for some applications that might not be any better than waiting for the system to be idle. But I think there's no way around that, it's just the price you have to pay to get a snapshot that can never see an anomaly. > Pseudo-code of idea (conveniently ignoring locking issues and > non-serializable transactions): This seems reasonable to me. Let me know if you need help implementing it; I have some spare cycles right now. Dan -- Dan R. K. Ports MIT CSAIL http://drkp.net/
В списке pgsql-hackers по дате отправления: