Re: Exposing the Xact commit order to the user

Поиск
Список
Период
Сортировка
От Jan Wieck
Тема Re: Exposing the Xact commit order to the user
Дата
Msg-id 4BFD0019.7000804@Yahoo.com
обсуждение исходный текст
Ответ на Re: Exposing the Xact commit order to the user  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
Ответы Re: Exposing the Xact commit order to the user  (Jan Wieck <JanWieck@Yahoo.com>)
Re: Exposing the Xact commit order to the user  ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>)
Список pgsql-hackers
On 5/25/2010 3:18 PM, Kevin Grittner wrote:
> Jan Wieck <JanWieck@Yahoo.com> wrote:
>  
>> Have you ever looked at one of those queries, that Londiste or
>> Slony issue against the provider DB in order to get all the log
>> data that has been committed between two snapshots? Is that really
>> the best you can think of?
>  
> No, I admit I haven't.  In fact, I was thinking primarily in terms
> of log-driven situations, like HS.  What would be the best place for
> me to look to come up to speed on your use case?  (I'm relatively
> sure that the issue isn't that there's no information to find, but
> that a sequential pass over all available information would take a
> *long* time.)  I've been working through the issues on WAL-based
> replicas, and have some additional ideas and alternatives, but I'd
> like to see the "big picture", including trigger-based replication,
> before posting.

In short, what both systems are doing is as follows. An AFTER ROW 
trigger records the OLD PK and all changed columns, as well as the txid 
and a global, not cached serial number. Some background process 
periodically starts a serializable transaction and records the resulting 
snapshot.

To replicate from one consistent state to the next, the replication 
system now selects all log rows between two snapshots. Between here 
means it simulates MVCC visibility in the sense of that the writing 
transaction was in progress when the first snapshot was taken and had 
committed at the second. The resulting WHERE clause looks something like
    WHERE (xid > s1.xmax OR (xid >= s1.xmin AND xid IN (s1.xip)))      AND (xid < s2.xmin OR (xid <= s2.xmax AND xid
NOTIN (s2.xip)))
 

Note that xip here is a comma separated list of txid's. I think it is 
easy to see that this is not a cheap query.

Anyhow, that set of log rows is now ordered by the serial number and 
applied to the replica.

Without this logic, the replication system could not combine multiple 
origin sessions into one replication session without risking to never 
find a state, in which it can commit.

It may be possible to work with two sessions on the replica and not 
require any reordering of the original actions at all. I need to think 
about that for a little longer since this idea just occurred to me a 
second ago.


Jan

-- 
Anyone who trades liberty for security deserves neither
liberty nor security. -- Benjamin Franklin


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Stephen Frost
Дата:
Сообщение: Re: ExecutorCheckPerms() hook
Следующее
От: Jan Wieck
Дата:
Сообщение: Re: Exposing the Xact commit order to the user