From: | mlw <markw(at)mohawksoft(dot)com> |
---|---|
To: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Musings |
Date: | 2002-05-05 14:01:57 |
Message-ID: | 3CD53B55.4910C709@mohawksoft.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
It is sunday morning and I have been musing about some PostgreSQL issues. As
some of you are aware, my dot com, dot died, and I am working on a business
plan for a consulting company which, amongst other things, will feature
PostgreSQL. As I am working on the various aspects, some issue pop up about
PostgreSQL.
Please don't take any of these personally, they are only my observations, if
you say they are non issues I would rather just accept that we disagree than
get into a nasty fight. They *are* issues to a corporate acceptance, I have
been challenged by IT people about them.
(1) Major version upgrade. This is a hard one, having to dump out and restore a
database to go from 7.1 to 7.2 or 7.2 to 7.3 is really a hard sell. If a
customer has a very large database, this represents a large amount of
down-time. If they are running on an operating system with file-size
limitations it is not an easy task. It also means that they have to have
additional storage which amount to at least a copy of the whole database.
(2) Update behavior, the least recently updated (LRU) tuple order in storage is
a problem. To have performance degrade as it does from updates is hard to
explain to a customer, and quite honestly, tells me I can not recommend
PostgreSQL for an environment in which the primary behavior is updating data.
[Index] --> [Target]->[LRU]->[1]->[2]->[3]->[MRU]
update tbl set foo = x where bar = y
The most recently updated (MRU) tuple, becomes [4] and the new tuple becomes
the MRU tuple.
[Index] --> [Target]->[LRU]->[1]->[2]->[3]->[4]->[MRU]
The above represents what PostgreSQL seems to currently do. Correct me if I'm
wrong. (I would love to be wrong here.) If we break the list at the beginning
and put the MRU tuple right after the target tuple (target tuple is the one
which the index points to), say like this:
[Index] --> [Target]->[MRU]->[1]->[2]->[3]->[LRU]
update tbl set foo = x where bar = y
[Index] --> [Target]->[MRU]->[4]->[3]->[2]->[1]->[LRU]
Again, the MRU becomes [4] but, rather than scanning each obsolete tuple to
find the end, the target tuple's next value is the MRU.
If updates and deletes could be handled this way, that would limit the update
and select performance degradation between vacuums.
From | Date | Subject | |
---|---|---|---|
Next Message | cbbrowne | 2002-05-05 14:21:50 | Re: Musings |
Previous Message | Vladimir Zolotykh | 2002-05-05 09:06:59 | Bad timestamp external representation 'Sun 05 May 11:53:44.731416 2002 EEST' |