čt 6. 12. 2018 v 16:12 odesílatel Robert Haas <robertmh...@gmail.com>
napsal:

> On Thu, Dec 6, 2018 at 2:11 AM Pavel Stehule <pavel.steh...@gmail.com>
> wrote:
> >> > I am sorry, I know zero about zheap - does zheap use fill factor? if
> yes, why?
> >>
> >> Good question.  It is required because tuples can expand (Update tuple
> >> to bigger length).  In such cases, we try to perform in-place update
> >> if there is a space in the page.  So, having fillfactor can help.
> >
> > Thank you for reply :)
>
> I suspect fillfactor is *more* likely to help with zheap than with the
> current heap.  With the current heap, you need to leave enough space
> to store entire copies of the tuples to try to get HOT updates.  But
> with zheap you only need enough room for the anticipate growth in the
> tuples.
>
> For instance, let's say that you plan to update 30% of the tuples in a
> table and make them 1 byte larger.  With the heap, you'd need to leave
> ~ 3/13 = 23% of each page empty, plus a little bit more to allow for
> the storage growth.  So to make all of those updates HOT, you would
> probably need a fillfactor of roughly 75%.  Unfortunately, that will
> make your table larger by one-third, which is terrible.
>
> On the other hand, with zheap, you only need to leave enough room for
> the increased amount of tuple data.  If you've got 121 items per page,
> as in Mithun's statistics, that means you need 121 bytes of free space
> to do all the updates in place.  That means you need a fillfactor of 1
> - (121/8192) = ~98%.  To be conservative you can set a fillfactor of
> say 95%.  Your table will only get slightly bigger, and all of your
> updates will be in place, and everything will be great.  At least with
> respect to fillfactor -- zheap is not free of other problems.
>

I have a problem to imagine it. When fill factor will be low, then there is
high risk of high fragmentation - or there some body should to do
defragmentation.


> Of course, you don't really set fillfactor based on an expectation of
> a single round of tuple updates, but imagine that the workload goes on
> for a while, with tuples getting bigger and smaller again as the exact
> values being stored change.  In a heap table, you need LOTS of empty
> space on each page to get HOT updates.  In a zheap table, you need
> very little, because the updates are in place.
>
> --
> Robert Haas
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>

Reply via email to