Академический Документы
Профессиональный Документы
Культура Документы
Configuration du serveur
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
Book_PostgreSQL.indb 133
18/04/11 17:35
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
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
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
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
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.
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.
Book_PostgreSQL.indb 136
18/04/11 17:35
Chapitre 6
Admettons que vous ayez pralablement modifi le paramtre suivant dans le postgresql.conf:
checkpoint_segments = 30
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
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
Book_PostgreSQL.indb 137
18/04/11 17:35
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.
Book_PostgreSQL.indb 138
18/04/11 17:35
Chapitre 6
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.
Book_PostgreSQL.indb 139
18/04/11 17:35