Tuning Postgresql on FreeBSD 5.1

Paul Pathiakis paul at pathiakis.com
Mon Aug 25 06:30:14 PDT 2003


Hi,

	I'd like to thank everyone for their help so far.  I'm implement most of the 
enhancements and changes on the database so far.  I now have a bigger 
problem...  the machine is generating some large reports (term used by the DB 
people here) and the processes start and instantly drop off to no 
utilization...  they sit there and hang...  seemingly resource starved.  I'd 
like know if someone could help me.  I've enclosed the postgresql.conf file, 
the systctl.conf file, loader.conf and the Kernel memory parameters.  
	Again, the machine is a twin 2.8 Xeon HTT machine.  HTT is turned on and the 
machine sees 4 cpus.  It has 4 GB of RAM and I'm starting to put on SCSI 
drives as the machine had the IDE drives maxed out at 100% utilization at all 
times.  (Again, I didn't order this machine, otherwise it would have had dual 
U320 channels etc on its I/O system)  Presently, due to scavenging a PCI SCSI 
card (ADAPTEC U2W), disks (U320 10K rpm) and an enclosure for 4 disks, I have 
the following:

/dev/ar1s1d 114244630   479980 104625080     0%    /usr/local
/dev/da0s1d 138860928 81448860  46303194    64%    /usr/local/pgsql
/dev/md0      1031916        4    949360     0%    
/usr/local/pgsql/data/base/16978/pgsql_tmp
procfs              4        4         0   100%    /proc
/dev/da1s1d 138860928   131202 127620852     0%    
/usr/local/pgsql/data/pg_xlog
/dev/da2s1d 142801720  3277472 128100112     2%    /pg_index
/dev/da3s1d 142801720  1049616 130327968     1%    /pg_table

noatime is configured on the pgsql hierarchy and related links to disks on 
/pg_* . I configured a MD as the pgsql_tmp directory, etc.  I've created 
UFS2+S filesystems with block and frag sizes of 8K as this is optimal for PG. 
I hope this makes sense all the way around.  I'm not a DBA, just a UNIX 
admin.
	
	Anyhow, I'm looking at the postgresql.conf file and I don't see a whole lot 
that makes sense to me.  Please help!  I've got a bunch of people saying 
Linux just runs faster and the DB group is using a Linux config file on the 
FreeBSD machine.  (Don't get me going)  It is my belief that a BSD DB is 
going to run faster on it's platform of choice for development (FreeBSD) than 
another OS.  Please help!

	Thanks!

	Paul Pathiakis
	

sysctl.conf:

kern.maxfiles=10000
kern.ipc.shm_use_phys=1
kern.ipc.shmall=524288
kern.ipc.shmmax=1073741824
vfs.vmiodirenable=1

loader.conf

kern.maxfiles=32768
kern.nbuf=16384

GENERIC SMP:

options         SYSVMSG                 #SYSV-style message queues
options         SYSVSHM                 #SYSV-style shared memory
options         SYSVSEM                 #SYSV-style semaphores
options         SHMMAXPGS=4096
options         SHMSEG=256
options         SEMMNI=256
options         SEMMNS=512
options         SEMMNU=256
options         SEMMAP=256

Postgresql.conf:

#
# PostgreSQL configuration file
# -----------------------------
#
# This file consists of lines of the form:
#
#   name = value
#
# (The '=' is optional.) White space may be used. Comments are introduced
# with '#' anywhere on a line. The complete list of option names and
# allowed values can be found in the PostgreSQL documentation. The
# commented-out settings shown in this file represent the default values.
#
# Any option can also be given as a command line switch to the
# postmaster, e.g. 'postmaster -c log_connections=on'. Some options
# can be changed at run-time with the 'SET' SQL command.
#
# This file is read on postmaster startup and when the postmaster
# receives a SIGHUP. If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect, or use
# "pg_ctl reload".


#========================================================================


#
#       Connection Parameters
#
#tcpip_socket = false
#ssl = false

max_connections = 128
#superuser_reserved_connections = 2

#port = 5432
#hostname_lookup = false
#show_source_port = false

#unix_socket_directory = ''
#unix_socket_group = ''
#unix_socket_permissions = 0777 # octal

#virtual_host = ''

#krb_server_keyfile = ''


#
#       Shared Memory Size
#
shared_buffers = 48000          # min max_connections*2 or 16, 8KB each
#max_fsm_relations = 1000       # min 10, fsm is free space map, ~40 bytes
#max_fsm_pages = 10000          # min 1000, fsm is free space map, ~6 bytes
#max_locks_per_transaction = 64 # min 10
#wal_buffers = 8                # min 4, typically 8KB each

#
#       Non-shared Memory Sizes
#
sort_mem = 32768                # min 64, size in KB
#vacuum_mem = 8192              # min 1024, size in KB


#
#       Write-ahead log (WAL)
#
#checkpoint_segments = 3        # in logfile segments, min 1, 16MB each
#checkpoint_timeout = 300       # range 30-3600, in seconds
#
#commit_delay = 0               # range 0-100000, in microseconds
#commit_siblings = 5            # range 1-1000
#
#fsync = true
#wal_sync_method = fsync        # the default varies across platforms:
#                               # fsync, fdatasync, open_sync, or 
open_datasync
#wal_debug = 0                  # range 0-16


#
#       Optimizer Parameters
#
#enable_seqscan = true
#enable_indexscan = true
#enable_tidscan = true
#enable_sort = true
#enable_nestloop = true
#enable_mergejoin = true
#enable_hashjoin = 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)

#default_statistics_target = 10 # range 1-1000

#
#       GEQO Optimizer Parameters
#
#geqo = true
#geqo_selection_bias = 2.0      # range 1.5-2.0
#geqo_threshold = 11
#geqo_pool_size = 0             # default based on tables in statement,
                                # range 128-1024
#geqo_effort = 1
#geqo_generations = 0
#geqo_random_seed = -1          # auto-compute seed


#
#       Message display
#
#server_min_messages = notice   # Values, in order of decreasing detail:
                                #   debug5, debug4, debug3, debug2, debug1,
                                #   info, notice, warning, error, log, fatal,
                                #   panic
#client_min_messages = notice   # Values, in order of decreasing detail:
                                #   debug5, debug4, debug3, debug2, debug1,
                                #   log, info, notice, warning, error
#silent_mode = false

#log_connections = false
#log_pid = false
#log_statement = false
#log_duration = false
#log_timestamp = false

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

#debug_print_parse = false
#debug_print_rewritten = false
#debug_print_plan = false
#debug_pretty_print = false

#explain_pretty_print = true

# requires USE_ASSERT_CHECKING
#debug_assertions = true


#
#       Syslog
#
#syslog = 0                     # range 0-2
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'


#
#       Statistics
#
#show_parser_stats = false
#show_planner_stats = false
#show_executor_stats = false
#show_statement_stats = false

# requires BTREE_BUILD_STATS
#show_btree_build_stats = false


#
#       Access statistics collection
#
#stats_start_collector = true
#stats_reset_on_server_start = true
#stats_command_string = false
#stats_row_level = false
#stats_block_level = false


#
#       Lock Tracing
#
#trace_notify = false

# requires LOCK_DEBUG
#trace_locks = false
#trace_userlocks = false
#trace_lwlocks = false
#debug_deadlocks = false
#trace_lock_oidmin = 16384
#trace_lock_table = 0


#
#       Misc
#
#autocommit = true
#dynamic_library_path = '$libdir'
#search_path = '$user,public'
#datestyle = 'iso, us'
#timezone = unknown             # actually, defaults to TZ environment setting
#australian_timezones = false
#client_encoding = sql_ascii    # actually, defaults to database encoding
#authentication_timeout = 60    # 1-600, in seconds
#deadlock_timeout = 1000        # in milliseconds
#default_transaction_isolation = 'read committed'
#max_expr_depth = 10000         # min 10
#max_files_per_process = 1000   # min 25
#password_encryption = true
#sql_inheritance = true
#transform_null_equals = false
#statement_timeout = 0          # 0 is disabled, in milliseconds
#db_user_namespace = false



#
#       Locale settings
#
# (initialized by initdb -- may be changed)
LC_MESSAGES = 'C'
LC_MONETARY = 'C'
LC_NUMERIC = 'C'
LC_TIME = 'C'







More information about the freebsd-performance mailing list