source:
trunk/workshop-foss4g/tuning.rst
@
81
Revision 62, 8.2 KB checked in by thomasg, 13 years ago (diff) |
---|
Partie 21 : Paramétrer PostgreSQL pour le spatial
PostgreSQL est une base de données trÚs versatile, capable de tourner dans des environnements ayant des ressources trÚs limitées et partageant ces ressources avec un grand nombre d'autres applications. Afin d'assurer qu'elle tournera convenablement dans ces environnements, la configuration par défaut est trÚs peu consommatrice de ressources mais terriblement inadaptée pour des bases de données hautes-performances en production. Ajoutez à cela le fait que les bases de données spatiales ont différents types d'utilisation, et que les données sont généralement plus grandes que les autres types de données, vous en arriverez à la conclusion que les paramÚtres par défaut ne sont pas appropriés pour notre utilisation.
Tous ces paramÚtres de configuration peuvent être édités dans le fichier de configuration de la base de données : :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`. Le contenu du fichier est du texte et il peut donc être ouvert avec l'outil d'édition de fichiers de votre choix (Notepad par exemple). Les modifications apportées à ce fichier ne seront effectives que lors du redémarrage du serveur.
Une façon simple d'éditer ce fichier de configuration est d'utiliser l'outil nommé : "Backend Configuration Editor". Depuis pgAdmin, allez dans File > Open postgresql.conf.... Il vous sera demandé le chemin du fichier, naviguez dans votre arborescence jusqu'au fichier :file:`C:\\Documents and Settings\\%USER\\.opengeo\\pgdata\\%USER`.
Cette partie décrit certains des paramÚtres de configuration qui doivent être modifiés pour la mise ne place d'une base de données spatiale en production. Pour chaque partie, trouvez le bon paramÚtre dans la liste et double cliquez dessus pour l'éditer. Changez le champ Value par la valeur que nous recommandons, assurez-vous que le champ est bien activé puis cliquez sur OK.
Note
Ces valeurs sont seulement celles que nous recommandons, chaque environnement diffÚrera et tester les différents paramétrages est toujours nécessaire pour s'assurer d'utiliser la configuration optimale. Mais dans cette partie nous vous fournissons un bon point de départ.
work_mem
Définit la quantité de mémoire que les opération internes d'ordonnancement et les tables de hachages peuvent consommer avec le serveur sur le disque. Cette valeur définit la mémoire disponible pour chaque opération complexe, les requêtes complexes peuvent avoir plusieurs ordres ou opération de hachage tournant en parallÚle, et chaque client connecté peut exécuter une requête.
Vous devez donc considérer combien de connexions et quelle complexité est attendue dans les requêtes avant d'augmenter cette valeur. Le bénéfice acquis par l'augmentation de cette valeur est que la plupart des opération de classification, dont les clause ORDER BY et DISTINCT, les jointures, les agrégation basées sur les hachages et l'exécution de requête imbriquées, pourront être réalisées sans avoir à passer par un stockage sur disque.
Valeur par défaut : 1MB
Valeur recommandée : 16MB
maintenance_work_mem
Définit la quantité de mémoire utilisée pour les opération de maintenance, dont le nettoyage (VACUUM), les index et la création de clefs étrangÚres. Comme ces opération sont couramment utilisées, la valeur par défaut devrait être acceptable. Ce paramÚtre peut être augmenté dynamiquement à l'exécution depuis une connexion au serveur avant l'exécution d'un grand nombre d'appels à :command:`CREATE INDEX` ou :command:`VACUUM` comme le montre la commande suivante.
SET maintenance_work_mem TO '128MB'; VACUUM ANALYZE; SET maintenance_work_mem TO '16MB';Valeur par défaut : 16MB
Valeur recommandée : 128MB
wal_buffers
Définit la quantité de mémoire utilisée pour l'écriture des données dans le journal respectant la rÚgle du defer (WAL). Elle indique que les informations pour annuler les effets d'une opération sur un objet doivent être écrites dans le journal en mémoire stable avant que l'objet modifié ne migre sur le disque. Cette rÚgle permet d'assurer l'intégrité des données lors d'une reprise aprÚs défaillance. En effet, il suffira de lire le journal pour retrouver l'état de la base lors de son arrêt brutal.
La taille de ce tampon nécessite simplement d'être suffisament grand pour stocker les données WAL pour une seule transaction. Alors que la valeur par défaut est généralement suffisante, les données spatiales tendent à être plus larges. Il est donc recommandé d'augmenter la taille spécifiée dans ce paramÚtre.
Valeur par défaut : 64kB
Valeur recommandée : 1MB
checkpoint_segments
Cette valeur définit le nombre maximum de segments des journaux (typiquement 16MB) qui doit être remplit entre chaque point de reprise WAL. Un point de reprise WAL est une partie d'une séquence de transactions pour lequel on garantit que les fichiers de données ont été mis à jour avec toutes les requêtes précédant ce point. à ce moment-là toutes les pages sont punaisées sur le disque et les points de reprise sont écrits dans le fichier de journal. Cela permet au processus de reprise aprÚs défaillance de trouver les derniers points de reprise et applique toute les lignes suivantes pour récupérer l'état des données avant la défaillance.
Ãtant donné que les points de reprise nécessitent un punaisage de toutes le pages ayant été modifiées sur le disque, cela va créer une charge d'entrées/sorties significative. Le même argument que précédemment s'applique ici, les données spatiales sont assez grandes pour contrebalancer l'optimisation de données non spatiales. Augmenter cette valeur limitera le nombre de points de reprise, mais impliquera un redémarrage plus lent en cas de défaillance.
Valeur par défaut : 3
Valeur recommandée : 6
random_page_cost
Cette valeur sans unité représente le coût d'accÚs aléatoire à une page du disque. Cette valeur est relative aux autres paramÚtres de coût notamment l'accÚs séquentiel aux pages, et le coût des opérations processeur. Bien qu'il n'y ait pas de valeur magique ici, la valeur par défaut est généralement trop faible. Cette valeur peut être affectée dynamiquement par session en utilisant la commande SET random_page_cost TO 2.0.
Valeur par défaut : 4.0
Valeur recommandée : 2.0
seq_page_cost
C'est une paramÚtre qui contrÎle le coût des accÚs séquentiels aux pages. Il n'est généralement pas nécessaire de modifier cette valeur mais la différence entre cette valeur et la valeur random_page_cost affecte drastiquement le choix fait par le planificateur de requêtes. Cette valeur peut aussi être affectée depuis une session.
Valeur par défaut : 1.0
Valeur recommandée : 1.0
Recharger la configuration
AprÚs avoir réalisé les changements mentionnés dans cette partie sauvez-les puis rechargez la configuration.
- Ceci se fait en cliquant avec le bouton droit sur le nom du serveur (PostgreSQL 8.4 on localhost:54321) depuis pgAdmin, selectionnez Disconnect.
- Cliquez sur le bouton Shutdown depuis le Dashboard OpenGeo, puis cliquez sur Start.
- Pour finir reconnectez-vous au serveur depuis pgAdmin (cliquez avec le bouton droit sur le serveur puis sélectionnez Connect).