Обсуждение: BUG #3479: contraint exclusion and locks

Поиск
Список
Период
Сортировка

BUG #3479: contraint exclusion and locks

От
"Tiago Jacobs"
Дата:
The following bug has been logged online:

Bug reference:      3479
Logged by:          Tiago Jacobs
Email address:      tiago@mdtestudio.com.br
PostgreSQL version: 8.2.4
Operating system:   Linux 2.6.21.5
Description:        contraint exclusion and locks
Details:

Hi People!

Connection #1
create table tab (dt_tab date);
create table tab_2 () inherits (tab);
create table tab_1 () inherits (tab);
alter table tab_2 add constraint constraint_x check (dt_tab >= '20070701');
alter table tab_2 add constraint constraint_y check (dt_tab <= '20070731');
alter table tab_1 add constraint constraint_x check (dt_tab >= '20070601');
alter table tab_1 add constraint constraint_y check (dt_tab <= '20070630');

explain select * from tab where dt_tab = '20070705';

>"Result  (cost=0.00..73.50 rows=22 width=4)"
>"  ->  Append  (cost=0.00..73.50 rows=22 width=4)"
>"        ->  Seq Scan on tab  (cost=0.00..36.75 rows=11 width=4)"
>"              Filter: (dt_tab = '2007-07-05'::date)"
>"        ->  Seq Scan on tab_2 tab  (cost=0.00..36.75 rows=11 width=4)"
>"              Filter: (dt_tab = '2007-07-05'::date)"


Connection #2
begin;
lock table tab_1 in exclusive mode;
TrUNCATE TABLE tab_1;

Connection #1
explain select * from tab where dt_tab = '20070705'

oh-ow... It waits while the table (That is not used) is locked.

Even that the final plan dont use tab_2007_07, it wait for unlock of table
for make the plan.

So, if I`m running a VACUUM on specific table, all the querys on the
"master" table don't work.

Best Regards,
Tiago

Re: BUG #3479: contraint exclusion and locks

От
Gregory Stark
Дата:
"Tiago Jacobs" <tiago@mdtestudio.com.br> writes:

> oh-ow... It waits while the table (That is not used) is locked.
>
> Even that the final plan dont use tab_2007_07, it wait for unlock of table
> for make the plan.

Well one of the reasons exclusive locks are taken are to make changes to
constraints.

> So, if I`m running a VACUUM on specific table, all the querys on the
> "master" table don't work.

VACUUM doesn't take an exclusive lock. VACUUM is designed to be run regularly
without interfering with full use of the table.

You're not running VACUUM FULL are you? That's much more intrusive and
shouldn't be needed in regular operation.

--
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com

Re: BUG #3479: contraint exclusion and locks

От
Tom Lane
Дата:
"Tiago Jacobs" <tiago@mdtestudio.com.br> writes:
> oh-ow... It waits while the table (That is not used) is locked.

This is not a bug.  It has to inspect the table to find out that
there is a constraint.

            regards, tom lane

Re: BUG #3479: contraint exclusion and locks

От
Tiago Daniel Jacobs
Дата:
Tom and Gregory.  U're right! The problem is
that we're using constraints for partitioned tables and by definition,
a partition never, absolutely never, can affect the entire system.

But I think that we have nothing to do about this. There are plans to
another kind of partitioning? If yes, I would like to contribute. If
not, i`m okay.

Just tried to help.

Okay, sorry about take your time for it.

Tiago


Tom Lane escreveu:

  "Tiago Jacobs" <tiago@mdtestudio.com.br> writes:


    oh-ow... It waits while the table (That is not used) is locked.



This is not a bug.  It has to inspect the table to find out that
there is a constraint.

            regards, tom lane





Gregory Stark escreveu:

  "Tiago Jacobs" <tiago@mdtestudio.com.br> writes:



    oh-ow... It waits while the table (That is not used) is locked.

Even that the final plan dont use tab_2007_07, it wait for unlock of table
for make the plan.



Well one of the reasons exclusive locks are taken are to make changes to
constraints.



    So, if I`m running a VACUUM on specific table, all the querys on the
"master" table don't work.



VACUUM doesn't take an exclusive lock. VACUUM is designed to be run regularly
without interfering with full use of the table.

You're not running VACUUM FULL are you? That's much more intrusive and
shouldn't be needed in regular operation.

Re: BUG #3479: contraint exclusion and locks

От
Gregory Stark
Дата:
"Tiago Daniel Jacobs" <tiago@mdtestudio.com.br> writes:

> <small><font face="Arial">Tom and Gregory.  U're right! The problem is
> that we're using constraints for partitioned tables and by definition,
> a partition never, absolutely never, can affect the entire system.<br>
> <br>
> But I think that we have nothing to do about this. There are plans to
> another kind of partitioning? If yes, I would like to contribute. If
> not, i`m okay. <br>

There are lots of ideas of where to go with partitioning including possibly
ditching the use of constraints. But I don't think there's any settled plans
yet.

--
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com

Re: BUG #3479: contraint exclusion and locks

От
"Simon Riggs"
Дата:
On Mon, 2007-07-23 at 11:46 -0300, Tiago Daniel Jacobs wrote:
> Tom and Gregory.  U're right! The problem is that we're using
> constraints for partitioned tables and by definition, a partition
> never, absolutely never, can affect the entire system.
>
Yeh, the problem is that partitioning uses additional information to
avoid reading data. The additional information and the actual data need
to be kept in step, so at some point we may need to re-write that data
and we'll always need a lock to do that.

So whether we use constraints, segment headers or what have you,
there'll still be a need to lock and be locked out.

--
  Simon Riggs
  EnterpriseDB  http://www.enterprisedb.com

Re: BUG #3479: contraint exclusion and locks

От
Tiago Daniel Jacobs
Дата:
Hi, why if I REINDEX a inherited table, all tables are locked?

Example:
[conn #1]     REINDEX TABLE month_a;
[conn #2]     PREPARE updt as update month_b set col_a=1 where col_b=$1;

The query on conn#2 waits.

regards,
Tiago

Tom Lane escreveu:

  "Tiago Jacobs" <tiago@mdtestudio.com.br> writes:


    oh-ow... It waits while the table (That is not used) is locked.



This is not a bug.  It has to inspect the table to find out that
there is a constraint.

            regards, tom lane