Re: [GENERAL] huge table occupation after updates

Поиск
Список
Период
Сортировка
От Tom DalPozzo
Тема Re: [GENERAL] huge table occupation after updates
Дата
Msg-id CAK77FCSXSq07YykM9BA7Uppdtgw2+NoTFgHFG=S5pKRMJ3h8og@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [GENERAL] huge table occupation after updates  (Francisco Olarte <folarte@peoplecall.com>)
Ответы Re: [GENERAL] huge table occupation after updates
Re: [GENERAL] huge table occupation after updates
Список pgsql-general
Hi,
you're right, VACUUM FULL  recovered the space, completely.
So, at this point I'm worried about my needs.
I cannot issue vacuum full as I read it locks the table.
In my DB, I (would) need to have a table with one bigint id field+ 10 bytea fields, 100 bytes long each (more or less, not fixed). 
5/10000 rows maximum, but let's say 5000.
As traffic I can suppose 10000 updates per row per day (spread over groups of hours; each update involving two of those fields, randomly. 
Also rows are chosen randomly (in my test I used a block of 2000 just to try one possibility).
So, it's a total of 50 millions updates per day, hence (50millions * 100 bytes *2 fields updated) 10Gbytes net per day.
I'm afraid it's not possible, according to my results.
Reagrds
Pupillo













2016-12-10 13:38 GMT+01:00 Francisco Olarte <folarte@peoplecall.com>:
Hi Tom

On Sat, Dec 10, 2016 at 1:15 PM, Tom DalPozzo <t.dalpozzo@gmail.com> wrote:
...
> Reported table size is 1.5MB. OK.
That's 150 bytes per row, prety normal.
> Now, for 1000 times,  I update  2000 different rows each time, changing d0
> filed keeping the same length, and at the end of all,  I issued VACUUM.

And probably autovacuum or something similar kicked in meanwhile. 2M
updates is 200 updates per row, that's pretty heavy traffic, many
tables do not get that in their whole lifetime.

> Now table size is 29MB.
> Why so big? What is an upper bound to estimate a table occupation on disk?

Strictly, you could probably calculate an upper bound as row
size*number or insertions, given an update aproximates an insertion
plus deletion. Given the original insertion used 1.5Mb and you
repeated thar about 200 times, I would stimate 201*1.5=301.5Mb as an
upper bound, but I doubt that's of any use.

Those many updates probably left your table badly fragmented, with few
rows per page.  On a normal usage you do not need to worry, as
periodic vacuum would mark the space for reuse and the table will not
grow that big. But issuing an 1k updates on 20% of the table is hardly
normal usage, if you need this kind of usage maybe you should rethink
your strategies.

Vacuum full will probably pack the table and ''recover'' the space, it
should be fast with just 29Mb on disk. Not knowing your intended usage
nothing can be recommended, but I've had some usage patterns where a
heavy update plus vacuuum full was successfully used.

Francisco Olarte.

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

Предыдущее
От: Poul Kristensen
Дата:
Сообщение: Re: [GENERAL] ora2pg - Java Message Service (JMS) Type
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: [GENERAL] SELECT slow immediately after many update ordelete+insert, except using WHERE .. IN