Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-27 Thread Alvaro Herrera
Itagaki Takahiro wrote:
 
 Here is a patch to fix a bug in handling default values in reloptions.
 This fix should be applied to HEAD and 8.4.0.
 
 I used 'magic number -1' to propagate not-specified information to
 autovacuum process. It might look strange because the default value is
 out of range of the reloption, but I think it has less impact to the
 codes comapred with other solutions (dynamic default values etc.).

I realized that any other solution here is going to be more complex and
thus less appropriate for backpatch.  I still don't like this very much
because it doesn't seem to offer enough flexibility to user-specified
reloptions; but any patch we come up with here is going to be applicable
to CVS HEAD.

So I'm going to apply your patch to both 8.4 and HEAD; we can always
improve it later, I guess.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [HACKERS] [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-27 Thread Itagaki Takahiro

Alvaro Herrera alvhe...@commandprompt.com wrote:

 So I'm going to apply your patch to both 8.4 and HEAD; we can always
 improve it later, I guess.

Thank you for your applying.
I think the fix is ugly, too. We need to introduce cleaner solution for 8.5.

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center



-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-19 Thread Alvaro Herrera
Itagaki Takahiro wrote:

 To fix the bug, each field in StdRdOptions should have not-specified flag.
 If not specified, autovacuum should use current GUC settings instead of
 reloptions. Is it possible to change the default values of reloptions
 to some magic number (-1 or so) ?

Ah.  After checking the code I remember that this was right at some
point, but it was lost when the parsing step was made to use a table
(fillRelOptions).  This behavior could be restored by having the fill
routine have a callback of some sort; we could use that to set a boolean
in StdRdOptions that indicated whether they are set in reloptions or are
default values.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-19 Thread Itagaki Takahiro

Alvaro Herrera alvhe...@commandprompt.com wrote:

 we could use that to set a boolean
 in StdRdOptions that indicated whether they are set in reloptions or are
 default values.

Do you mean we will have a boolean field *for each* field in StdRdOptions?
We should remember whether a field was specified or not independntly.

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center



-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-19 Thread Itagaki Takahiro

Here is a patch to fix a bug in handling default values in reloptions.
This fix should be applied to HEAD and 8.4.0.

I used 'magic number -1' to propagate not-specified information to
autovacuum process. It might look strange because the default value is
out of range of the reloption, but I think it has less impact to the
codes comapred with other solutions (dynamic default values etc.).

 To fix the bug, each field in StdRdOptions should have not-specified flag.
 If not specified, autovacuum should use current GUC settings instead of
 reloptions. Is it possible to change the default values of reloptions
 to some magic number (-1 or so) ?

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center



fix-relopts-20090820.patch
Description: Binary data

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-19 Thread Alvaro Herrera
Itagaki Takahiro wrote:
 
 Alvaro Herrera alvhe...@commandprompt.com wrote:
 
  we could use that to set a boolean
  in StdRdOptions that indicated whether they are set in reloptions or are
  default values.
 
 Do you mean we will have a boolean field *for each* field in StdRdOptions?

No, I was thinking in a single value for all of autovac options ...

 We should remember whether a field was specified or not independntly.

I'm not sure what you are suggesting ...?

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-19 Thread Itagaki Takahiro

Alvaro Herrera alvhe...@commandprompt.com wrote:

  We should remember whether a field was specified or not independntly.
 I'm not sure what you are suggesting ...?

Please imagine that:

=# SET autovacuum_vacuum_scale_factor = 0.05;
=# ALTER TABLE tbl SET (autovacuum_vacuum_threshold = 10);

AutoVacOpts.vacuum_threshold should be 10 (comes from reloptions),
but AutoVacOpts.vacuum_scale_factor should be DEFAULT (comes from GUC).

If we use boolean flags, we need booleans for each fields in AutoVacOpts.
(vacuum_threshold_is_default, vacuum_scale_factor_is_default, ...)

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center



-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-19 Thread Alvaro Herrera
Itagaki Takahiro wrote:
 
 Alvaro Herrera alvhe...@commandprompt.com wrote:
 
   We should remember whether a field was specified or not independntly.
  I'm not sure what you are suggesting ...?
 
 Please imagine that:
 
 =# SET autovacuum_vacuum_scale_factor = 0.05;
 =# ALTER TABLE tbl SET (autovacuum_vacuum_threshold = 10);

Uh, but this doesn't work because you can't SET inside a session and
have autovacuum read it.  Only the values that you change with ALTER
TABLE can be read by autovacuum; the rest of the values come from
postgresql.conf.

But I'm very dizzy today so perhaps I'm missing something obvious.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-18 Thread Itagaki Takahiro
PostgreSQL version: 8.4.0
Operating system:   all versions

If we set FILLFACTOR to a table, autovacuum parameters in postgresql.conf
will not affect to the table; default values are always used.

In 8.4.0, we create StdRdOptions if a relation has some fields in
pg_class.reloption. Then, unspecified fields are filled with the
default values. The values are always hard-coded default values and
don't reflect current GUC settings.

For example:
pg_class.reloptions = {fillfactor=70}
makes
StdRdOptions { fillfactor=70, vacuum_scale_factor=0.2, ... }
  ~~~
  always default

To fix the bug, each field in StdRdOptions should have not-specified flag.
If not specified, autovacuum should use current GUC settings instead of
reloptions. Is it possible to change the default values of reloptions
to some magic number (-1 or so) ?

There might be another idea that we fill StdRdOptions with current GUC
settings instead of hard-coded default values. It looks cleaner, but
we need to treat dynamic default values and invalidate reloptions
if we reload settings.

How do we fix it?

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-18 Thread Euler Taveira de Oliveira
Itagaki Takahiro escreveu:
 In 8.4.0, we create StdRdOptions if a relation has some fields in
 pg_class.reloption. Then, unspecified fields are filled with the
 default values. The values are always hard-coded default values and
 don't reflect current GUC settings.
 
Hey, how I couldn't notice that. :(

 To fix the bug, each field in StdRdOptions should have not-specified flag.
 If not specified, autovacuum should use current GUC settings instead of
 reloptions. Is it possible to change the default values of reloptions
 to some magic number (-1 or so) ?
 
BTW, we agreed that magic numbers is a hack in pg_autovacuum and we wouldn't
use it in reloptions [1].

 There might be another idea that we fill StdRdOptions with current GUC
 settings instead of hard-coded default values. It looks cleaner, but
 we need to treat dynamic default values and invalidate reloptions
 if we reload settings.
 
+1. I'm afraid we need to touch too much code for a fix. Let's do it for 8.5.
I'll try to come up with a patch.

A not-so-invasive code is to transform all AutoVacOpts elements in pointers
and to leave the default assignment to relation_needs_vacanalyze(). If nobody
steps up I'll give it a stab later.


[1] http://archives.postgresql.org/pgsql-hackers/2009-02/msg00303.php


-- 
  Euler Taveira de Oliveira
  http://www.timbira.com/


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] fillfactor hides autovacuum parameters in 8.4.0

2009-08-18 Thread Alvaro Herrera
Itagaki Takahiro wrote:
 PostgreSQL version: 8.4.0
 Operating system:   all versions
 
 If we set FILLFACTOR to a table, autovacuum parameters in postgresql.conf
 will not affect to the table; default values are always used.
 
 In 8.4.0, we create StdRdOptions if a relation has some fields in
 pg_class.reloption. Then, unspecified fields are filled with the
 default values. The values are always hard-coded default values and
 don't reflect current GUC settings.

Hmm, I'm fairly sure the code had this right originally ... maybe it got
drowned in some of the infinite reworking of that patch and I neglected
to test it.  I'll have a look tomorrow.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs