Re: tables with 300+ partitions

From: "Scott Marlowe" <scott(dot)marlowe(at)gmail(dot)com>
To: "Pablo Alcaraz" <pabloa(at)laotraesquina(dot)com(dot)ar>
Cc: "Steven Flatt" <steven(dot)flatt(at)gmail(dot)com>, pgsql-performance(at)postgresql(dot)org
Subject: Re: tables with 300+ partitions
Date: 2007-10-31 17:57:17
Message-ID: dcc563d10710311057p793cc9fav570f6ae075375cd0@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On 10/31/07, Pablo Alcaraz <pabloa(at)laotraesquina(dot)com(dot)ar> wrote:
>
> Steven Flatt wrote:
>
> On 10/30/07, Pablo Alcaraz <pabloa(at)laotraesquina(dot)com(dot)ar> wrote:
> > I did some testing. I created a 300 partitioned empty table. Then, I
> > inserted some rows on it and the perfomance was SLOW too.
>
>
> Is the problem with inserting to the partitioned table or selecting from it?
> It sounds like inserting is the problem in which case I ask: how are you
> redirecting inserts to the appropriate partition? If you're using rules,
> then insert performance will quickly degrade with number of partitions as
> *every* rule needs to be evaluated for *every* row inserted to the base
> table. Using a trigger which you can modify according to some schedule is
> much faster, or better yet, use some application-level logic to insert
> directly to the desired partition.
>
> Steve I was a program inserting into the base table. The program ran in 200+
> threads and every thread insert data on it. Every thread inserts a row every
> 3 seconds aprox.(or they used to do it), but when I put more partitions the
> insert speed went to 1 insert every 2 minutes.
>
> The selects that need to evaluate all partitions were slow too, but I think
> I can wait for them. :D
>
> I wonder if the update are slow too. I do not know that.
>
> Do I need to do a trigger for insert only or I need a trigger to update and
> delete too?

You need a trigger for any update / delete / insert you don't want to
be really slow. Basically, if a rule is doing it now, you need a
trigger to do it to speed it up.

My experience has been that at 200 to 1000 partitions, the speed of
the smaller tables still makes selects faster than with one big table
for certain kinds of access. At some point, the cost of planning a
lookup against thousands of tables will be more than the savings of
looking in a really small table.

The nice thing about triggers is that you can use maths to figure out
the name of the table you'll be writing to instead of a static table
like most rules use. So, all you have to do is make sure the new
tables get added under the parent and poof, you're ready to go, no
need for a new trigger.

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Tomáš Vondra 2007-10-31 17:57:28 Re: tables with 300+ partitions
Previous Message Ben 2007-10-31 17:24:13 Re: hardware and For PostgreSQL