Fw: [PERFORM] Query performance issue with 8.0.0beta1

2004-09-01 Thread Stefano Bonnin

- Original Message - 
From: Stefano Bonnin [EMAIL PROTECTED]
To: Josh Berkus [EMAIL PROTECTED]
Sent: Monday, August 30, 2004 4:13 PM
Subject: Re: [PERFORM] Query performance issue with 8.0.0beta1


 This is my postgres.conf, I have changed only the work_mem and
 shared_buffers parameters.

 DID you
  configure it for the 8.0 database?

 What does it mean? Is in 8.0 some important NEW configation parameter ?

 # pgdata = '/usr/local/pgsql/data'  # use data in another
 directory
 # hba_conf = '/etc/pgsql/pg_hba.conf'   # use hba info in another
 directory
 # ident_conf = '/etc/pgsql/pg_ident.conf'   # use ident info in
another
 directory
 # external_pidfile= '/var/run/postgresql.pid'   # write an extra pid file
 #listen_addresses = 'localhost' # what IP interface(s) to listen on;
 # defaults to localhost, '*' = any
 #port = 5432
 max_connections = 100
 #superuser_reserved_connections = 2
 #unix_socket_directory = ''
 #unix_socket_group = ''
 #unix_socket_permissions = 0777 # octal
 #rendezvous_name = ''   # defaults to the computer name
 #authentication_timeout = 60# 1-600, in seconds
 #ssl = false
 #password_encryption = true
 #krb_server_keyfile = ''
 #db_user_namespace = false

 shared_buffers = 2048   # min 16, at least max_connections*2, 8KB
 each
 work_mem = 2048 # min 64, size in KB
 #maintenance_work_mem = 16384   # min 1024, size in KB
 #max_stack_depth = 2048 # min 100, size in KB

 #max_fsm_pages = 2  # min max_fsm_relations*16, 6 bytes each
 #max_fsm_relations = 1000   # min 100, ~50 bytes each

 #max_files_per_process = 1000   # min 25
 #preload_libraries = ''

 #vacuum_cost_delay = 0  # 0-1000 milliseconds
 #vacuum_cost_page_hit = 1   # 0-1 credits
 #vacuum_cost_page_miss = 10 # 0-1 credits
 #vacuum_cost_page_dirty = 20# 0-1 credits
 #vacuum_cost_limit = 200# 0-1 credits

 #bgwriter_delay = 200   # 10-5000 milliseconds
 #bgwriter_percent = 1   # 1-100% of dirty buffers
 #bgwriter_maxpages = 100# 1-1000 buffers max at once

 #fsync = true   # turns forced synchronization on or off
 #wal_sync_method = fsync# the default varies across platforms:
 # fsync, fdatasync, open_sync, or
 open_datasync
 #wal_buffers = 8# min 4, 8KB each
 #commit_delay = 0   # range 0-10, in microseconds
 #commit_siblings = 5# range 1-100
 #checkpoint_segments = 3# in logfile segments, min 1, 16MB each
 #checkpoint_timeout = 300   # range 30-3600, in seconds
 #checkpoint_warning = 30# 0 is off, in seconds

 #archive_command = ''   # command to use to archive a logfile
 segment

 #enable_hashagg = true
 #enable_hashjoin = true
 #enable_indexscan = true
 #enable_mergejoin = true
 #enable_nestloop = true
 #enable_seqscan = true
 #enable_sort = true
 #enable_tidscan = true

 #effective_cache_size = 1000# typically 8KB each
 #random_page_cost = 4   # units are one sequential page fetch cost
 #cpu_tuple_cost = 0.01  # (same)
 #cpu_index_tuple_cost = 0.001   # (same)
 #cpu_operator_cost = 0.0025 # (same)

 #geqo = true
 #geqo_threshold = 12
 #geqo_effort = 5# range 1-10
 #geqo_pool_size = 0 # selects default based on effort
 #geqo_generations = 0   # selects default based on effort
 #geqo_selection_bias = 2.0  # range 1.5-2.0

 default_statistics_target = 20  # range 1-1000
 #from_collapse_limit = 8
 #join_collapse_limit = 8# 1 disables collapsing of explicit JOINs

 #log_destination = 'stderr' # Valid values are combinations of stderr,
 # syslog and eventlog, depending on
 # platform.

 # This is relevant when logging to stderr:
 #redirect_stderr = false# Enable capturing of stderr into log files.
 # These are only relevant if redirect_stderr is true:
 #log_directory = 'pg_log'   # Directory where logfiles are written.
 # May be specified absolute or relative to
 PGDATA
 #log_filename_prefix = 'postgresql_' # Prefix for logfile names.
 #log_rotation_age = 1440# Automatic rotation of logfiles will happen
 after
 # so many minutes.  0 to disable.
 #log_rotation_size = 10240  # Automatic rotation of logfiles will happen
 after
 # so many kilobytes of log output.  0 to
 disable.

 # These are relevant when logging to syslog:
 #syslog_facility = 'LOCAL0'
 #syslog_ident = 'postgres'


 # - When to Log -

 #client_min_messages = notice   # Values, in order of decreasing detail:
 #   debug5, debug4, debug3, debug2,
debug1,
 #   log, notice, warning, error

 #log_min_messages = notice  # Values, in order of decreasing detail:
  

Re: [PERFORM] Changing the column length

2004-09-01 Thread gnari
From: Michael Ryan S. Puncia [EMAIL PROTECTED]

 I am sorry that my question is out of line with this
 group(performance) but I need

-general might be more appropriate


 an urgent help :-( .pls .. I need to know how  to change the length of the
 column.

add a new column, use update to copy values from old column,
use alter table to rename columns

gnari



---(end of broadcast)---
TIP 4: Don't 'kill -9' the postmaster


Re: [PERFORM] Query performance issue with 8.0.0beta1

2004-09-01 Thread Stefano Bonnin
Server HP: Intel(R) Pentium(R) 4 CPU 2.26GHz
RAM 1GB
OS: RedHat 8
And the disk:

kernel: megaide: driver version 05.04f (Date: Nov 11, 2002; 18:15 EST)
kernel: megaide: bios version 02.06.07221605
kernel: megaide: LD 0 RAID1 status=ONLINE sectors=156297343
capacity=76317 MB drives=2
kernel: scsi0 : LSI Logic MegaIDE RAID BIOS Version 2.6.07221605, 8
targs 1 chans 8 luns
kernel:   Vendor: LSILOGIC  Model:  LD  0  IDERAID   Rev:
kernel:   Type:   Direct-Access  ANSI SCSI revision:
02

Thanks.
RedS


- Original Message - 
From: Josh Berkus [EMAIL PROTECTED]
To: Stefano Bonnin [EMAIL PROTECTED]
Sent: Monday, August 30, 2004 6:54 PM
Subject: Re: [PERFORM] Query performance issue with 8.0.0beta1


 Stefano,

  This is my postgres.conf, I have changed only the work_mem and
  shared_buffers parameters.

 And not very much, I see.

  DID you
   configure it for the 8.0 database?
 
  What does it mean? Is in 8.0 some important NEW configation parameter ?

 Well, there are but they shouldn't affect your case. However, there
are a
 lot of other settings that need to be adjusted.   Please post your
hardware
 plaform information:  OS, CPU, RAM, and disk setup.

 -- 
 Josh Berkus
 Aglio Database Solutions
 San Francisco



---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]


Re: [PERFORM] slower every day

2004-09-01 Thread Shridhar Daithankar
On Wednesday 01 Sep 2004 3:36 pm, G u i d o B a r o s i o wrote:
 Dear all,

   I am currently experiencing troubles with the performance of my
 critical's database.

   The problem is the time that the postgres takes to perform/return a
 query. For example, trying the \d tablename command takes between 4 or 5
 seconds. This table is very big, but I am not asking for the rows, only
 asking the table schema, so...why is this so slow?!?!? My last
 administrative action into this table was a reindex to all the indexes via
 the BKI in standalone mode. I thought I suceed, but this was las saturday.
 Today I am in the same situation again.

Is this database vacuumed and analyzed recently? I would suggest database-wide 
vacuum full analyze.

If your queries are getting slower, then checking the explain analyze output 
is a good starting point. To see queries issued by psql, start it as psql -E.

HTH

 Shridhar

---(end of broadcast)---
TIP 4: Don't 'kill -9' the postmaster


Re: [PERFORM] [ADMIN] slower every day

2004-09-01 Thread G u i d o B a r o s i o
The solution appeared as something I didn't know

  On the .conf file

Previous situation:

#log_something=false
log_something=true

Worst situation 
#log_something=false
#log_something=true 

Nice situation
log_something=false
#log_something=true


Ok, the problem was that I assumed that commenting a value on
the conf file will set it up to a default (false?). I was wrong.
My server was writting tons of log's.

Is this the normal behavior for pg_ctl reload? It seems that looks for new values, 
remembering the last state on the ones that actually are commented. Although it's my 
fault to have 2 (tow) lines for the same issue, and that I should realize that this is 
MY MISTAKE, the log defaults on a reload, if commented, tend to be the last value 
entered?

Regards,
Guido


 Am Mittwoch, 1. September 2004 12:06 schrieb G u i d o B a r o s i o:
The problem is the time that the postgres takes to perform/return a
  query. For example, trying the \d tablename command takes between 4 or 5
  seconds. This table is very big, but I am not asking for the rows, only
  asking the table schema, so...why is this so slow?!?!? My last
  administrative action into this table was a reindex to all the indexes via
  the BKI in standalone mode. I thought I suceed, but this was las saturday.
 
 Do you regularly vacuum and analyze the database?
 
 -- 
 Peter Eisentraut
 http://developer.postgresql.org/~petere/
 
 ---(end of broadcast)---
 TIP 8: explain analyze is your friend


---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]


Re: [PERFORM] [ADMIN] slower every day

2004-09-01 Thread Richard Huxton
G u i d o B a r o s i o wrote:
Conclusion:
If you comment a line on the conf file, and reload it, will remain in
the last state. (either wast true or false, while I expected a
default)
Yes, that's correct. No, you're not the only one to have been caught out 
by this.

--
  Richard Huxton
  Archonet Ltd
---(end of broadcast)---
TIP 8: explain analyze is your friend


Re: [PERFORM] [ADMIN] slower every day

2004-09-01 Thread Michael Paesold
This issue was resently discussed on hackers. It is a known issue, not very
convinient for the user. Nevertheless it is not fixed in 8.0, but will
perhaps be addressed in the next major release.
(Remembering, it was a non-trivial thing to change.)

Best Regards,
Michael Paesold

G u i d o B a r o s i o wrote:

 The solution appeared as something I didn't know

   On the .conf file

 Previous situation:

 #log_something=false
 log_something=true

 Worst situation
 #log_something=false
 #log_something=true

 Nice situation
 log_something=false
 #log_something=true


 Ok, the problem was that I assumed that commenting a value on
 the conf file will set it up to a default (false?). I was wrong.
 My server was writting tons of log's.

 Is this the normal behavior for pg_ctl reload? It seems that looks for new
values, remembering the last state on the ones that actually are commented.
Although it's my fault to have 2 (tow) lines for the same issue, and that I
should realize that this is MY MISTAKE, the log defaults on a reload, if
commented, tend to be the last value entered?


---(end of broadcast)---
TIP 3: if posting/reading through Usenet, please send an appropriate
  subscribe-nomail command to [EMAIL PROTECTED] so that your
  message can get through to the mailing list cleanly


Re: [PERFORM] [ADMIN] slower every day

2004-09-01 Thread G u i d o B a r o s i o
Thanks for the reply,

  Been reading hackers of Aug 2004 and found the threads. It's a common habit to 
create two lines on the configuration files, in order to maintain the copy of the 
default conf file. I guess this should be the worst scenery for a freshly incoming DBA 
trying to put things in order. 

  A temporary patch, will be updating documentation, encouraging administrators to use 
the SHOW ALL; command in the psql env, to confirm that changes where made.

  In my case, a 1.2 gig file was written, performance was on the floor. And my 
previous situation, a reindex force task last saturday, confused me. This is not a 
trivial problem, but in conjunction with other small problems could become a big one.

  Good habits when touching conf files  using the SHOW ALL to confirm that changes 
where made will help until this is patched. 

  Thanks for Postgres, 

Regards, Guido.


 This issue was resently discussed on hackers. It is a known issue, not very
 convinient for the user. Nevertheless it is not fixed in 8.0, but will
 perhaps be addressed in the next major release.
 (Remembering, it was a non-trivial thing to change.)
 
 Best Regards,
 Michael Paesold
 
 G u i d o B a r o s i o wrote:
 
  The solution appeared as something I didn't know
 
On the .conf file
 
  Previous situation:
 
  #log_something=false
  log_something=true
 
  Worst situation
  #log_something=false
  #log_something=true
 
  Nice situation
  log_something=false
  #log_something=true
 
 
  Ok, the problem was that I assumed that commenting a value on
  the conf file will set it up to a default (false?). I was wrong.
  My server was writting tons of log's.
 
  Is this the normal behavior for pg_ctl reload? It seems that looks for new
 values, remembering the last state on the ones that actually are commented.
 Although it's my fault to have 2 (tow) lines for the same issue, and that I
 should realize that this is MY MISTAKE, the log defaults on a reload, if
 commented, tend to be the last value entered?
 


---(end of broadcast)---
TIP 4: Don't 'kill -9' the postmaster


Re: [PERFORM] Changing the column length

2004-09-01 Thread Josh Berkus
Michael,

 I am sorry that my question is out of line with this
 group(performance) but I need

 an urgent help :-( .pls .. I need to know how  to change the length of the
 column.

In the future, try to provide more detail on your problem.Fortunately, I 
think I know what it is.

PostgreSQL does not support changing the length of VARCHAR columns in-place 
until version 8.0 (currently in beta).   Instead, you need to:

1) Add a new column of the correct length;
2) Copy the data in the old column to the new column;
3) Drop the old column;
4) Rename the new column to the same name as the old column.

I realize that this approach can be quite painful if you have dependant views, 
contstraints, etc.It's why we fixed it for 8.0.  You can also:

1) pg_dump the database in text format;
2) edit the table definition in the pg_dump file;
3) re-load the database

While it *is* possible to change the column size by updating the system 
tables, doing so is NOT recommended as it can cause unexpected database 
errors.

-- 
Josh Berkus
Aglio Database Solutions
San Francisco

---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]


Re: [PERFORM] seqscan instead of index scan

2004-09-01 Thread Merlin Moncure
 On Mon, 30 Aug 2004, Martin Sarsale wrote:
  Multicolumn indexes can only be used if the clauses involving the
  indexed columns are joined with AND. For instance,
 
  SELECT name FROM test2 WHERE major = constant OR minor = constant;
 
 You can use DeMorgan's Theorem to transform an OR clause to an AND
clause.
 
 In general:
   A OR B = NOT ((NOT A) AND (NOT B))
 
 So:
 
  But I need something like:
 
  select * from t where c0 or d0;
 
   select * from t where not (c=0 and d=0);
 
 I haven't actually tried to see if postgresql would do anything
 interesting after such a transformation.

That made me really curious.  I ran a quick test and it turns out the
server used dm's theorem to convert the expression back to 'or' case.

Explain output (see below to set up the test case for this stmnt):
esp=# explain analyze select * from millions where not (value1  50
and value2  20);
QUERY
PLAN



--
 Index Scan using millions_1_idx, millions_2_idx on millions
(cost=0.00..12.01 rows=2 width=8) (act
ual time=0.000..0.000 rows=2 loops=1)
   Index Cond: ((value1 = 50) OR (value2 = 20))
 Total runtime: 0.000 ms
(3 rows)

drop table tens;
drop table millions;

create table tens(value int);
create table millions(value1 int, value2 int);
insert into tens values (0);
insert into tens values (1);
insert into tens values (2);
insert into tens values (3);
insert into tens values (4);
insert into tens values (5);
insert into tens values (6);
insert into tens values (7);
insert into tens values (8);
insert into tens values (9);

insert into millions 
 select ones.value + 
   (tens.value * 10) +
   (hundreds.value * 100) +
   (thousands.value * 1000) +
   (tenthousands.value * 1) +
   (hundredthousands.value * 10) 
   from tens ones, 
tens tens,
tens hundreds,
tens thousands,
tens tenthousands,
tens hundredthousands;

update millions set value2 = value1;

create index millions_idx1 on millions(value1);
create index millions_idx2 on millions(value2);
create index millions_idx12 on millions(value1, value2);
vacuum analyze millions;


---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]