Re: Postgres delays function returning large set of data

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: flippo00110001 <ddevec(at)umich(dot)edu>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Postgres delays function returning large set of data
Date: 2009-06-03 21:05:38
Message-ID: 162867790906031405g41ee8d67ja76531055543b827@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello

can you send source code? There are two types of C SRF functions. One
returns row ro by row, second store returned rows and returns block.
What did you use?

ignore comments (in czech please) and look on code -
http://www.postgres.cz/index.php/Iter%C3%A1tor_pole

regards
Pavel Stehule

2009/6/3 flippo00110001 <ddevec(at)umich(dot)edu>:
>
> Hello,
>
> First some background:
> For my application I need to collect and retrieve data at a very fast rate,
> faster than postgres can produce, but I also have the need to store and
> access a large range of metadata about the large sets of data I am storing.
> I am therefore attempting to use postgres for the metadata in combination
> with the HDF5 filesystem for the large sets of data to store data fast and
> have all of the power of a relational database over the metadata.
>
> Now onto the problem:
> To combine the two sets of data I have created a C function which can be
> dynamically loaded into postgres and takes a primary key index into the data
> and returns a large table (around 30000 elements) of the data (value and
> timestamp).  When I access the data directly it takes me around 30ms to just
> read the data out of my test case.  As the postgres C function is called
> many times and I must convert the raw data to tuples it introduces more
> overhead bringing the data to take around 2000ms to run the testcase, this
> is still acceptable.  My problem is when I perform an actual query over my
> test case postgres takes around 22000 ms to retrieve the sets of data.  My
> concern is: what is postgres doing in these extra 20 seconds, and how can I
> make this run faster?
>
> In summary:
> I have a large testcase.
> I am running a C function from postgres which takes a primary key and
> returns a setof (int4, int4) with around 30000 tuples returned per call
> my c function, when timed over the duration of the test case, takes 2
> seconds to run.
> the postgres query "select * from function(args);" takes around 11 times
> this amount of time to execute
>
> my function is defined as
> create or replace function(IN args, IN..., OUT name1 int4, OUT name2 int4)
> returns setof record as 'libname.so', 'fcnname' LANGUAGE C IMMUTABLE STRICT;
>
> I'm sorry if this is the wrong forum, I was torn between hackers and
> performance.
> Thank you for any assistance.
>
> --
> View this message in context: http://www.nabble.com/Postgres-delays-function-returning-large-set-of-data-tp23853886p23853886.html
> Sent from the PostgreSQL - hackers mailing list archive at Nabble.com.
>
>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers
>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2009-06-03 21:11:43 Re: Plan time Improvement - 64bit bitmapset
Previous Message Tom Lane 2009-06-03 21:01:34 Re: Locks on temp table and PREPARE