pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Luke Lonergan <llonergan@greenplum.com>
To: Mark Kirkwood <markir@paradise.net.nz>
Cc: pgsql-performance@postgresql.org, "eng@intranet.greenplum.com" <eng@intranet.greenplum.com>
Subject: Re: Hardware/OS recommendations for large databases (
Date: Wed, 23 Nov 2005 18:29:49 -0800
Message-ID: <BFAA659D.145E5%llonergan@greenplum.com> (raw)
In-Reply-To: <4382A840.3030401@paradise.net.nz>

Mark,

This is an excellent idea ­ unfortunately I¹m in Maui right now (Mahalo!)
and I¹m not getting to testing with this.  My first try was with 8.0.3 and
it¹s an 8.1 function I presume.

Not to be lazy ­ but any hint as to how to do the same thing for 8.0?

- Luke


On 11/21/05 9:10 PM, "Mark Kirkwood" <markir@paradise.net.nz> wrote:

> Luke Lonergan wrote:
> 
>> > So that leaves the question - why not more than 64% of the I/O scan rate?
>> > And why is it a flat 64% as the I/O subsystem increases in speed from
>> > 333-400MB/s?
>> >
> 
> It might be interesting to see what effect reducing the cpu consumption
>   entailed by the count aggregation has - by (say) writing a little bit
> of code to heap scan the desired relation (sample attached).
> 
> Cheers
> 
> Mark
> 
> 
> 
> 
> 
> 
> /*
>  * fastcount.c
>  *
>  * Do a count that uses considerably less CPU time than an aggregate.
>  */
> 
> #include "postgres.h"
> 
> #include "funcapi.h"
> #include "access/heapam.h"
> #include "catalog/namespace.h"
> #include "utils/builtins.h"
> 
> 
> extern Datum fastcount(PG_FUNCTION_ARGS);
> 
> 
> PG_FUNCTION_INFO_V1(fastcount);
> Datum
> fastcount(PG_FUNCTION_ARGS)
> {
>  text    *relname = PG_GETARG_TEXT_P(0);
>  RangeVar   *relrv;
>  Relation rel;
>  HeapScanDesc scan;
>  HeapTuple tuple;
>  int64  result = 0;
> 
>  /* Use the name to get a suitable range variable and open the relation. */
>  relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname));
>  rel = heap_openrv(relrv, AccessShareLock);
> 
>  /* Start a heap scan on the relation. */
>  scan = heap_beginscan(rel, SnapshotNow, 0, NULL);
>  while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
>  {
>   result++;
>  }
> 
>  /* End the scan and close up the relation. */
>  heap_endscan(scan);
>  heap_close(rel, AccessShareLock);
> 
> 
>  PG_RETURN_INT64(result);
> }

view thread (173+ messages)  latest in thread

Message-ID: <BFAA659D.145E5%llonergan@greenplum.com>
Permalink:  ../BFAA659D.145E5%25llonergan@greenplum.com/
Also on:    postgresql.org/message-id/BFAA659D.145E5%llonergan@greenplum.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: llonergan@greenplum.com, markir@paradise.net.nz, eng@intranet.greenplum.com
  Subject: Re: Hardware/OS recommendations for large databases (
  In-Reply-To: <BFAA659D.145E5%llonergan@greenplum.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox