PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 13/03/2014 16:35:57

kqkq
Membre

Configuration postgresql.conf

Bonjour,

Je tiens à préciser que je débute dans ce domaine (merci de votre patience). J'aimerai optimiser la configuration de mon serveur dédié Postgresql car je pense que je peux améliorer considérablement mes performances.

Voici ma cfg :

- Serveur Ubuntu 12.04 LTS
- Version postgres : (PostgreSQL) 9.1.12
- 12 Go RAM
- 10 CPU
- HDD 100 GO

Config Postgres :
Max client : 100
shared_buffers = 24MB
tous le reste est commenté dans le fichier postgresql.conf
shmax : 33554432
shmall :  2097152

n'hésitez pas si vous voulez plus d'informations.

Merci d'avance,

Hors ligne

#2 13/03/2014 17:00:27

rjuju
Administrateur

Re : Configuration postgresql.conf

Bonjour,

Sans savoir l'utilisation de la base, la volumétrie, ni s'il s'agit d'un serveur dédié pour postgres ni la configuration des disques, difficile d'être très précis. De plus avez-vous déjà des problèmes de performance acutellement ? Vous pouvez commencer par quelque chose comme ça :

shared_buffers -> 3 Go
wal_buffers -> 16 Mo
maintenance_work_mem -> 1 Go
checkpoint_segment -> 32
checkpoint_completion_target -> 0.9
log_temp_files -> 0
log_line_prefix -> '%t [%p]: [%l-1] user=%u,db=%d '

Pour les shm*, augmentez les suffisamment pour que le serveur démarre sans hésiter à prendre une limite très largement supérieure (de quoi allouer les 12 Go par exemple).

Hors ligne

#3 13/03/2014 17:09:41

kqkq
Membre

Re : Configuration postgresql.conf

Merci de votre réponse :

Il s'agit en effet d'un serveur dédié à postgresql, Pour les shm*, comment calcul t-on les bonnes valeurs ?

Hors ligne

#4 13/03/2014 17:13:04

rjuju
Administrateur

Re : Configuration postgresql.conf

shmmax est exprimé en octet, shmall en pages (donc une unité de 4 ko).

Hors ligne

#5 13/03/2014 17:49:06

kqkq
Membre

Re : Configuration postgresql.conf

Je ne log rien dans le syslog ??

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

# - Where to Log -

log_destination = 'syslog'              # Valid values are combinations of
                                        # stderr, csvlog, syslog, and eventlog,
                                        # depending on platform.  csvlog
                                        # requires logging_collector to be on.

# This is used when logging to stderr:
logging_collector = off         # Enable capturing of stderr and csvlog
                                        # into log files. Required to be on for
                                        # csvlogs.
                                        # (change requires restart)

# These are only used if logging_collector is on:
#log_directory = 'pg_log'               # directory where log files are written,
                                        # can be absolute or relative to PGDATA
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'        # log file name pattern,
                                        # can include strftime() escapes
#log_file_mode = 0600                   # creation mode for log files,
                                        # begin with 0 to use octal notation
#log_truncate_on_rotation = off         # If on, an existing log file with the
                                        # same name as the new log file will be
                                        # truncated rather than appended to.
                                        # But such truncation only occurs on
                                        # time-driven rotation, not on restarts
                                        # or size-driven rotation.  Default is
                                        # off, meaning append to existing files
                                        # in all cases.
log_rotation_age = 1d                   # Automatic rotation of logfiles will
                                        # happen after that time.  0 disables.
#log_rotation_size = 10MB               # Automati# These are relevant when logging to syslog:
#syslog_facility = 'LOCAL0'
#syslog_ident = 'postgres'

#silent_mode = off                      # Run server silently.
                                        # DO NOT USE without syslog or
                                        # logging_collector
                                        # (change requires restart)


# - When to Lo#client_min_messages = notice           # values in order of decreasing detail:
                                        #   debug5
                                        #   debug4
                                        #   debug3
                                        #   debug2
                                        #   debug1
                                        #   log
                                        #   notice
                                        #   warning
                                        #   error

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

log_min_error_statement = error # values in order of decreasing detail:
                                        #   debug5
                                        #   debug4
                                        #   debug3
                                        #   debug2
                                        #   debug1
                                        #   info
                                        #   notice
                                        #   warning
                                        #   error
                                        #   log
                                        #   fatal
                                        #   panic (effectively off)

#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
                                        # statements running at least this number
                                        # of milliseconds


# - What to Log -

#debug_print_parse = off
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
log_error_verbosity = default                                           # terse, default, or verbose messages
#log_hostname = off
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '                     # special values:
                                                                        #   %a = application name
                                                                        #   %u = user name
                                                                        #   %d = database name
                                                                        #   %r = remote host and port
                                                                        #   %h = remote host
                                        #   %p = process ID
                                        #   %t = timestamp without milliseconds
                                        #   %m = timestamp with milliseconds
                                        #   %i = command tag
                                        #   %e = SQL state
                                        #   %c = session ID
                                        #   %l = session line number
                                        #   %s = session start timestamp
                                        #   %v = virtual transaction ID
                                        #   %x = transaction ID (0 if none)
                                        #   %q = stop here in non-session
                                        #        processes
                                        #   %% = '%'
                                        #log_lock_waits = off                   # log lock waits >= deadlock_timeout
                                         log_statement = 'all'                   # none, ddl, mod, all
                                         #log_temp_files = -1                    # log temporary files equal or larger
                                        # than the specified size in kilobytes;
                                        # -1 disables, 0 logs all temp files
                                        #log_timezone = '(defaults to server environment setting)' 

Hors ligne

#6 13/03/2014 18:09:33

rjuju
Administrateur

Re : Configuration postgresql.conf

Quelle est la question exactement ? De ce que je vois postgres est configuré pour tracer dans syslog, pour savoir où cela finit il vous faut configurer votre syslog.

Hors ligne

#7 13/03/2014 18:48:05

kqkq
Membre

Re : Configuration postgresql.conf

Je n'arrive pas à logguer dans le syslog mais maintenant c'est ok.

J'ai donc mis en place la nouvelle configuration, le service postgres ne démarre plus maintenant :

 
Mar 13 17:40:43 sql postgres[5977]: [1-1] 2014-03-13 17:40:43 CET FATAL:  could not create shared memory segment: Argument invalide
Mar 13 17:40:43 sql postgres[5977]: [1-2] 2014-03-13 17:40:43 CET DETAIL:  Failed system call was shmget(key=5432001, size=3317243904, 03600).
Mar 13 17:40:43 sql postgres[5977]: [1-3] 2014-03-13 17:40:43 CET HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 3317243904 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
Mar 13 17:40:43 sql postgres[5977]: [1-4] #011If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for

Je pense qu'il faut configurer les shm* ( mais je suis un peu perdu)

Hors ligne

#8 13/03/2014 19:17:30

rjuju
Administrateur

Re : Configuration postgresql.conf

Oui, le plus simple étant d'éditer le fichier /etc/sysctl.conf pour y ajouter les entrées, par exemple :

kernel.shmmax=12884901888
kernel.shmall=3145728

et ensuite, vous appliquez la configuration avec "sysctl -p". Vous pourrez alors démarrer postgres.

Hors ligne

#9 13/03/2014 19:25:39

kqkq
Membre

Re : Configuration postgresql.conf

ok merci à vous, J'aimerai augmenter le max_connexion à 200. Selon vous je peux le faire sans problème ?

Hors ligne

#10 13/03/2014 19:35:50

rjuju
Administrateur

Re : Configuration postgresql.conf

Réponse rapide : oui.

Réponse longue : tout dépend pourquoi. Plus on augmente le nombre de connexions en parallèle moins cela sera efficace (surtout d'après le peu de configuration connue : 10 cpu et 1 disque dur). Si votre contexte vous le permet, il sera sans doute plus performant de mettre en place un pooler de connexion comme bgBouncer afin de garder un nombre de connexion affectif à la base plus limité.

Hors ligne

Pied de page des forums