Fri Dec 12 07:52:21 PST 2008
- Previous message: [Slony1-general] Do finishTableAfterCopy and ANALYZE need to be serialized with data copy?
- Next message: [Slony1-general] Master and slave slony1 versions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Richard Yen wrote: > On Nov 18, 2008, at 2:22 PM, Christopher Browne wrote: >> >> Haven't had the Round Tuits to get to it; if you could provide the >> beginnings of it, that would make it easier to find the (hopefully >> fewer, if effort is shared!) hours of implementation effort. > > Well, I've put some effort into getting finishTableAfterCopy and > ANALYZE into a separate thread. The problem that we run into is that > the entire copy_set is under one transaction. This means three things: > > 1. Entries in sl_table are not visible to other connections to the > database, so tab_id doesn't exist when you try to run > finishTableAfterCopy > 2. If you provide full name of a table, reindex and analyze don't do > anything because you're doing this on stale data. > 3. If you put each iteration of setAddTable, prepareTableForCopy, and > COPY under remote_worker.c:2906 in its own transaction, if anything > fails, we can't roll back, so the old data is all gone. This implies > that the reindex and analyze need either to happen *in* the > transaction or *after* everything is done. > > 1 and 2 are expected, but I wonder if you guys have anything to say > about 3. I'm probably going to be speaking some serious DBA-heresy > here, but the way I see it, if you're going to turn a node into a > subscriber, you don't care about whether the data gets lost anyways. > Therefore, we *do* put setAddTable, prepareTableForCopy and COPY in > one transaction, with the reindex and analyze in a separate > transaction, even if anything fails, we'll still be okay. Do you have > anything to say to this? > > Are there any other suggestions? #3 comes as no great surprise. If you try to "multithread" on the subscriber, then it comes as no surprise that this needs to represent several transactions on the subscriber, and that failures could potentially take place in *any* of those transactions. It is a given that, by separating *any* of the subscriber work into another transaction, you have multiple transactions. Once that is accepted, then, yes, some "heresy" becomes implicit :-). Yes, indeed, if [SetAddTable, prepareTable, COPY] and [reindex, analyze] are in separate transactions, that has to be considered OK. Failure of *any* transaction breaks the subscription attempt; that is actually no worse than what we have today, because what we have, today, is one giant transaction for the subscription, where if the slightest bit of it falls over, the whole transaction rolls back. So while the change means that there are more transactions (by count) that need to succeed in order for the whole to succeed, that isn't introducing any new real *work*. Seems fine to me! -- let name="cbbrowne" and tld="ca.afilias.info" in String.concat "@" [name;tld];; <http://dba2.int.libertyrms.com/> Christopher Browne (416) 673-4124 (land)
- Previous message: [Slony1-general] Do finishTableAfterCopy and ANALYZE need to be serialized with data copy?
- Next message: [Slony1-general] Master and slave slony1 versions
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-general mailing list