Comments?

On Sat, Jun 13, 2009 at 3:44 PM, Stefan Kaltenbrunner
<ste...@kaltenbrunner.cc> wrote:

> I'm currently doing some benchmarking on a Nehalem box(
> http://www.kaltenbrunner.cc/blog/index.php?/archives/26-Benchmarking-8.4-Chapter-1Read-Only-workloads.html)
> with 8.4 and while investigating what looks like issues in pgbench I also
> noticed that using char() has more than a negligable overhead on some (very
> special) readonly(!) workloads.
>
> for example running sysbench in read-only mode against 8.4 results in a
> profile(for the full run) that looks similiar to:
>
> samples  %        symbol name
> 981690   11.0656  bcTruelen
> 359183    4.0487  index_getnext
> 311128    3.5070  AllocSetAlloc
> 272330    3.0697  hash_search_with_hash_value
> 258157    2.9099  LWLockAcquire
> 195673    2.2056  _bt_compare
> 190303    2.1451  slot_deform_tuple
> 168101    1.8948  PostgresMain
> 164191    1.8508  _bt_checkkeys
> 126110    1.4215  FunctionCall2
> 123965    1.3973  SearchCatCache
> 120629    1.3597  LWLockRelease
>
> the default sysbench mode actually uses a number of different queries and
> the ones dealing with char() are actually only a small part of the full set
> of queries sent.
> The specific query is causing bcTruelen to show up in the profile is:
>
> "SELECT c from sbtest where id between $1 and $2 order by c" where the
> parameters are for example
> $1 = '5009559', $2 = '5009658' - ie ranges of 100.
>
>
> benchmarking only that query results in:
>
> samples  %        symbol name
> 2148182  23.5861  bcTruelen
> 369463    4.0565  index_getnext
> 362784    3.9832  AllocSetAlloc
> 284198    3.1204  slot_deform_tuple
> 185279    2.0343  _bt_checkkeys
> 180119    1.9776  LWLockAcquire
> 172733    1.8965  appendBinaryStringInfo
> 144158    1.5828  internal_putbytes
> 141040    1.5486  AllocSetFree
> 138093    1.5162  printtup
> 124255    1.3643  hash_search_with_hash_value
> 117054    1.2852  heap_form_minimal_tuple
>
> at around 46000 queries/s
>
> changing the fault sysbench schema from:
>
>                             Table "public.sbtest"
>  Column |      Type      |                      Modifiers
>
> --------+----------------+-----------------------------------------------------
>  id     | integer        | not null default
> nextval('sbtest_id_seq'::regclass)
>  k      | integer        | not null default 0
>  c      | character(120) | not null default ''::bpchar
>  pad    | character(60)  | not null default ''::bpchar
> Indexes:
>    "sbtest_pkey" PRIMARY KEY, btree (id)
>    "k" btree (k)
>
>
> to
>                              Table "public.sbtest"
>  Column |       Type        |                      Modifiers
>
> --------+-------------------+-----------------------------------------------------
>  id     | integer           | not null default
> nextval('sbtest_id_seq'::regclass)
>  k      | integer           | not null default 0
>  c      | character varying | not null default ''::character varying
>  pad    | character(60)     | not null default ''::bpchar
> Indexes:
>    "sbtest_pkey" PRIMARY KEY, btree (id)
>    "k" btree (k)
>
> results in a near 50%(!) speedup in terms of tps to around 67000 queries/s.
> This is however an extreme case because the c column actually contains no
> data at all (except for an empty string).
>
> the profile for the changed testcase looks like:
> 430797    5.2222  index_getnext
> 396750    4.8095  AllocSetAlloc
> 345508    4.1883  slot_deform_tuple
> 228222    2.7666  appendBinaryStringInfo
> 227766    2.7610  _bt_checkkeys
> 193818    2.3495  LWLockAcquire
> 179925    2.1811  internal_putbytes
> 168871    2.0471  printtup
> 152026    1.8429  AllocSetFree
> 146333    1.7739  heap_form_minimal_tuple
> 144305    1.7493  FunctionCall2
> 128320    1.5555  hash_search_with_hash_value
>
>
> at the very least we should reconsider this part of our docs:
>
> "  There is no performance difference between these three types, apart from
> increased storage space when using the blank-padded type, and a few extra
> CPU cycles to check the length when storing into a length-constrained
> column."
>
> from http://www.postgresql.org/docs/8.4/static/datatype-character.html
>
>
>
> regards
>
> Stefan
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>



-- 
Lets call it Postgres

EnterpriseDB      http://www.enterprisedb.com

gurjeet[.sin...@enterprisedb.com
singh.gurj...@{ gmail | hotmail | indiatimes | yahoo }.com
Mail sent from my BlackLaptop device

Reply via email to