Thread: Config Check

Config Check

From
Bryan
Date:
Postgresql is the backbone of our spam filtering system. Currently the
performance is OK. Wanted to know if someone could give this config a
quick run down and see if there is anything we can adjust here to smooth
out the performance. The IO Wait Times are outrageous, at times the load
will spike up to the 70 - 90 range.

Hardware:
Quad Opteron 2Ghz
Tyan Quad Opteron Board
16GB DDR Ram
Emulex LightPulse LP1050
EMC Clarion Fiber Array running Raid5
-----------------------------------------
Software:
RedHat Linux AS
Postgresql 7.4.6
-----------------------------------------
Detail:
pg_xlog is stored on a local 10k RPM SCSI drive.
The rest of the database is stored on the Fiber Array.

Currently the database is at a size of 87.6Gig. A Vacuum Analyze runs
every night and has been taking 4 or 5 hours to complete. Everything
seems to run fine for a while, then at some point the load goes through
the roof and the iowait % also goes way up. It will recover after a
little bit and then do the same thing all over again. When this happens
access to the web based user interface slows way down for our customers.
Any input for improvements to this config would be appreciated, Thanks.

------------------------------------------

------------------------------------------
Vacuum Output:

INFO:  analyzing "pg_catalog.pg_listener"
INFO:  "pg_listener": 0 pages, 0 rows sampled, 0 estimated total rows
INFO:  free space map: 79 relations, 1948399 pages stored; 5306160 total
pages needed
DETAIL:  Allocated FSM size: 500 relations + 2000000 pages = 11769 kB
shared memory.
VACUUM
--------------------------------------------

<--config-->

tcpip_socket = true
max_connections = 800
#superuser_reserved_connections = 2
port = 5432
#port = 9999
#unix_socket_directory = ''
#unix_socket_group = ''
#unix_socket_permissions = 0777 # octal
#virtual_host = ''              # what interface to listen on; defaults
to any
#rendezvous_name = ''           # defaults to the computer name

# - Security & Authentication -

#authentication_timeout = 60    # 1-600, in seconds
#ssl = false
#password_encryption = true
#krb_server_keyfile = ''
#db_user_namespace = false


#---------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#---------------------------------------------------------------------------

# - Memory -

shared_buffers = 16000
sort_mem = 16384
vacuum_mem = 3200000

# - Free Space Map -

max_fsm_pages = 2000000
max_fsm_relations = 500

# - Kernel Resource Usage -

max_files_per_process = 100     # min 25
#preload_libraries = ''


#---------------------------------------------------------------------------
# WRITE AHEAD LOG
#---------------------------------------------------------------------------

# - Settings -

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 = 64        # min 4, 8KB each

# - Checkpoints -

checkpoint_segments = 50        # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 60        # range 30-3600, in seconds
#checkpoint_warning = 30        # 0 is off, in seconds
#commit_delay = 0               # range 0-100000, in microseconds
#commit_siblings = 10           # range 1-1000


#---------------------------------------------------------------------------
# QUERY TUNING
#---------------------------------------------------------------------------

# - Planner Method Enabling -

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

# - Planner Cost Constants -

effective_cache_size = 50000    # typically 8KB each
random_page_cost = 20           # 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)

# - Genetic Query Optimizer -

geqo = true
geqo_threshold = 11
geqo_effort = 1
geqo_generations = 0
geqo_pool_size = 0              # default based on tables in statement,
                                 # range 128-1024
geqo_selection_bias = 2.0       # range 1.5-2.0

# - Other Planner Options -

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


#---------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#---------------------------------------------------------------------------

# - Syslog -

syslog = 2                      # range 0-2; 0=stdout; 1=both; 2=syslog
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'

# - When to Log -

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

log_min_messages = error        # Values, in order of decreasing detail:
                                 #   debug5, debug4, debug3, debug2, debug1,
                                 #   info, notice, warning, error, log,
fatal,
                                 #   panic

log_error_verbosity = terse   # terse, default, or verbose messages

#log_min_error_statement = panic # Values in order of increasing severity:
                                  #   debug5, debug4, debug3, debug2,
debug1,
                                  #   info, notice, warning, error,
panic(off)

#log_min_duration_statement = -1 # Log all statements whose
                                  # execution time exceeds the value, in
                                  # milliseconds.  Zero prints all queries.
                                  # Minus-one disables.

#silent_mode = false             # DO NOT USE without Syslog!

# - What to Log -

debug_print_parse = false
debug_print_rewritten = false
debug_print_plan = false
debug_pretty_print = false
log_connections = false
log_duration = false
log_pid = false
log_statement = false
log_timestamp = true
log_hostname = true
log_source_port = false


#---------------------------------------------------------------------------
# RUNTIME STATISTICS
#---------------------------------------------------------------------------

# - Statistics Monitoring -

log_parser_stats = false
log_planner_stats = false
log_executor_stats = false
log_statement_stats = false

# - Query/Index Statistics Collector -

#stats_start_collector = true
#stats_command_string = false
#stats_block_level = false
#stats_row_level = false
#stats_reset_on_server_start = true


#---------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#---------------------------------------------------------------------------

# - Statement Behavior -

#search_path = '$user,public'   # schema names
#check_function_bodies = true
#default_transaction_isolation = 'read committed'
#default_transaction_read_only = false
#statement_timeout = 0          # 0 is disabled, in milliseconds

# - Locale and Formatting -

#datestyle = 'iso, mdy'
#timezone = unknown             # actually, defaults to TZ environment
setting
#australian_timezones = false
#extra_float_digits = 0         # min -15, max 2
#client_encoding = sql_ascii    # actually, defaults to database encoding

# These settings are initialized by initdb -- they may be changed
lc_messages = 'en_US.UTF-8'             # locale for system error
message strings
lc_monetary = 'en_US.UTF-8'             # locale for monetary formatting
lc_numeric = 'en_US.UTF-8'              # locale for number formatting
lc_time = 'en_US.UTF-8'                 # locale for time formatting

# - Other Defaults -

#explain_pretty_print = true
#dynamic_library_path = '$libdir'
#max_expr_depth = 10000         # min 10


#---------------------------------------------------------------------------
# LOCK MANAGEMENT
#---------------------------------------------------------------------------

#deadlock_timeout = 1000        # in milliseconds
max_locks_per_transaction = 200 # min 10, ~260*max_connections bytes each


#---------------------------------------------------------------------------
# VERSION/PLATFORM COMPATIBILITY
#---------------------------------------------------------------------------

# - Previous Postgres Versions -

#add_missing_from = true
#regex_flavor = advanced        # advanced, extended, or basic
#sql_inheritance = true

# - Other Platforms & Clients -

#transform_null_equals = false

<--config-->


Thanks
--
---------------------------------------------------------------
Bryan Vest
ComNet Inc.
bright.net Network Administration/Network Operations
(888)-618-4638
net-admin@bright.net    Pager: pagenoc@bright.net
---------------------------------------------------------------

Re: Config Check

From
Pierre-Frédéric Caillaud
Date:

    According to these lines you should set max_fsm_pages to at the very
least 5306160
    You have a humongous amount of RAM, you could set it to 10000000

> INFO:  free space map: 79 relations, 1948399 pages stored; 5306160 total
> pages needed
> DETAIL:  Allocated FSM size: 500 relations + 2000000 pages = 11769 kB
> shared memory.



Re: Config Check

From
Tom Lane
Date:
Bryan <bvest@rhondasworld.com> writes:
> vacuum_mem = 3200000

Yikes.  You do realize that's measured in kilobytes?  Try backing it off
to something saner, like half a gig or less.

            regards, tom lane

Re: Config Check

From
Hasnul Fadhly bin Hasan
Date:
Hi Bryan,

Just wondering, i ran vacuumdb but didn't get the information that you
get about the free space even when i set the verbose option.  How did
you get that?

Thanks,

Hasnul


Bryan wrote:

>
> Postgresql is the backbone of our spam filtering system. Currently the
> performance is OK. Wanted to know if someone could give this config a
> quick run down and see if there is anything we can adjust here to
> smooth out the performance. The IO Wait Times are outrageous, at times
> the load will spike up to the 70 - 90 range.
>
> Hardware:
> Quad Opteron 2Ghz
> Tyan Quad Opteron Board
> 16GB DDR Ram
> Emulex LightPulse LP1050
> EMC Clarion Fiber Array running Raid5
> -----------------------------------------
> Software:
> RedHat Linux AS
> Postgresql 7.4.6
> -----------------------------------------
> Detail:
> pg_xlog is stored on a local 10k RPM SCSI drive.
> The rest of the database is stored on the Fiber Array.
>
> Currently the database is at a size of 87.6Gig. A Vacuum Analyze runs
> every night and has been taking 4 or 5 hours to complete. Everything
> seems to run fine for a while, then at some point the load goes
> through the roof and the iowait % also goes way up. It will recover
> after a little bit and then do the same thing all over again. When
> this happens access to the web based user interface slows way down for
> our customers. Any input for improvements to this config would be
> appreciated, Thanks.
>
> ------------------------------------------
>
> ------------------------------------------
> Vacuum Output:
>
> INFO:  analyzing "pg_catalog.pg_listener"
> INFO:  "pg_listener": 0 pages, 0 rows sampled, 0 estimated total rows
> INFO:  free space map: 79 relations, 1948399 pages stored; 5306160
> total pages needed
> DETAIL:  Allocated FSM size: 500 relations + 2000000 pages = 11769 kB
> shared memory.
> VACUUM
> --------------------------------------------
>
> <--config-->
>
> tcpip_socket = true
> max_connections = 800
> #superuser_reserved_connections = 2
> port = 5432
> #port = 9999
> #unix_socket_directory = ''
> #unix_socket_group = ''
> #unix_socket_permissions = 0777 # octal
> #virtual_host = ''              # what interface to listen on;
> defaults to any
> #rendezvous_name = ''           # defaults to the computer name
>
> # - Security & Authentication -
>
> #authentication_timeout = 60    # 1-600, in seconds
> #ssl = false
> #password_encryption = true
> #krb_server_keyfile = ''
> #db_user_namespace = false
>
>
> #---------------------------------------------------------------------------
>
> # RESOURCE USAGE (except WAL)
> #---------------------------------------------------------------------------
>
>
> # - Memory -
>
> shared_buffers = 16000
> sort_mem = 16384
> vacuum_mem = 3200000
>
> # - Free Space Map -
>
> max_fsm_pages = 2000000
> max_fsm_relations = 500
>
> # - Kernel Resource Usage -
>
> max_files_per_process = 100     # min 25
> #preload_libraries = ''
>
>
> #---------------------------------------------------------------------------
>
> # WRITE AHEAD LOG
> #---------------------------------------------------------------------------
>
>
> # - Settings -
>
> 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 = 64        # min 4, 8KB each
>
> # - Checkpoints -
>
> checkpoint_segments = 50        # in logfile segments, min 1, 16MB each
> #checkpoint_timeout = 60        # range 30-3600, in seconds
> #checkpoint_warning = 30        # 0 is off, in seconds
> #commit_delay = 0               # range 0-100000, in microseconds
> #commit_siblings = 10           # range 1-1000
>
>
> #---------------------------------------------------------------------------
>
> # QUERY TUNING
> #---------------------------------------------------------------------------
>
>
> # - Planner Method Enabling -
>
> #enable_hashagg = true
> #enable_hashjoin = true
> enable_indexscan = true
> #enable_mergejoin = true
> #enable_nestloop = true
> #enable_seqscan = true
> #enable_sort = true
> #enable_tidscan = true
>
> # - Planner Cost Constants -
>
> effective_cache_size = 50000    # typically 8KB each
> random_page_cost = 20           # 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)
>
> # - Genetic Query Optimizer -
>
> geqo = true
> geqo_threshold = 11
> geqo_effort = 1
> geqo_generations = 0
> geqo_pool_size = 0              # default based on tables in statement,
>                                 # range 128-1024
> geqo_selection_bias = 2.0       # range 1.5-2.0
>
> # - Other Planner Options -
>
> #default_statistics_target = 10 # range 1-1000
> #from_collapse_limit = 8
> #join_collapse_limit = 8        # 1 disables collapsing of explicit JOINs
>
>
> #---------------------------------------------------------------------------
>
> # ERROR REPORTING AND LOGGING
> #---------------------------------------------------------------------------
>
>
> # - Syslog -
>
> syslog = 2                      # range 0-2; 0=stdout; 1=both; 2=syslog
> #syslog_facility = 'LOCAL0'
> #syslog_ident = 'postgres'
>
> # - When to Log -
>
> client_min_messages = error     # Values, in order of decreasing detail:
>                                 #   debug5, debug4, debug3, debug2,
> debug1,
>                                 #   log, info, notice, warning, error
>
> log_min_messages = error        # Values, in order of decreasing detail:
>                                 #   debug5, debug4, debug3, debug2,
> debug1,
>                                 #   info, notice, warning, error, log,
> fatal,
>                                 #   panic
>
> log_error_verbosity = terse   # terse, default, or verbose messages
>
> #log_min_error_statement = panic # Values in order of increasing
> severity:
>                                  #   debug5, debug4, debug3, debug2,
> debug1,
>                                  #   info, notice, warning, error,
> panic(off)
>
> #log_min_duration_statement = -1 # Log all statements whose
>                                  # execution time exceeds the value, in
>                                  # milliseconds.  Zero prints all
> queries.
>                                  # Minus-one disables.
>
> #silent_mode = false             # DO NOT USE without Syslog!
>
> # - What to Log -
>
> debug_print_parse = false
> debug_print_rewritten = false
> debug_print_plan = false
> debug_pretty_print = false
> log_connections = false
> log_duration = false
> log_pid = false
> log_statement = false
> log_timestamp = true
> log_hostname = true
> log_source_port = false
>
>
> #---------------------------------------------------------------------------
>
> # RUNTIME STATISTICS
> #---------------------------------------------------------------------------
>
>
> # - Statistics Monitoring -
>
> log_parser_stats = false
> log_planner_stats = false
> log_executor_stats = false
> log_statement_stats = false
>
> # - Query/Index Statistics Collector -
>
> #stats_start_collector = true
> #stats_command_string = false
> #stats_block_level = false
> #stats_row_level = false
> #stats_reset_on_server_start = true
>
>
> #---------------------------------------------------------------------------
>
> # CLIENT CONNECTION DEFAULTS
> #---------------------------------------------------------------------------
>
>
> # - Statement Behavior -
>
> #search_path = '$user,public'   # schema names
> #check_function_bodies = true
> #default_transaction_isolation = 'read committed'
> #default_transaction_read_only = false
> #statement_timeout = 0          # 0 is disabled, in milliseconds
>
> # - Locale and Formatting -
>
> #datestyle = 'iso, mdy'
> #timezone = unknown             # actually, defaults to TZ environment
> setting
> #australian_timezones = false
> #extra_float_digits = 0         # min -15, max 2
> #client_encoding = sql_ascii    # actually, defaults to database encoding
>
> # These settings are initialized by initdb -- they may be changed
> lc_messages = 'en_US.UTF-8'             # locale for system error
> message strings
> lc_monetary = 'en_US.UTF-8'             # locale for monetary formatting
> lc_numeric = 'en_US.UTF-8'              # locale for number formatting
> lc_time = 'en_US.UTF-8'                 # locale for time formatting
>
> # - Other Defaults -
>
> #explain_pretty_print = true
> #dynamic_library_path = '$libdir'
> #max_expr_depth = 10000         # min 10
>
>
> #---------------------------------------------------------------------------
>
> # LOCK MANAGEMENT
> #---------------------------------------------------------------------------
>
>
> #deadlock_timeout = 1000        # in milliseconds
> max_locks_per_transaction = 200 # min 10, ~260*max_connections bytes each
>
>
> #---------------------------------------------------------------------------
>
> # VERSION/PLATFORM COMPATIBILITY
> #---------------------------------------------------------------------------
>
>
> # - Previous Postgres Versions -
>
> #add_missing_from = true
> #regex_flavor = advanced        # advanced, extended, or basic
> #sql_inheritance = true
>
> # - Other Platforms & Clients -
>
> #transform_null_equals = false
>
> <--config-->
>
>
> Thanks



Re: Config Check

From
Tom Lane
Date:
Hasnul Fadhly bin Hasan <hasnulfadhly.h@mimos.my> writes:
> Just wondering, i ran vacuumdb but didn't get the information that you
> get about the free space even when i set the verbose option.  How did
> you get that?

PG version?  IIRC 7.4 was the first to include that info in the VACUUM
VERBOSE output.

            regards, tom lane

Re: Config Check

From
John A Meinel
Date:
Hasnul Fadhly bin Hasan wrote:
> Hi Bryan,
>
> Just wondering, i ran vacuumdb but didn't get the information that you
> get about the free space even when i set the verbose option.  How did
> you get that?
>
> Thanks,
>
> Hasnul


I believe it is
VACUUM FULL ANALYZE VERBOSE;

At the very end you will get a listing like

INFO:  free space map: 167 relations, 423 pages stored; 2912 total pages
needed
DETAIL:  Allocated FSM size: 1000 relations + 20000 pages = 186 kB
shared memory.

(Yes, mine is done on a very static table.)

John
=:->

Attachment