From: | Junji TERAMOTO <teramoto(dot)junji(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | pgsql-patches(at)postgresql(dot)org |
Subject: | BTree vacuum before page splitting |
Date: | 2006-01-27 10:38:37 |
Message-ID: | 43D9F82D.6010004@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
Hi all,
This patch adds a function to remove unnecessary items before split
page of BTree.
When a new item is put in the page, it looks for the "LP_DELETE" item,
and removes that item. No heap access is required. Moreover, the penalty
is also few because it operates instead of page split.
Only when the super-exclusive lock was able to obtain, it removes
items because the deletion of the item might disturb the simultaneous
execution of the index scanning.
It is an optimistic control.
Because own scan might be lost even if the super-exclusive lock can
obtain, we also modify _bt_restscan().
The growth of the index frequently updated by using this patch can be
suppressed.
Your comments are welcome. Thanks.
----
For example(pgbench):
transaction type: TPC-B (sort of)
scaling factor: 100
number of clients: 50
number of transactions per client: 5000
number of transactions actually processed: 250000/250000
[before]
Relation Name File Name Tuples Pages File Size
public.accounts_pkey 16568 10001200 21899 175192
public.branches_pkey 16564 100 410 3280
public.tellers_pkey 16566 1000 374 2992
[after]
Relation Name File Name Tuples Pages File Size
public.accounts_pkey 16688 10004100 21899 175192
public.branches_pkey 16684 100 44 352 <==
public.tellers_pkey 16686 1000 26 208 <==
----
We also test this patch on DBT-2.
--
Junji Teramoto / teramoto.junji (a) lab.ntt.co.jp
NTT Cyber Space Lab.
Attachment | Content-Type | Size |
---|---|---|
btsplitvacuum-0124a.patch | text/plain | 7.2 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | NAKANO Yoshihisa | 2006-01-27 13:49:12 | Patch for ALTER TABLE / TYPE |
Previous Message | Thomas Hallgren | 2006-01-27 09:56:25 | Re: Adding a --quiet option to initdb |