Re: [WIP] In-place upgrade - Mailing list pgsql-hackers
From | Robert Haas |
---|---|
Subject | Re: [WIP] In-place upgrade |
Date | |
Msg-id | 603c8f070811031720n75506fcfx68b682e21eb8984f@mail.gmail.com Whole thread Raw |
In response to | Re: [WIP] In-place upgrade (Zdenek Kotala <Zdenek.Kotala@Sun.COM>) |
Responses |
Re: [WIP] In-place upgrade
Re: [WIP] In-place upgrade |
List | pgsql-hackers |
> You need to apply also two other patches: > which are located here: > http://wiki.postgresql.org/wiki/CommitFestInProgress#Upgrade-in-place_and_related_issues > I moved one related patch from another category here to correct place. Just to confirm, which two? > http://git.postgresql.org/?p=~davidfetter/upgrade_in_place/.git;a=snapshot;h=c72bafada59ed278ffac59657c913bc375f77808;sf=tgz > > It should contains every think including yesterdays improvements (delete, > insert, update works - inser/update only on table without index). Wow, sounds like great improvements. I understand your difficulties in keeping up with HEAD, but I hope we can figure out some solution, because right now I have a diff (that I can't apply) and a tarball (that I can't diff) and that is not ideal for reviewing. > Yeah, it is most difficult part :-) find correct names for it. I think that > each version of structure should have version suffix including lastone. And > of cource the last one we should have a general name without suffix - see > example: > > typedef struct PageHeaderData_04 { ...} PageHeaderData_04 > typedef struct PageHeaderData_03 { ...} PageHeaderData_03 > typedef PageHeaderData_04 PageHeaderData > > This allows you exactly specify version on places where you need it and keep > general name where version is not relevant. That doesn't make sense to me. If PageHeaderData and PageHeaderData_04 are the same type, how do you decide which one to use in any particular place in the code? > How suffix should looks it another question. I prefer to have 04 not only 4. > What's about PageHeaderData_V04? I prefer "V" as a delimiter rather than "_" because that makes it more clear that the number which follows is a version number, but I think "_V" is overkill. However, I don't really want to argue the point; I'm just throwing in my $0.02 and I am sure others will have their own views as well. > By the way what YMMV means? "Your Mileage May Vary." http://www.urbandictionary.com/define.php?term=YMMV >> I am pretty skeptical of the idea that all of the HeapTuple* functions >> can just be conditionalized on the page version and everything will >> Just Work. It seems like that is too low a level to be worrying about >> such things. Even if it happens to work for the changes between V3 >> and V4, what happens when V5 or V6 is changed in such a way that the >> answer to HeapTupleIsWhatever is neither "Yes" nor "No", but rather >> "Maybe" or "Seven"? The performance hit also sounds painful. I don't >> have a better idea right now though... > > OK. Currently it works (or I hope that it works). If somebody in a future > invent some special change, i think in most (maybe all) cases there will be > possible mapping. > > The speed is key point. When I check it last time I go 1% performance drop > in fresh database. I think 1% is good price for in-place online upgrade. I think that's arguable and something that needs to be more broadly discussed. I wouldn't be keen to pay a 1% performance drop for this feature, because it's not a feature I really need. Sure, in-place upgrade would be nice to have, but for me, dump and reload isn't a huge problem. It's a lot better than the 5% number you quoted previously, but I'm not sure whether it is good enough, I would feel more comfortable if the feature could be completely disabled via compile-time defines. Then you could build the system either with or without in-place upgrade, according to your needs. But I don't think that's very practical with HeapTuple* as functions. You could conditionalize away the switch, but the function call overhead would remain. To get rid of that, you'd need some enormous, fragile hack that I don't even want to contemplate. Really, what I'd ideally like to see here is a system where the V3 code is in essence error-recovery code. Everything should be V4-only unless you detect a V3 page, and then you error out (if in-place upgrade is not enabled) or jump to the appropriate V3-aware code (if in-place upgrade is enabled). In theory, with a system like this, it seems like the overhead for V4 ought to be no more than the cost of checking the page version on each page read, which is a cheap sanity check we'd be willing to pay for anyway, and trivial in cost. But I think we probably need some input from -core on this topic as well. ...Robert
pgsql-hackers by date: