Vous êtes sur la page 1sur 7

6

Configuration du serveur

Les principaux paramtres de configuration de PostgreSQL se trouvent dans un fichier


nomm postgresql.conf. Il est localis dans le rpertoire de base de larborescence
de la base de donnes. Sur les systmes Unix, ce rpertoire est point par la variable
denviron nement $PGDATA. Vous pouvez ainsi faire rfrence au fichier par $PGDATA/
postgresql.conf sur ce type de plates-formes.
Ce chapitre reprend la structure de la partie ddie ces paramtres de configuration
de la documentation officielle1. Cependant, le discours est orient vers la recherche
des performances. Vous trouverez surtout des recettes pour configurer de faon optimale les paramtres les plus importants plutt quune description exhaustive des paramtres. Ce chapitre doit tre considr comme un supplment la documentation
officielle et non pas comme un texte voulant sy substituer.
En dehors de la documentation officielle, vous pouvez galement consulter larticle
Tuning Your PostgreSQL Server2. Certaines informations seront redondantes avec
celles que vous allez lire ici. Cependant ce document est mis constamment jour, de
faon reflter les volutions de PostgreSQL. Vous pourrez ainsi consulter cet article
pour trouver de nombreux dtails sur les versions de PostgreSQL qui nexistent pas
encore au moment o ce livre est crit.

1. Voir: http://docs.postgresql.fr/current/runtime-config.html
2. Cet article est disponible sur le Wiki PostgreSQL: http://wiki.postgresql.org/wiki/Tuning_Your_
PostgreSQL_Server

2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 133

18/04/11 17:35

134 Bases de donnes PostgreSQL

Modification de la configuration la vole


Les possibilits de modifications des paramtres de la base de donnes sont nombreuses.
Outre la modification du fichier de configuration de PostgreSQL et le redmarrage de
linstance, il en existe dautres. Si vous les matrisez, vous rduirez non seulement le
temps dindisponibilit du serveur suite un changement de configuration, mais vous
pourrez aussi vous assurer que vos modifications remplissent leurs objectifs.

Valeurs par dfaut et valeurs de rinitialisation


Dans une base PostgreSQL, le terme par dfaut fait rfrence deux choses diffrentes selon le contexte utilis.
Dabord, dans le premier contexte dutilisation, les valeurs par dfaut correspondent
aux valeurs qui seront utilises par PostgreSQL au dmarrage du serveur avant
mme de lire le fichier postgresql.conf. partir de PostgreSQL 8.4, vous pouvez
obtenir les valeurs par dfaut du serveur par le biais de la colonne boot_val de la vue
pg_settings1.
Vous avez dmarr le serveur, et entretemps vous avez modifi des paramtres. Ces
paramtres reprendront leur valeur par dfaut si vous utilisez lordre RESET2 pour retrouver leur valeur de dpart. Cela correspond la valeur de colonne reset_val de la vue
pg_settings.

Contextes de modification des paramtres


Chaque paramtre de configuration est associ un contexte dans lequel il peut tre
modifi. Vous pouvez dterminer ce contexte facilement en interrogeant la base de
donnes. Lexemple ci-aprs vous montre une entre de chaque type de contexte (si vous
excutez cette requte, vous obtiendrez lensemble des paramtres de la base):
postgres=# SELECT name,context FROM pg_settings;
name

context

----------------------------+-----------archive_command

| sihup

archive_mode

| postmaster

block_size

| internal

log_connections

| backend

log_min_duration_statement

| superuser

search_path

| user

1. Voir: http://docs.postgresql.fr/current/view-pg-settings.html
2. Voir: http://docs.postgresql.fr/current/sql-reset.html
2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 134

18/04/11 17:35

Chapitre 6

Configuration du serveur 135

La colonne context nest pas trs bien documente dans le manuel officiel. La liste
suivante vous donne la dfinition de chaque contexte:
internal. Ces paramtres sont principalement configurs au moment de la

configuration initiale avant la compilation. Bien quils soient inclus dans la vue
vous ne pourrez pas les modifier sans recompilation du logiciel.

pg_settings,

postmaster. Ils ne peuvent tre modifis quen redmarrant le serveur. Tous les

paramtres relatifs la mmoire partage sont de cette catgorie.


sighup. Si vous envoyez un signal HUP au serveur, il aura pour effet de lui faire

relire le fichier postgresql.conf. Tous les changements faits sur ces paramtres seront pris en compte immdiatement. La section suivante vous montre
comment faire.
backend. Ces paramtres sont, comme la famille sighup, modifis aprs relecture

du fichier de configuration. Mais les changements naffectent pas les sessions en


cours. Seules les nouvelles sessions prendront ces changements en compte. Il ny
a pas beaucoup de paramtres de ce type. La plupart dentre eux ne seront pris en
compte que lorsque lon commence ou arrte une session. Lexemple ci-dessus
indique que log_connections est de ce type (ce paramtre sert indiquer
PostgreSQL de tracer les nouvelles connexions). On imagine sans difficults que
ce paramtre na aucun effet rtroactif sur les connexions dj ralises, seules
les connexions ultrieures seront traces.
superuser. Ils ne sont modifis que par des superutilisateurs de la base de

donnes nimporte quel moment. Les changements sont effectifs immdiatement sans mme devoir recharger la configuration. La plupart des paramtres de
cette catgorie sont relatifs aux fonctionnalits de traces des requtes excutes
par le serveur.
user. Ces paramtres peuvent tre modifis dynamiquement par un utilisateur au

niveau de la session courante. Dans ce cas le changement naffectera pas les autres
sessions. Ils peuvent aussi surcharger les paramtres lus dans le fichier de configuration pour un utilisateur donn1. Dans ce dernier cas, chaque fois que lutilisateur
se connecte, les paramtres concerns prendront la valeur donne au niveau utilisateur, parfois pour une base de donnes particulire.
Comme vous pouvez sans doute le dduire partir de cette liste, la rponse une question de la forme : Quelle est la valeur actuelle de work_mem ? peut avoir plusieurs
rponses en fonction de votre identit dans la base et du contexte utilis. Un paramtre
est en effet initialis avec la valeur correspondante tire du fichier postgresql.conf.
1. Lordre ALTER ROLE nom SET vous permet de faire cela.
Voir la documentation: http://docs.postgresql.fr/current/sql-alterrole.html
2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 135

18/04/11 17:35

136 Bases de donnes PostgreSQL

Puis sa valeur par dfaut est modifie en rechargeant la configuration. Et enfin elle peut
tre modifie encore une fois dans une session qui a besoin de changer un paramtre
particulier avant dexcuter une requte.
INFO
Le superutilisateur est lutilisateur qui a cr la base, en gnral postgres.

Recharger le fichier de configuration


Vous disposez de trois faons pour forcer le rechargement du fichier de configuration
par PostgreSQL et mettre jour les valeurs de la famille sighup.
La fonction systme pg_reload_conf() est une premire mthode, condition de se
connecter comme superutilisateur:
postgres=# SELECT pg_reload_conf();
pg_reload_conf
---------------t

La commande Unix kill vous permet denvoyer un signal SIGHUP au serveur:


$ ps -eaf | grep postgres -D
postgres 11185
1 0 22:21 pts/0 00:00:00 /home/postgres/inst/bin/ postgres -D /
home/postgres/data/
$ kill -HUP 11185

Vous pouvez encore dclencher un signal SIGHUP au serveur par le biais de la


commande pg_ctl:
$ pg_ctl reload
server signaled

Peu importe la mthode, PostgreSQL mettra le message suivant dans ses fichiers de trace:
LOG: received SIGHUP, reloading configuration files

Pour vous assurer que les modifications ont bien t prises en compte, utilisez lordre
SHOW ou en interrogeant la vue pg_settings.
Paramtres dcomments

Que se passe-il lorsque vous avez modifi vous-mme un paramtre puis que vous le
dsactivez, en le commentant dans le fichier postgresql.conf, sur un serveur dj
dmarr? La rponse dpend de la version de PostgreSQL utilise.

2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 136

18/04/11 17:35

Chapitre 6

Configuration du serveur 137

Admettons que vous ayez pralablement modifi le paramtre suivant dans le postgresql.conf:
checkpoint_segments = 30

Vous ditez ensuite le fichier de faon commenter ce paramtre en le prfixant du


caractre dise:
#checkpoint_segments = 30

Puis vous demandez au serveur de recharger sa configuration:


$ pg_ctl reload

Le paramtre checkpoint_segment est plac dans le contexte sighup. partir de PostgreSQL 8.3, un tel changement verra le paramtre reprendre la valeur par dfaut du
serveur (boot_val). Et partir de la version9.0, ce changement sera enregistr dans le
fichier de trace:
LOG: received SIGHUP, reloading configuration files
LOG: parameter checkpoint_segments removed from configuration file, reset to default

Vous pouvez confirmer le changement avec lordre SHOW:


$ psql -x -c show checkpoint_segments
-[ RECORD 1 ]-------+-checkpoint_segments | 3

Mais si vous utilisez PostgreSQL 8.2 ou une version antrieure, aucun changement ne
se produira: checkpoint_segments sera toujours positionn 30. Il faudra redmarrer
le serveur pour quil reprenne sa valeur par dfaut de 3.
Ce comportement complexe, qui dpend des versions, oblige les administrateurs PostgreSQL, mme les plus expriments, vrifier par deux fois quun paramtre modifi
a bien t pris en compte, soit en utilisant SHOW, soit en interrogeant pg_settings.
Toujours depuis la version 8.2, il est possible dinclure des fichiers de configuration
additionnels partir du fichier postgresql.conf principal, grce la directive include1.
Le fichier est ensuite charg comme si vous aviez insr son contenu lendroit o vous
lavez inclus. La vue pg_settings vous permet toutefois de dterminer le fichier qui a
permis de positionner tel paramtre. Elle indique dailleurs quelle ligne il a t modifi.
Parailleurs, si un paramtre est positionn plusieurs fois, seule la dernire valeur lue
sera prise en compte.

1. Voir: http://docs.postgresql.fr/current/runtime-config.html#config-setting

2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 137

18/04/11 17:35

138 Bases de donnes PostgreSQL

Paramtres au niveau serveur


Dans certains cas, ces paramtres peuvent tre modifis dans dautres contextes. Mais
en gnral, ceux qui sont voqus ici ne peuvent tre modifis que par le fichier postgresql.conf avant le dmarrage du serveur.

Connexions aux bases de donnes


Un certain nombre de paramtres de configuration contrlent la faon dont les utilisateurs peuvent se connecter, soit distance, soit en local, la base de donnes. La liste
complte de ces paramtres est disponible dans le manuel: http://docs.postgresql.fr/
docs/current/runtime-config-connection.html.
listen_addresses

Il vous faudra modifier listen_adresses de faon ce quune instance puisse tre


utilise distance. Sa valeur par dfaut nautorise que les connexions locales, cest-dire des utilisateurs qui sont connects sur le mme serveur que linstance de base de
donnes. On le configure en gnral de faon couter sur toutes les interfaces du
systme, de cette manire:
listen_addresses = *

Ensuite, vous pouvez configurer le fichier pg_hha.conf pour contrler finement les droits
daccs. La documentation dcrit comment le faire: http://docs.postgresql.fr/current/
auth-pg-hba-conf.html.
Cette faon de procder peut potentiellement poser des problmes de performances. Il
peut tre en effet moins coteux de configurer plus finement listen_addresses plutt
que de laisser les clients se connecter et ensuite valider leur connexion par rapport au
contenu du pg_hba.conf. Non seulement, vous consommerez plus de ressources, mais
vous laisserez aussi la possibilit des utilisateurs malicieux de provoquer un dni de
service par cette voie.
En pratique, trs peu de serveurs PostgreSQL sont exposs directement sur Internet. En
gnral, les accs rseaux sur le port par dfaut de PostgreSQL (5432) sont filtrs au
niveau des firewalls. Ce premier niveau de scurit est certainement lapproche la plus
efficace et elle permet en plus de scuriser dautres applications. Comme cest souvent
le cas pour les bases de donnes hberges en mode cloud, vos systmes sont accessibles tout le monde. Dans ce cas, assurez-vous de bien utiliser les trois niveaux de
dfense suivants: restreignez les accs au niveau du firewall, rduisez au strict minimum
la liste des adresses dcoute de PostgreSQL et enfin restreignez finement les accs aux
bases de donnes en utilisant le fichier pg_hba.conf.

2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 138

18/04/11 17:35

Chapitre 6

Configuration du serveur 139

max_connections
Vous trouverez ce paramtre systmatiquement configur, en gnral 100, dans le
fichier postgresql.conf. Le programme initdb lui assigne sa valeur initiale. Nous
lavons expliqu au chapitre prcdent: chaque connexion utilise une petite quantit de
mmoire partage. Il est donc possible que votre systme ait des limites par dfaut
dallocation de mmoire partage. De ce fait, il nest mme pas possible dallouer suffisamment de mmoire pour tenir autant de connexions. En consquence, la cration de
linstance, initdb dtermine la valeur la plus leve possible, en se limitant un
maximum de 100 connexions possibles. Cette valeur est alors sauvegarde dans le
fichier de configuration, comme initdb le fait aussi pour shared_buffers.
Il est important de ne pas positionner une valeur trop leve par rapport vos besoins
rels. Ce paramtre influence en effet la consommation de ressources. Sil est trop lev,
il utilisera bien entendu plus de mmoire partage. Et gnralement cest la dernire des
choses dont vous aurez vous proccuper si vous garder une valeur raisonnable ce
paramtre.
Mais un client peut utiliser dautres ressources et notamment allouer de la mmoire pour
les tris (contrle par le paramtre work_mem, voir plus bas). Si ce paramtre est configur avec une valeur leve, il est plus prudent de diminuer ce paramtre pour viter de
consommer trop de mmoire.
INFO
Les systmes Windows imposent une limitation dallocation de ressources qui vous empche
davoir plus de 125connexions simultanes. Un article du Wiki dcrit le problme et vous
propose des solutions: http://wiki.postgresql.org/wiki/Running_&_Installing_PostgreSQL_
On_Native_Windows.

Il faut nanmoins bien comprendre qutablir une connexion PostgreSQL consomme


beaucoup de ressources. Dans une base de donnes, le travail dtablissement dune
connexion et dauthentification, jusqu atteindre le point o le client peut excuter
une requte, est une opration trs coteuse. Les connexions commencent devenir
coteuses et dgradent les performances du systmes quand le serveur doit grer
plusieurs centaines de connexions. Le seuil exact dpend par ailleurs fortement du matriel et de la configuration. Certes, si votre systme doit excuter des centaines de requtes
concurrentes, la solution nest pas dautoriser chaque client se connecter directement
la base. Vous pouvez placer un systme de multiplexage de connexions entre lapplication
et la base de donnes de faon viter de vous retrouver face un point de contention.
Reportez-vous au Chapitre13 pour plus de dtail sur cette technique.

2011 Pearson Education France Bases de donnes PostgreSQL Gregory Smith

Book_PostgreSQL.indb 139

18/04/11 17:35