Re: Transactions involving multiple postgres foreign servers, take2 - Mailing list pgsql-hackers
From | Tatsuo Ishii |
---|---|
Subject | Re: Transactions involving multiple postgres foreign servers, take2 |
Date | |
Msg-id | 20200616.233617.2007526345822051694.t-ishii@sraoss.co.jp Whole thread Raw |
In response to | Re: Transactions involving multiple postgres foreign servers, take 2 (Amit Kapila <amit.kapila16@gmail.com>) |
Responses |
Re: Transactions involving multiple postgres foreign servers, take 2
|
List | pgsql-hackers |
>> > I think the problem mentioned above can occur with this as well or if >> > I am missing something then can you explain in further detail how it >> > won't create problem in the scenario I have used above? >> >> So the problem you mentioned above is like this? (S1/S2 denotes >> transactions (sessions), N1/N2 is the postgreSQL servers). Since S1 >> already committed on N1, S2 sees the row on N1. However S2 does not >> see the row on N2 since S1 has not committed on N2 yet. >> > > Yeah, something on these lines but S2 can execute the query on N1 > directly which should fetch the data from both N1 and N2. The algorythm assumes that any client should access database through a middle ware. Such direct access is prohibited. > Even if > there is a solution using REPEATABLE READ isolation level we might not > prefer to use that as the only level for distributed transactions, it > might be too costly but let us first see how does it solve the > problem? The paper extends Snapshot Isolation (SI, which is same as our REPEATABLE READ isolation level) to "Global Snapshot Isolation", GSI). I think GSI will solve the problem (atomic visibility) we are discussing. Unlike READ COMMITTED, REPEATABLE READ acquires snapshot at the time when the first command is executed in a transaction (READ COMMITTED acquires a snapshot at each command in a transaction). Pangea controls the timing of the snapshot acquisition on pair of transactions (S1/N1,N2 or S2/N1,N2) so that each pair acquires the same snapshot. To achieve this, while some transactions are trying to acquire snapshot, any commit operation should be postponed. Likewise any snapshot acquisition should wait until any in progress commit operations are finished (see Algorithm I to III in the paper for more details). With this rule, the previous example now looks like this: you can see SELECT on S2/N1 and S2/N2 give the same result. S1/N1: DROP TABLE t1; DROP TABLE S1/N1: CREATE TABLE t1(i int); CREATE TABLE S1/N2: DROP TABLE t1; DROP TABLE S1/N2: CREATE TABLE t1(i int); CREATE TABLE S1/N1: BEGIN; BEGIN S1/N2: BEGIN; BEGIN S2/N1: BEGIN; BEGIN S1/N1: SET transaction_isolation TO 'repeatable read'; SET S1/N2: SET transaction_isolation TO 'repeatable read'; SET S2/N1: SET transaction_isolation TO 'repeatable read'; SET S1/N1: INSERT INTO t1 VALUES (1); INSERT 0 1 S1/N2: INSERT INTO t1 VALUES (1); INSERT 0 1 S2/N1: SELECT * FROM t1; i --- (0 rows) S2/N2: SELECT * FROM t1; i --- (0 rows) S1/N1: PREPARE TRANSACTION 's1n1'; PREPARE TRANSACTION S1/N2: PREPARE TRANSACTION 's1n2'; PREPARE TRANSACTION S2/N1: PREPARE TRANSACTION 's2n1'; PREPARE TRANSACTION S1/N1: COMMIT PREPARED 's1n1'; COMMIT PREPARED S1/N2: COMMIT PREPARED 's1n2'; COMMIT PREPARED S2/N1: COMMIT PREPARED 's2n1'; COMMIT PREPARED Best regards, -- Tatsuo Ishii SRA OSS, Inc. Japan English: http://www.sraoss.co.jp/index_en.php Japanese:http://www.sraoss.co.jp
pgsql-hackers by date: