Changeset 834
- Timestamp:
- 12/06/07 12:27:25 (10 months ago)
- Files:
-
- traduc/branches/bv747/manuel/wal.sgml (modified) (1 diff)
- traduc/branches/bv803/manuel/wal.sgml (modified) (2 diffs)
- traduc/branches/bv81x/manuel/wal.xml (modified) (11 diffs)
- traduc/branches/bv82x/manuel/wal.xml (modified) (13 diffs)
- traduc/trunk/manuel/wal.xml (modified) (23 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
traduc/branches/bv747/manuel/wal.sgml
r109 r834 376 376 écrit, la position du point de contrôle est sauvegardée dans le 377 377 fichier <filename>pg_control</filename>. Donc, quand la 378 restauration doit être faite, le serveur lit en premier378 restauration doit se faire, le serveur lit en premier 379 379 <filename>pg_control</filename> et ensuite l'entrée du point de 380 380 contrôle ; ensuite, il exécute l'opération REDO en parcourant vers traduc/branches/bv803/manuel/wal.sgml
r109 r834 337 337 écrit, la position du point de contrôle est sauvegardée dans le 338 338 fichier <filename>pg_control</filename>. Donc, quand la 339 restauration doit être faite, le serveur lit en premier339 restauration doit se faire, le serveur lit en premier 340 340 <filename>pg_control</filename> et ensuite l'entrée du point de 341 341 contrôle ; ensuite, il exécute l'opération REDO en parcourant vers … … 349 349 <para> 350 350 Pour gérer le cas où <filename>pg_control</filename> est corrompu, nous 351 devons supporter la possibilité de parcourirdes segments de journaux352 existants en ordre inverse — d eplus récent au plus ancien — pour351 devons permettre le parcours des segments de journaux 352 existants en ordre inverse — du plus récent au plus ancien — pour 353 353 trouver le dernier point de vérification. Ceci n'a pas encore été implémenté. 354 354 <filename>pg_control</filename> est assez petit (moins d'une page disque) traduc/branches/bv81x/manuel/wal.xml
r636 r834 3 3 4 4 <chapter id="wal"> 5 <title>Fiabilité et WAL</title>5 <title>Fiabilité et journaux de transaction</title> 6 6 7 7 <para> 8 Ce chapitre explique comment les WAL sont utilisés pour obtenir des9 traitements efficaces et fiables.8 Ce chapitre explique comment les journaux de transaction sont utilisés pour 9 obtenir des traitements efficaces et fiables. 10 10 </para> 11 11 … … 15 15 <para> 16 16 La fiabilité est une propriété importante de tout système de base de 17 données sérieux. <productname>PostgreSQL</productname> fait tout ce qui est en son 18 pouvoir pour garantir des opérations fiables. Un aspect de la fiabilité des 19 opérations est que toutes les données enregistrées par une transaction 17 données sérieux. <productname>PostgreSQL</productname> fait tout ce qui est 18 en son pouvoir pour garantir une fiabilité à toute épreuve. Un des aspects 19 de cette fiabilité est que toutes les données enregistrées par une 20 transaction 20 21 validée doivent être stockées dans un espace non volatile, un espace 21 22 non sensible aux coupures de courant, aux bogues du système d'exploitation … … 23 24 volatile, bien sûr). Écrire avec succès les données sur le stockage 24 25 permanent de l'ordinateur (disque dur ou un équivalent) est habituellement 25 suffisant pour cela. En fait, même si un ordinateur est suffisamment26 suffisant pour cela. En fait, même si un ordinateur est vraiment 26 27 endommagé, si le disque dur survit, il peut être placé dans un autre 27 28 ordinateur avec un matériel similaire et toutes les transactions validées … … 70 71 il ne peut pas faire grand chose pour s'assurer que les données sont 71 72 arrivées dans un espace de stockage non volatile. Ce travail incombe à 72 l'administrateur : ildoit s'assurer que tous les composants de73 l'administrateur : ce dernier doit s'assurer que tous les composants de 73 74 stockage assurent l'intégrité des données. Évitez les contrôleurs disques 74 ne disposant pas de caches protégé es par batterie. Au niveau du disque,75 ne disposant pas de caches protégés par batterie. Au niveau du disque, 75 76 désactivez le cache <quote>write-back</quote> si le disque ne garantie pas 76 77 que les données seront écrites avant un arrêt. … … 82 83 secteur de 512 octets généralement. Chaque opération de lecture ou écriture 83 84 physique traite un secteur entier. Quand la demande d'écriture arrive au 84 lecteur, elle pourrait contenir 512 octets, 1024 octets ou 9182 octets et85 lecteur, elle pourrait contenir 512 octets, 1024 octets ou 8192 octets et 85 86 le processus d'écriture pourrait échouer à cause d'une perte de courant à 86 87 tout moment signifiant que certains octets pourraient être écrits et les … … 161 162 162 163 <sect1 id="wal-configuration"> 163 <title>Configuration de <acronym>WAL</acronym></title>164 165 <para> 166 Il y a plusieurs paramètres de configuration associés à167 <acronym>WAL</acronym>qui affectent les performances de la base de168 d e données. Cette section explique leur utilisation. Consultez le164 <title>Configuration de journaux de transaction</title> 165 166 <para> 167 Il y a plusieurs paramètres de configuration associés aux 168 journaux de transaction qui affectent les performances de la base de 169 données. Cette section explique leur utilisation. Consultez le 169 170 <xref linkend="runtime-config"/> pour des détails sur la 170 171 mise en place de ces paramètres de configuration. … … 174 175 Dans la séquence des transactions, les 175 176 <firstterm>points de contrôles</firstterm><indexterm><primary>points de 176 contrôle</primary></indexterm> (checkpoints) sont des 177 contrôle</primary></indexterm> (appelés 178 <foreignphrase>checkpoints</foreignphrase>) sont des 177 179 points qui garantissent que les fichiers de données ont été mis à 178 180 jour avec toutes les informations enregistrées dans le journal avant le … … 181 183 entrée spéciale, pour le point de contrôle, est écrite dans le 182 184 journal. En cas de défaillance, la procédure de récupération recherche le 183 dernier enregistrement d'un point de vérification dans les traces (connu 184 comme le <quote>redo log</quote>) à partir duquel il devra lancer l'opération 185 dernier enregistrement d'un point de vérification dans les traces 186 (enregistrement connus sous le nom de <quote>redo log</quote>) à partir 187 duquel il devra lancer l'opération 185 188 REDO. Toute modification effectuée sur les fichiers de données avant ce point 186 189 est sûre d'avoir été enregistrée sur disque. Du coup, après qu'un point de 187 vérification soit effectué, tous les segments de trace précédant celui 190 vérification est réalisé, tous les segments représentant des journaux de 191 transaction précédant celui 188 192 contenant le <quote>redo record</quote> ne sont plus nécessaires et peuvent 189 être soit recyclés soit supprimés (quand l'archivage des <acronym>WAL</acronym>190 se fait, les segments de traces doivent être archivés avant d'être recyclés191 ou supprimés).192 </para> 193 194 <para> 195 Le processus d'écriture en tâche de fond lance raautomatiquement un point de196 contrôle de temps en temps . Un point de contrôle est créétous les <xref197 linkend="guc-checkpoint-segments"/> segments de journauxou dès que <xref193 être soit recyclés soit supprimés (quand l'archivage des journaux de 194 transaction est activé, ces derniers doivent être archivés avant d'être 195 recyclés ou supprimés). 196 </para> 197 198 <para> 199 Le processus d'écriture en tâche de fond lance automatiquement un point de 200 contrôle de temps en temps ,: tous les <xref 201 linkend="guc-checkpoint-segments"/> journaux de transaction ou dès que <xref 198 202 linkend="guc-checkpoint-timeout"/> secondes se sont 199 écoulées. Les paramètres par défaut sont respectivement 3 segments200 et 300 secondes. Il est également possible de forcer la création203 écoulées. Les paramètres par défaut sont respectivement de trois journaux 204 et de 300 secondes. Il est également possible de forcer la création 201 205 d'un point de contrôle en utilisant la commande SQL 202 206 <command>CHECKPOINT</command>. … … 376 380 Le but de <acronym>WAL</acronym>, s'assurer que le journal est écrit 377 381 avant l'altération des entrées dans la base, peut être mis en échec par 378 les lecteurs desdisques<indexterm><primary>disques durs</primary></indexterm> qui379 faussementrapportent une écriture382 les disques<indexterm><primary>disques durs</primary></indexterm> qui 383 rapportent une écriture 380 384 réussie au noyau quand, en fait, ils ont seulement mis en cache 381 les données et ne les ont pas encore stocké es sur le disque. Une385 les données et ne les ont pas encore stockés sur le disque. Une 382 386 coupure de courant dans ce genre de situation peut toujours mener à 383 lacorruption irrécupérable des données. Les administrateurs384 devraient s'assurer que les disques contenant les journaux 385 <acronym>WAL</acronym>de <productname>PostgreSQL</productname> ne387 une corruption irrécupérable des données. Les administrateurs 388 devraient s'assurer que les disques contenant les journaux de 389 transaction de <productname>PostgreSQL</productname> ne 386 390 produisent pas ce genre de faux rapports. 387 391 </para> … … 391 395 écrit, la position du point de contrôle est sauvegardée dans le 392 396 fichier <filename>pg_control</filename>. Donc, quand la 393 restauration doit être faite, le serveur lit en premier397 restauration doit se faire, le serveur lit en premier 394 398 <filename>pg_control</filename> et ensuite l'entrée du point de 395 399 contrôle ; ensuite, il exécute l'opération REDO en parcourant vers … … 403 407 <para> 404 408 Pour gérer le cas où <filename>pg_control</filename> est corrompu, nous 405 devons supporter la possibilité de parcourirdes segments de journaux406 existants en ordre inverse — d eplus récent au plus ancien — pour409 devons permettre le parcours des segments de journaux 410 existants en ordre inverse — du plus récent au plus ancien — pour 407 411 trouver le dernier point de vérification. Ceci n'a pas encore été implémenté. 408 412 <filename>pg_control</filename> est assez petit (moins d'une page disque) traduc/branches/bv82x/manuel/wal.xml
r715 r834 3 3 4 4 <chapter id="wal"> 5 <title>Fiabilité et WAL</title>5 <title>Fiabilité et journaux de transaction</title> 6 6 7 7 <para> 8 Ce chapitre explique comment les WAL sont utilisés pour obtenir des9 traitements efficaces et fiables.8 Ce chapitre explique comment les journaux de transaction sont utilisés pour 9 obtenir des traitements efficaces et fiables. 10 10 </para> 11 11 … … 15 15 <para> 16 16 La fiabilité est une propriété importante de tout système de base de 17 données sérieux. <productname>PostgreSQL</productname> fait tout ce qui est en son 18 pouvoir pour garantir des opérations fiables. Un aspect de la fiabilité des 19 opérations est que toutes les données enregistrées par une transaction 17 données sérieux. <productname>PostgreSQL</productname> fait tout ce qui est 18 en son pouvoir pour garantir une fiabilité à toute épreuve. Un des aspects 19 de cette fiabilité est que toutes les données enregistrées par une 20 transaction 20 21 validée doivent être stockées dans un espace non volatile, un espace 21 22 non sensible aux coupures de courant, aux bogues du système d'exploitation … … 23 24 volatile, bien sûr). Écrire avec succès les données sur le stockage 24 25 permanent de l'ordinateur (disque dur ou un équivalent) est habituellement 25 suffisant pour cela. En fait, même si un ordinateur est suffisamment26 suffisant pour cela. En fait, même si un ordinateur est vraiment 26 27 endommagé, si le disque dur survit, il peut être placé dans un autre 27 28 ordinateur avec un matériel similaire et toutes les transactions validées … … 70 71 il ne peut pas faire grand chose pour s'assurer que les données sont 71 72 arrivées dans un espace de stockage non volatile. Ce travail incombe à 72 l'administrateur : ildoit s'assurer que tous les composants de73 l'administrateur : ce dernier doit s'assurer que tous les composants de 73 74 stockage assurent l'intégrité des données. Évitez les contrôleurs disques 74 ne disposant pas de caches protégé es par batterie. Au niveau du disque,75 ne disposant pas de caches protégés par batterie. Au niveau du disque, 75 76 désactivez le cache <quote>write-back</quote> si le disque ne garantie pas 76 77 que les données seront écrites avant un arrêt. … … 82 83 secteur de 512 octets généralement. Chaque opération de lecture ou écriture 83 84 physique traite un secteur entier. Quand la demande d'écriture arrive au 84 lecteur, elle pourrait contenir 512 octets, 1024 octets ou 9182 octets et85 lecteur, elle pourrait contenir 512 octets, 1024 octets ou 8192 octets et 85 86 le processus d'écriture pourrait échouer à cause d'une perte de courant à 86 87 tout moment signifiant que certains octets pourraient être écrits et les … … 161 162 162 163 <sect1 id="wal-configuration"> 163 <title>Configuration de <acronym>WAL</acronym></title>164 165 <para> 166 Il y a plusieurs paramètres de configuration associés à167 <acronym>WAL</acronym>qui affectent les performances de la base de168 d e données. Cette section explique leur utilisation. Consultez le164 <title>Configuration de journaux de transaction</title> 165 166 <para> 167 Il y a plusieurs paramètres de configuration associés aux 168 journaux de transaction qui affectent les performances de la base de 169 données. Cette section explique leur utilisation. Consultez le 169 170 <xref linkend="runtime-config"/> pour des détails sur la 170 171 mise en place de ces paramètres de configuration. … … 174 175 Dans la séquence des transactions, les 175 176 <firstterm>points de contrôles</firstterm><indexterm><primary>points de 176 contrôle</primary></indexterm> (checkpoints) sont des 177 contrôle</primary></indexterm> (appelés 178 <foreignphrase>checkpoints</foreignphrase>) sont des 177 179 points qui garantissent que les fichiers de données ont été mis à 178 180 jour avec toutes les informations enregistrées dans le journal avant le … … 181 183 entrée spéciale, pour le point de contrôle, est écrite dans le 182 184 journal. En cas de défaillance, la procédure de récupération recherche le 183 dernier enregistrement d'un point de vérification dans les traces (connu 184 comme le <quote>redo log</quote>) à partir duquel il devra lancer l'opération 185 dernier enregistrement d'un point de vérification dans les traces 186 (enregistrement connus sous le nom de <quote>redo log</quote>) à partir 187 duquel il devra lancer l'opération 185 188 REDO. Toute modification effectuée sur les fichiers de données avant ce point 186 189 est sûre d'avoir été enregistrée sur disque. Du coup, après qu'un point de 187 vérification soit effectué, tous les segments de trace précédant celui 190 vérification est réalisé, tous les segments représentant des journaux de 191 transaction précédant celui 188 192 contenant le <quote>redo record</quote> ne sont plus nécessaires et peuvent 189 être soit recyclés soit supprimés (quand l'archivage des <acronym>WAL</acronym>190 se fait, les segments de traces doivent être archivés avant d'être recyclés191 ou supprimés).192 </para> 193 194 <para> 195 Le processus d'écriture en tâche de fond lance raautomatiquement un point de196 contrôle de temps en temps . Un point de contrôle est créétous les <xref197 linkend="guc-checkpoint-segments"/> segments de journauxou dès que <xref193 être soit recyclés soit supprimés (quand l'archivage des journaux de 194 transaction est activé, ces derniers doivent être archivés avant d'être 195 recyclés ou supprimés). 196 </para> 197 198 <para> 199 Le processus d'écriture en tâche de fond lance automatiquement un point de 200 contrôle de temps en temps ,: tous les <xref 201 linkend="guc-checkpoint-segments"/> journaux de transaction ou dès que <xref 198 202 linkend="guc-checkpoint-timeout"/> secondes se sont 199 écoulées. Les paramètres par défaut sont respectivement 3 segments200 et 300 secondes. Il est également possible de forcer la création203 écoulées. Les paramètres par défaut sont respectivement de trois journaux 204 et de 300 secondes. Il est également possible de forcer la création 201 205 d'un point de contrôle en utilisant la commande SQL 202 206 <command>CHECKPOINT</command>. … … 207 211 <varname>checkpoint_timeout</varname> implique 208 212 des points de contrôle plus fréquents. Cela permet une récupération 209 plus rapide après défaillance (puisqu'il y a moins de travail à 210 récupérer). Cependant, il faut équilibrer cela avec 211 l'augmentation du coût d'écriture des pages de données non propres. 212 Si <xref linkend="guc-full-page-writes"/> est configuré (comme la valeur par 213 plus rapide après défaillance puisqu'il y a moins d'écritures à 214 synchroniser. Cependant, il faut équilibrer cela avec 215 l'augmentation du coût d'écriture des pages de données modifiées. 216 Si <xref linkend="guc-full-page-writes"/> est configuré (ce qui est la 217 valeur par 213 218 défaut), il reste un autre facteur à considérer. Pour s'assurer de la 214 219 cohérence des pages de données, la première modification d'une page de 215 220 données après chaque point de vérification résulte dans le traçage du contenu 216 221 entier de la page. Dans ce cas, un intervalle de points de vérification 217 plus petit augmentera le volume en sortie des traces WAL, dégradant 218 partiellement le but d'utiliser un intervalle plus petit et impliquant 222 plus petit augmentera le volume en sortie des journaux de transaction, 223 diminuant légèrement l'intérêt d'utiliser un intervalle plus petit et 224 impliquant 219 225 de toute façon plus d'entrées/sorties au niveau disque. 220 226 </para> … … 223 229 Les points de contrôle sont assez coûteux, tout d'abord parce qu'ils 224 230 écrivent tous les tampons utilisés, et ensuite parce que cela suscite un 225 trafic WAL supplémentaire comme indiqué ci-dessus. Du coup, il est conseillé 231 trafic supplémentaire dans les journaux de transaction, comme indiqué 232 ci-dessus. Du coup, il est conseillé 226 233 de configurer les paramètres en relation assez haut pour que ces points de 227 contrôle ne surviennent pas trop fréquemment. En tant que simple vérification 228 de santé de vos paramètres, vous pouvez configurer le paramètre <xref 234 contrôle ne surviennent pas trop fréquemment. Pour une vérification 235 rapide de l'adéquation de vos paramètres, vous pouvez configurer le 236 paramètre <xref 229 237 linkend="guc-checkpoint-warning"/>. Si les points de contrôle arrivent plus 230 rapidement que <varname>checkpoint_warning</varname> secondes, un message sera231 affiché dans les journauxdu serveur recommandant d'accroître238 rapidement que <varname>checkpoint_warning</varname> secondes, un message 239 est affiché dans les journaux applicatifs du serveur recommandant d'accroître 232 240 <varname>checkpoint_segments</varname>. Une apparition occasionnelle d'un 233 241 message ne doit pas vous alarmer mais, s'il apparaît souvent, alors les 234 242 paramètres de contrôle devraient être augmentés. Les opérations en masse, 235 comme les gros transferts via <command>COPY</command>, pourraient être la cause 243 comme les transferts importants de données via <command>COPY</command>, 244 pourraient être la cause 236 245 de l'apparition d'un tel nombre de messages d'avertissements si 237 246 vous n'avez pas configuré <varname>checkpoint_segments</varname> avec une valeur … … 376 385 Le but de <acronym>WAL</acronym>, s'assurer que le journal est écrit 377 386 avant l'altération des entrées dans la base, peut être mis en échec par 378 les lecteurs desdisques<indexterm><primary>disques durs</primary></indexterm> qui379 faussementrapportent une écriture387 les disques<indexterm><primary>disques durs</primary></indexterm> qui 388 rapportent une écriture 380 389 réussie au noyau quand, en fait, ils ont seulement mis en cache 381 les données et ne les ont pas encore stocké es sur le disque. Une390 les données et ne les ont pas encore stockés sur le disque. Une 382 391 coupure de courant dans ce genre de situation peut toujours mener à 383 lacorruption irrécupérable des données. Les administrateurs384 devraient s'assurer que les disques contenant les journaux 385 <acronym>WAL</acronym>de <productname>PostgreSQL</productname> ne392 une corruption irrécupérable des données. Les administrateurs 393 devraient s'assurer que les disques contenant les journaux de 394 transaction de <productname>PostgreSQL</productname> ne 386 395 produisent pas ce genre de faux rapports. 387 396 </para> … … 391 400 écrit, la position du point de contrôle est sauvegardée dans le 392 401 fichier <filename>pg_control</filename>. Donc, quand la 393 restauration doit être faite, le serveur lit en premier402 restauration doit se faire, le serveur lit en premier 394 403 <filename>pg_control</filename> et ensuite l'entrée du point de 395 404 contrôle ; ensuite, il exécute l'opération REDO en parcourant vers … … 403 412 <para> 404 413 Pour gérer le cas où <filename>pg_control</filename> est corrompu, nous 405 devons supporter la possibilité de parcourirdes segments de journaux406 existants en ordre inverse — d eplus récent au plus ancien — pour414 devons permettre le parcours des segments de journaux 415 existants en ordre inverse — du plus récent au plus ancien — pour 407 416 trouver le dernier point de vérification. Ceci n'a pas encore été implémenté. 408 417 <filename>pg_control</filename> est assez petit (moins d'une page disque) traduc/trunk/manuel/wal.xml
r777 r834 3 3 4 4 <chapter id="wal"> 5 <title>Fiabilité et WAL</title>5 <title>Fiabilité et journaux de transaction</title> 6 6 7 7 <para> 8 Ce chapitre explique comment les WAL sont utilisés pour obtenir des9 traitements efficaces et fiables.8 Ce chapitre explique comment les journaux de transaction sont utilisés pour 9 obtenir des traitements efficaces et fiables. 10 10 </para> 11 11 … … 15 15 <para> 16 16 La fiabilité est une propriété importante de tout système de base de 17 données sérieux. <productname>PostgreSQL</productname> fait tout ce qui est en son 18 pouvoir pour garantir des opérations fiables. Un aspect de la fiabilité des 19 opérations est que toutes les données enregistrées par une transaction 17 données sérieux. <productname>PostgreSQL</productname> fait tout ce qui est 18 en son pouvoir pour garantir une fiabilité à toute épreuve. Un des aspects 19 de cette fiabilité est que toutes les données enregistrées par une 20 transaction 20 21 validée doivent être stockées dans un espace non volatile, un espace 21 22 non sensible aux coupures de courant, aux bogues du système d'exploitation … … 23 24 volatile, bien sûr). Écrire avec succès les données sur le stockage 24 25 permanent de l'ordinateur (disque dur ou un équivalent) est habituellement 25 suffisant pour cela. En fait, même si un ordinateur est suffisamment26 suffisant pour cela. En fait, même si un ordinateur est vraiment 26 27 endommagé, si le disque dur survit, il peut être placé dans un autre 27 28 ordinateur avec un matériel similaire et toutes les transactions validées … … 70 71 il ne peut pas faire grand chose pour s'assurer que les données sont 71 72 arrivées dans un espace de stockage non volatile. Ce travail incombe à 72 l'administrateur : ildoit s'assurer que tous les composants de73 l'administrateur : ce dernier doit s'assurer que tous les composants de 73 74 stockage assurent l'intégrité des données. Évitez les contrôleurs disques 74 ne disposant pas de caches protégé es par batterie. Au niveau du disque,75 ne disposant pas de caches protégés par batterie. Au niveau du disque, 75 76 désactivez le cache <quote>write-back</quote> si le disque ne garantie pas 76 77 que les données seront écrites avant un arrêt. … … 82 83 secteur de 512 octets généralement. Chaque opération de lecture ou écriture 83 84 physique traite un secteur entier. Quand la demande d'écriture arrive au 84 lecteur, elle pourrait contenir 512 octets, 1024 octets ou 9182 octets et85 lecteur, elle pourrait contenir 512 octets, 1024 octets ou 8192 octets et 85 86 le processus d'écriture pourrait échouer à cause d'une perte de courant à 86 87 tout moment signifiant que certains octets pourraient être écrits et les … … 113 114 <firstterm>Write-Ahead Logging</firstterm> (<acronym>WAL</acronym>) 114 115 est une méthode conventionnelle pour s'assurer de l'intégrité des 115 données. Une description détaillée peut être trouvée dans la 116 plupart (si ce n'est tous) des livres sur le traitement 117 transactionnel. Brièvement, le concept central des 118 <acronym>WAL</acronym> est d'effectuer les changements des fichiers de 119 données (où résident les tables et les index) 120 uniquement après que ces changements ont été écrits dans un journal, 121 c'est-à-dire après que l'enregistrement du journal décrivant les changements a 122 été écrit vers le 123 stockage permanent. Si nous suivons cette procédure, nous n'avons 116 données. Une description détaillée peut être trouvée dans la plupart 117 des livres sur le traitement transactionnel. Brièvement, le concept central 118 du <acronym>WAL</acronym> est d'effectuer les changements des fichiers de 119 données (donc les tables et les index) uniquement après que ces changements 120 ont été écrits de façon sûr dans un journal, appelé journal des 121 transactions. Si nous suivons cette procédure, nous n'avons 124 122 pas besoin d'écrire les pages de données vers le disque à chaque 125 123 validation de transaction car nous savons que, dans l'éventualité … … 132 130 133 131 <para> 134 Utiliser les <acronym>WAL</acronym>permet de réduire de façon132 Utiliser les journaux de transaction permet de réduire de façon 135 133 significative le nombre d'écritures sur le disque puisque seul le journal 136 des transactionsa besoin d'être écrit sur le disque pour garantir qu'une134 a besoin d'être écrit sur le disque pour garantir qu'une 137 135 transaction a été validée plutôt que d'écrire dans chaque fichier de 138 136 données modifié par la transaction. Ce journal est écrit séquentiellement 139 et donc, le coût de synchronisation du journal est largement moindre que 140 le coût d'écriture des pages de données. Ceci est spécialement vrai pour 137 ce qui fait que le coût de synchronisation du journal est largement moindre 138 que le coût d'écriture des pages de données. Ceci est tout spécialement 139 vrai pour 141 140 les serveurs gérant beaucoup de petites transactions touchant différentes 142 141 parties du stockage de données. De plus, quand le serveur traite plein de 143 142 petites transactions en parallèle, un <function>fsync</function> du 144 journal des transactions devrait suffire pour valider plusieurs143 journal des transactions devrait suffire pour enregistrer plusieurs 145 144 transactions. 146 145 </para> 147 146 148 147 <para> 149 Les <acronym>WAL</acronym>rendent possible le support de sauvegarde148 Les journaux de transaction rendent possible le support de sauvegarde 150 149 en ligne et de récupération à un moment, comme décrit dans la <xref 151 linkend="continuous-archiving"/>. En archivant les données WAL, nous pouvons 152 supporter le retour à tout instant couvert par les données disponibles 153 dans les WAL : nous installons simplement une ancienne sauvegarde 154 physique de la base de données et nous rejouons les journaux WAL jusqu'au 155 moment désiré. Qui plus est, la sauvegarde physique n'a pas besoin d'être 156 une image instantanée de l'état de la base de données — si elle a été 157 faite pendant une période de temps, alors rejouer les journaux WAL pour 150 linkend="continuous-archiving"/>. En archivant les journaux de transaction, 151 nous pouvons supporter le retour à tout instant couvert par les données 152 disponibles dans les journaux de transaction : nous installons 153 simplement une ancienne sauvegarde physique de la base de données et nous 154 rejouons les journaux de transaction jusqu'au moment désiré. Qui plus est, 155 la sauvegarde physique n'a pas besoin d'être une image instantanée de 156 l'état de la base de données — si elle a été faite pendant une 157 grande période de temps, alors rejouer les journaux de transaction pour 158 158 cette période corrigera toute incohérence interne. 159 159 </para> … … 294 294 295 295 <sect1 id="wal-configuration"> 296 <title>Configuration de <acronym>WAL</acronym></title>297 298 <para> 299 Il y a plusieurs paramètres de configuration associés à300 <acronym>WAL</acronym>qui affectent les performances de la base de301 d e données. Cette section explique leur utilisation. Consultez le296 <title>Configuration de journaux de transaction</title> 297 298 <para> 299 Il y a plusieurs paramètres de configuration associés aux 300 journaux de transaction qui affectent les performances de la base de 301 données. Cette section explique leur utilisation. Consultez le 302 302 <xref linkend="runtime-config"/> pour des détails sur la 303 303 mise en place de ces paramètres de configuration. … … 307 307 Dans la séquence des transactions, les 308 308 <firstterm>points de contrôles</firstterm><indexterm><primary>points de 309 contrôle</primary></indexterm> (checkpoints) sont des 309 contrôle</primary></indexterm> (appelés 310 <foreignphrase>checkpoints</foreignphrase>) sont des 310 311 points qui garantissent que les fichiers de données ont été mis à 311 312 jour avec toutes les informations enregistrées dans le journal avant le … … 314 315 entrée spéciale, pour le point de contrôle, est écrite dans le 315 316 journal. En cas de défaillance, la procédure de récupération recherche le 316 dernier enregistrement d'un point de vérification dans les traces (connu 317 comme le <quote>redo log</quote>) à partir duquel il devra lancer l'opération 317 dernier enregistrement d'un point de vérification dans les traces 318 (enregistrement connus sous le nom de <quote>redo log</quote>) à partir 319 duquel il devra lancer l'opération 318 320 REDO. Toute modification effectuée sur les fichiers de données avant ce point 319 321 est sûre d'avoir été enregistrée sur disque. Du coup, après qu'un point de 320 vérification soit effectué, tous les segments de trace précédant celui 322 vérification est réalisé, tous les segments représentant des journaux de 323 transaction précédant celui 321 324 contenant le <quote>redo record</quote> ne sont plus nécessaires et peuvent 322 être soit recyclés soit supprimés (quand l'archivage des <acronym>WAL</acronym>323 se fait, les segments de traces doivent être archivés avant d'être recyclés324 ou supprimés).325 </para> 326 327 <para> 328 Le processus d'écriture en tâche de fond lance raautomatiquement un point de329 contrôle de temps en temps . Un point de contrôle est créétous les <xref330 linkend="guc-checkpoint-segments"/> segments de journauxou dès que <xref325 être soit recyclés soit supprimés (quand l'archivage des journaux de 326 transaction est activé, ces derniers doivent être archivés avant d'être 327 recyclés ou supprimés). 328 </para> 329 330 <para> 331 Le processus d'écriture en tâche de fond lance automatiquement un point de 332 contrôle de temps en temps ,: tous les <xref 333 linkend="guc-checkpoint-segments"/> journaux de transaction ou dès que <xref 331 334 linkend="guc-checkpoint-timeout"/> secondes se sont 332 écoulées. Les paramètres par défaut sont respectivement 3 segments333 et 300 secondes. Il est également possible de forcer la création335 écoulées. Les paramètres par défaut sont respectivement de trois journaux 336 et de 300 secondes. Il est également possible de forcer la création 334 337 d'un point de contrôle en utilisant la commande SQL 335 338 <command>CHECKPOINT</command>. … … 340 343 <varname>checkpoint_timeout</varname> implique 341 344 des points de contrôle plus fréquents. Cela permet une récupération 342 plus rapide après défaillance (puisqu'il y a moins de travail à 343 récupérer). Cependant, il faut équilibrer cela avec 344 l'augmentation du coût d'écriture des pages de données non propres. 345 Si <xref linkend="guc-full-page-writes"/> est configuré (comme la valeur par 345 plus rapide après défaillance puisqu'il y a moins d'écritures à 346 synchroniser. Cependant, il faut équilibrer cela avec 347 l'augmentation du coût d'écriture des pages de données modifiées. 348 Si <xref linkend="guc-full-page-writes"/> est configuré (ce qui est la 349 valeur par 346 350 défaut), il reste un autre facteur à considérer. Pour s'assurer de la 347 351 cohérence des pages de données, la première modification d'une page de 348 352 données après chaque point de vérification résulte dans le traçage du contenu 349 353 entier de la page. Dans ce cas, un intervalle de points de vérification 350 plus petit augmentera le volume en sortie des traces WAL, dégradant 351 partiellement le but d'utiliser un intervalle plus petit et impliquant 354 plus petit augmentera le volume en sortie des journaux de transaction, 355 diminuant légèrement l'intérêt d'utiliser un intervalle plus petit et 356 impliquant 352 357 de toute façon plus d'entrées/sorties au niveau disque. 353 358 </para> … … 356 361 Les points de contrôle sont assez coûteux, tout d'abord parce qu'ils 357 362 écrivent tous les tampons utilisés, et ensuite parce que cela suscite un 358 trafic WAL supplémentaire comme indiqué ci-dessus. Du coup, il est conseillé 363 trafic supplémentaire dans les journaux de transaction, comme indiqué 364 ci-dessus. Du coup, il est conseillé 359 365 de configurer les paramètres en relation assez haut pour que ces points de 360 contrôle ne surviennent pas trop fréquemment. En tant que simple vérification 361 de santé de vos paramètres, vous pouvez configurer le paramètre <xref 366 contrôle ne surviennent pas trop fréquemment. Pour une vérification 367 rapide de l'adéquation de vos paramètres, vous pouvez configurer le 368 paramètre <xref 362 369 linkend="guc-checkpoint-warning"/>. Si les points de contrôle arrivent plus 363 rapidement que <varname>checkpoint_warning</varname> secondes, un message sera364 affiché dans les journauxdu serveur recommandant d'accroître370 rapidement que <varname>checkpoint_warning</varname> secondes, un message 371 est affiché dans les journaux applicatifs du serveur recommandant d'accroître 365 372 <varname>checkpoint_segments</varname>. Une apparition occasionnelle d'un 366 373 message ne doit pas vous alarmer mais, s'il apparaît souvent, alors les 367 374 paramètres de contrôle devraient être augmentés. Les opérations en masse, 368 comme les gros transferts via <command>COPY</command>, pourraient être la cause 375 comme les transferts importants de données via <command>COPY</command>, 376 pourraient être la cause 369 377 de l'apparition d'un tel nombre de messages d'avertissements si 370 378 vous n'avez pas configuré <varname>checkpoint_segments</varname> avec une valeur … … 399 407 400 408 <para> 401 Il y aura toujours au moins un fichier segment WALet normalement409 Il y aura toujours au moins un journal de transaction et normalement 402 410 pas plus de (2 + <varname>checkpoint_completion_target</varname>) * 403 <varname>checkpoint_segments</varname> + 1 404 fichiers. Chaque fichier de segmentfait normalement 16 Mo (bien405 que cette taille puisse être modifiée lors de la compilation du serveur). Vous pouvez406 utiliser cela pour estimer l'espace disque407 nécessaire pour <acronym>WAL</acronym>. D'habitude, quand les vieux fichiers408 segment de journauxne sont plus nécessaires, ils sont recyclés411 <varname>checkpoint_segments</varname> + 1 journaux. 412 Chaque journal fait normalement 16 Mo (bien 413 que cette taille puisse être modifiée lors de la compilation du serveur). 414 Vous pouvez utiliser cela pour estimer l'espace disque nécessaire au 415 stockage des journaux de transaction. D'habitude, quand les vieux journaux 416 ne sont plus nécessaires, ils sont recyclés 409 417 (renommés pour devenir les prochains segments dans une séquence 410 418 numérotée). S'il y a plus de 3 * <varname>checkpoint_segments</varname> + 1 411 fichiers segmentsà cause d'un pic temporaire du taux d'écriture des journaux,419 fichiers à cause d'un pic temporaire du taux d'écriture des journaux, 412 420 ceux inutilisés seront effacés au lieu d'être 413 421 recyclés jusqu'à ce que le système soit en-dessous de cette limite. … … 415 423 416 424 <para> 417 Il y adeux fonctions <acronym>WAL</acronym> internes couramment425 Il existe deux fonctions <acronym>WAL</acronym> internes couramment 418 426 utilisées : 419 427 <function>LogInsert</function> et <function>LogFlush</function>. … … 422 430 partagée. S'il n'y a plus 423 431 d'espace pour une nouvelle entrée, <function>LogInsert</function> 424 devra écrire ( bouger dans le cache du noyau) quelques tampons425 <acronym>WAL</acronym> remplis. Ceci n'est pas désirable parce que432 devra écrire (autrement dit, déplacer dans le cache du noyau) quelques 433 tampons <acronym>WAL</acronym> remplis. Ceci n'est pas désirable parce que 426 434 <function>LogInsert</function> est utilisée lors de chaque 427 modification bas niveau de la base (par exemple, insertion d'une435 modification bas niveau de la base (par exemple, lors de l'insertion d'une 428 436 ligne) quand un verrou exclusif est posé sur des pages de données 429 affectées , donc l'opération nécessite d'être aussi rapide que430 possible. Pire encore, écrire des tampons <acronym>WAL</acronym>431 peut aussi forcer la création d'un nouveau segment de journalce qui437 affectées. À cause de ce verrou, l'opération doit être aussi rapide 438 que possible. Pire encore, écrire des tampons <acronym>WAL</acronym> 439 peut forcer la création d'un nouveau journal, ce qui 432 440 peut prendre beaucoup plus de temps. Normalement, les tampons 433 <acronym>WAL</acronym> d evraient être écrits et vidés par une requête441 <acronym>WAL</acronym> doivent être écrits et vidés par une requête 434 442 de <function>LogFlush</function> qui est faite, la plupart du 435 443 temps, au moment de la validation d'une transaction pour assurer … … 438 446 les requêtes de <function>LogFlush</function> peuvent ne pas 439 447 arriver assez souvent pour empêcher <function>LogInsert</function> d'avoir 440 à écrire. Sur de tels systèmes, on devrait augmenter le nombre de tampons 448 à écrire lui-même sur disque. Sur de tels systèmes, on devrait augmenter le 449 nombre de tampons 441 450 <acronym>WAL</acronym> en modifiant le paramètre de configuration <xref 442 451 linkend="guc-wal-buffers"/>. Par défaut, le nombre de tampons est de 8. 443 Augmenter cette valeur augmenteraconsidérablement l'utilisation de la452 Réhausser cette valeur augmente considérablement l'utilisation de la 444 453 mémoire partagée. Quand <xref linkend="guc-full-page-writes"/> est configuré 445 454 et que le système est très occupé, configurer cette variable avec une valeur 446 plus importante aide raà avoir des temps de réponse plus réguliers455 plus importante aide à avoir des temps de réponse plus réguliers 447 456 lors de la période suivant chaque point de vérification. 448 457 </para> 449 458 450 459 <para> 451 Le paramètre <xref linkend="guc-commit-delay"/> définit combien de452 micro-secondes le processus serveur dormira après l'écriture d'une453 entrée de validation dans le journal avec460 Le paramètre <xref linkend="guc-commit-delay"/> définit la durée 461 d'endormissement en micro-secondes du processus serveur après l'écriture 462 d'une entrée de validation dans le journal avec 454 463 <function>LogInsert</function> avant d'exécuter un 455 464 <function>LogFlush</function>. Ce délai permet aux autres 456 465 processus du serveur d'ajouter leurs entrées de validation dans le 457 fichier dejournal afin de tout écrire vers le disque avec une seule466 journal afin de tout écrire vers le disque avec une seule 458 467 synchronisation du journal. Aucune mise en sommeil n'aura lieu si 459 468 <xref linkend="guc-fsync"/> n'est pas disponible ou si moins de … … 462 471 il est improbable qu'une autre session fasse bientôt une 463 472 validation. Notez que dans la plupart des plate-formes, la 464 résolution d'une requête d e sommeilest de 10 millisecondes, donc473 résolution d'une requête d'endormissement est de 10 millisecondes, donc 465 474 un <varname>commit_delay</varname> différent de zéro et configuré 466 entre 1 et 10000 micro-secondes a urale même effet. Les bonnes475 entre 1 et 10000 micro-secondes a le même effet. Les bonnes 467 476 valeurs pour ce paramètre ne sont pas encore claires ; les essais 468 477 sont encouragés. … … 470 479 471 480 <para> 472 Le paramètre <xref linkend="guc-wal-sync-method"/> détermine comment473 <productname>PostgreSQL</productname> demande raau noyau de forcer les mises474 à jour <acronym>WAL</acronym> sur le disque. Toutes les options devraient475 être les mêmesdans la mesure où la fiabilité ne disparaît pas,476 mais c'est avec des options spécifiques à la plate-forme que ça477 sera le plus rapide. Notez que ce paramètre est ignoré si481 Le paramètre <xref linkend="guc-wal-sync-method"/> détermine la façon dont 482 <productname>PostgreSQL</productname> demande au noyau de forcer les mises 483 à jour des journaux de transaction sur le disque. Toutes les options 484 ont un même comportement dans la mesure où la fiabilité ne disparaît pas, 485 mais c'est avec des options spécifiques à la plate-forme que la rapidité 486 la plus importante sera observée. Notez que ce paramètre est ignoré si 478 487 <varname>fsync</varname> a été désactivé. 479 488 </para> 480 489 481 <para>482 Configurer le paramètre <xref linkend="guc-wal-debug"/> avec une483 valeur différente de zéro aura pour résultat d'enregistrer dans les484 journaux du serveur l'appel WAL à chaque <function>LogInsert</function>485 et <function>LogFlush</function>. En ce moment, il n'est fait486 aucune différence entre les valeurs supérieures à zéro. Cette487 option pourra être remplacée par un mécanisme plus général dans le488 futur.489 </para>490 490 <para> 491 491 Activer le paramètre de configuration <xref linkend="guc-wal-debug"/> (à 492 492 supposer que <productname>PostgreSQL</productname> ait été compilé avec le 493 support de ce paramètre) résultera dans l'enregistrement dechaque appel493 support de ce paramètre) permet d'enregistrer chaque appel 494 494 <acronym>WAL</acronym> à <function>LogInsert</function> et 495 <function>LogFlush</function> dans les journaux du serveur. Cette option 495 <function>LogFlush</function> dans les journaux applicatifs du serveur. 496 Cette option 496 497 pourrait être remplacée par un mécanisme plus général dans le futur. 497 498 </para> … … 499 500 500 501 <sect1 id="wal-internals"> 501 <title>Vue interne des WAL</title>502 503 <para> 504 <acronym>WAL</acronym> est automatiquement disponible ; aucune505 a ction n'est requise de la part de l'administrateur excepté506 de s'assurer que l'espace disque requis par les journaux 507 WALsoit présent et que tous les réglages soient faits (regardez502 <title>Vue interne des journaux de transaction</title> 503 504 <para> 505 Le mécanisme <acronym>WAL</acronym> est automatiquement disponible ; 506 aucune action n'est requise de la part de l'administrateur excepté 507 de s'assurer que l'espace disque requis par les journaux de transaction 508 soit présent et que tous les réglages soient faits (regardez 508 509 la <xref linkend="wal-configuration"/>). 509 510 </para> 510 511 511 512 <para> 512 Les journaux <acronym>WAL</acronym>sont stockés dans le répertoire513 Les journaux de transaction sont stockés dans le répertoire 513 514 <filename>pg_xlog</filename> sous le répertoire de données, comme un ensemble 514 de fichiers segments, chacun d'une taille de 16 Mo généralement. Chaque515 segmentest divisé en pages de généralement 8 Ko. Les en-têtes de515 de fichiers, chacun d'une taille de 16 Mo généralement. Chaque 516 fichier est divisé en pages de généralement 8 Ko. Les en-têtes de 516 517 l'entrée du journal sont décrites dans 517 518 <filename>access/xlog.h</filename> ; le contenu de l'entrée dépend 518 du type de l'événement qui est enregistré. Les fichiers segments519 sont nommés avec un chiffre qui est toujours incrémenté et qui519 du type de l'événement qui est enregistré. Les fichiers 520 sont nommés suivant un nombre qui est toujours incrémenté et qui 520 521 commence à <filename>000000010000000000000000</filename>. Les nombres ne 521 522 bouclent pas actuellement, mais cela devrait prendre beaucoup de temps … … 524 525 525 526 <para> 526 Il est avantageux que le journal soit situésur un autre disque que527 Il est avantageux que les journaux soient situés sur un autre disque que 527 528 celui des fichiers principaux de la base de données. Cela peut 528 se réaliseren déplaçant le répertoire529 se faire en déplaçant le répertoire 529 530 <filename>pg_xlog</filename> vers un autre emplacement (alors que 530 le serveur est arrêté , naturellement) et en créant un lien531 le serveur est arrêté) et en créant un lien 531 532 symbolique de l'endroit d'origine dans le répertoire principal de 532 533 données au nouvel emplacement. … … 536 537 Le but de <acronym>WAL</acronym>, s'assurer que le journal est écrit 537 538 avant l'altération des entrées dans la base, peut être mis en échec par 538 les lecteurs desdisques<indexterm><primary>disques durs</primary></indexterm> qui539 faussementrapportent une écriture539 les disques<indexterm><primary>disques durs</primary></indexterm> qui 540 rapportent une écriture 540 541 réussie au noyau quand, en fait, ils ont seulement mis en cache 541 les données et ne les ont pas encore stocké es sur le disque. Une542 les données et ne les ont pas encore stockés sur le disque. Une 542 543 coupure de courant dans ce genre de situation peut toujours mener à 543 lacorruption irrécupérable des données. Les administrateurs544 devraient s'assurer que les disques contenant les journaux 545 <acronym>WAL</acronym>de <productname>PostgreSQL</productname> ne544 une corruption irrécupérable des données. Les administrateurs 545 devraient s'assurer que les disques contenant les journaux de 546 transaction de <productname>PostgreSQL</productname> ne 546 547 produisent pas ce genre de faux rapports. 547 548 </para> … … 551 552 écrit, la position du point de contrôle est sauvegardée dans le 552 553 fichier <filename>pg_control</filename>. Donc, quand la 553 restauration doit être faite, le serveur lit en premier554 restauration doit se faire, le serveur lit en premier 554 555 <filename>pg_control</filename> et ensuite l'entrée du point de 555 556

