Changeset 713
- Timestamp:
- 09/21/07 11:46:58 (1 year ago)
- Files:
-
- traduc/trunk/manuel/ref/cluster.xml (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
traduc/trunk/manuel/ref/cluster.xml
r708 r713 4 4 PostgreSQL documentation 5 5 --> 6 <!-- SAS 200 60616-->6 <!-- SAS 20070921, PG825 --> 7 7 8 8 <refentry id="sql-cluster"> … … 31 31 32 32 <para> 33 <command>CLUSTER</command> réorganise ( regroupe) la table33 <command>CLUSTER</command> réorganise (groupe) la table 34 34 <replaceable class="parameter">nomtable</replaceable> 35 35 en fonction de l'index <replaceable class="parameter">nomindex</replaceable>. L'index doit avoir été … … 38 38 39 39 <para> 40 Une table regroupée est physiquement réordonnée en fonction des informations de l'index. 41 Ce regroupement est une opération unique : 42 les modifications issues de mises à jour postérieures au groupage ne 43 sont pas réorganisées. C'est-à-dire qu'aucune tentative n'est 44 réalisée pour stocker les données nouvelles ou mises à jour 40 Une table reorganisée est physiquement réordonnée en fonction des informations de l'index. 41 Ce regroupement est une opération ponctuelle : 42 les actualisations ultérieures ne sont pas réorganisées. C'est-à-dire 43 qu'aucune tentative n'est réalisée pour stocker les lignes nouvelles ou actualisées 45 44 d'après l'ordre de l'index. Une réorganisation périodique peut être 46 45 obtenue en relançant la commande aussi souvent que souhaité. … … 48 47 49 48 <para> 50 Quand une table est groupée, <productname>PostgreSQL</productname>51 enregistre l'index qui a servi à la réorganisation. La forme49 Quand une table est réorganisée, <productname>PostgreSQL</productname> 50 enregistre l'index utilisé à cet effet. La forme 52 51 <command>CLUSTER <replaceable class="parameter">nomtable</replaceable></command> 53 r egroupe la table suivant ce même index.54 </para> 55 56 <para> 57 <command>CLUSTER</command>, sans paramètre, groupe toutes les52 réorganise la table d'après l'index précédemment utilisé. 53 </para> 54 55 <para> 56 <command>CLUSTER</command>, sans paramètre, réorganise toutes les 58 57 tables de la base de données courante dont l'utilisateur est 59 58 propriétaire, ou toutes les tables s'il s'agit d'un superutilisateur. (Les 60 tables qui n'ont jamais été groupées sont ignorées.) Cette forme de59 tables qui n'ont jamais été réorganisées sont ignorées.) Cette forme de 61 60 <command>CLUSTER</command> ne peut pas être exécutée à l'intérieur d'une 62 61 transaction. … … 64 63 65 64 <para> 66 Quand une table est en cours de r egroupement, un verrou65 Quand une table est en cours de réorganisation, un verrou 67 66 <literal>ACCESS EXCLUSIVE</literal> est acquis. Cela empêche toute opération 68 67 sur la table (à la fois en lecture et en écriture) pendant l'exécution de … … 99 98 100 99 <para> 101 <command>CLUSTER</command> perd toute visibilité des lignes, ce qui fait 102 que la table semble vide à toute image de la base prise avant la fin de 103 la commande <command>CLUSTER</command>. Les applications ayant des 104 transactions accèdant à une table en cours de clusterisation peuvent donc 105 difficilement utiliser la commande <command>CLUSTER</command>. L'impact est 106 encore plus important avec les transactions sérialisables car elles prennent 107 seulement une image de la base, au début de la transaction. Cela étant dit, 100 <command>CLUSTER</command> supprime toute information de visibilité des 101 lignes, ce qui donne l'impression, à tout instantané 102 de la base pris avant la fin de la commande <command>CLUSTER</command>, que 103 la table est vide. 104 <command>CLUSTER</command> est de ce fait incompatible avec les 105 applications dont certaines transactions accèdent concurrentiellement à la table 106 en cours de réorganisation (clusterisation). L'impact est 107 encore plus important avec les transactions sérialisables car elles ne prennent 108 un instantané de la base qu'au début de la transaction. Cela dit, 108 109 les transactions « read-committed » sont aussi affectées. 109 110 </para> … … 113 114 l'ordre réel des données dans la table n'a que peu d'importance. 114 115 Toutefois, si certaines données sont plus accédées que d'autres, et qu'un 115 index les groupe, l'utilisation de <command>CLUSTER</command> peut s'avérer116 index les regroupe, l'utilisation de <command>CLUSTER</command> peut s'avérer 116 117 bénéfique. Si une requête porte sur un ensemble de valeurs indexées ou sur 117 118 une seule valeur pour laquelle plusieurs lignes de la table correspondent, 118 <command>CLUSTER</command> se montreutile. En effet, lorsque l'index119 <command>CLUSTER</command> est utile. En effet, lorsque l'index 119 120 identifie la page de la table pour la première ligne correspondante, toutes 120 121 les autres lignes correspondantes sont déjà probablement sur la même page … … 126 127 est créée qui contient les données de la table dans l'ordre de l'index. Des 127 128 copies temporaires de chaque index de la table sont également créées. De ce fait, 128 un espace libre sur le disque au moins égal à la somme de la taille de la table129 et celles des index est nécessaire.129 il est nécessaire de disposer d'un espace libre sur le disque au moins égal 130 à la somme de la taille de la table et celles des index. 130 131 </para> 131 132 … … 133 134 Puisque <command>CLUSTER</command> enregistre les informations de 134 135 réorganisation, il est possible de réorganiser manuellement les tables souhaitées 135 la première fois et de planifier une réorganisation, à la façon d'un <command>VACUUM</command>. 136 Les tables sont ainsi régulièrement regroupées. 137 </para> 138 139 <para> 140 Comme le planificateur enregistre les statistiques d'ordonnancement 136 la première fois et de planifier une réorganisation, à la 137 manière de <command>VACUUM</command>, pour que les tables soient 138 régulièrement réorganisées. 139 </para> 140 141 <para> 142 Puisque le planificateur enregistre les statistiques d'ordonnancement 141 143 des tables, il est conseillé de lancer 142 <xref linkend="sql-analyze" endterm="sql-analyze-title"/> sur la table réorganisée. 143 Dans le cas contraire, les plans de requêtes peuvent être mal choisis par le planificateur. 144 </para> 145 146 <para> 147 Il existe une autre façon de grouper les données. En effet, la commande 144 <xref linkend="sql-analyze" endterm="sql-analyze-title"/> sur la table 145 nouvellement réorganisée. Dans le cas contraire, les plans de requêtes 146 peuvent être mal choisis par le planificateur. 147 </para> 148 149 <para> 150 Il existe une autre façon de réorganiser les données. La commande 148 151 <command>CLUSTER</command> réorganise la table originale en la parcourant 149 en suivant l'ordre de l'index indiqué ;.cela peut devenir lent sur les150 grandes tables parce que les lignes sont parcourues au niveaude la table152 en fonction de l'ordre de l'index indiqué ; cela peut être lent pour les 153 tables volumineuses parce que les lignes sont extraites de la table 151 154 dans l'ordre de l'index et, si la table n'est pas ordonnée, les entrées sont 152 disséminées 153 dans des pages aléatoires. Une page disque est alors lue pour chaque 155 disséminées sur des pages aléatoires. Une page disque est alors lue pour chaque 154 156 ligne déplacée. (<productname>PostgreSQL</productname> dispose d'un cache mais une 155 157 grande table n'y tient généralement pas dans sa totalité.) L'autre moyen de … … 161 163 162 164 qui utilise le code de tri de <productname>PostgreSQL</productname> pour 163 créerl'ordre désiré ; pour des données non triées, cela est164 généralement bien plus rapide qu'un parcours d'index sur des données165 non ordonnées.166 L'ancienne table peut alors être supprimée. <command>ALTER TABLE ... RENAME</command>167 est utilisé pour renommer <replaceable class="parameter">nouvelletable</replaceable>168 en <replaceable class="parameter">table</replaceable>. Il ne reste plus169 qu'à recréer les index de la table.Le gros inconvénient de cette approche165 aboutir à l'ordre désiré ; pour des données non triées, cela est 166 généralement bien plus rapide qu'un parcours d'index. 167 L'ancienne table peut alors être supprimée et <replaceable 168 class="parameter">nouvelletable</replaceable> renommée en <replaceable 169 class="parameter">table</replaceable> à l'aide de <command>ALTER TABLE ... 170 RENAME</command>. Il ne reste plus qu'à recréer les index de la table. 171 Le gros inconvénient de cette approche 170 172 est qu'elle ne préserve pas les OID, les contraintes, les relations de clés 171 173 étrangères, les droits et autres propriétés de la table — tous ces 172 éléments doivent être recréés manuellement. Un autre inconvénient est que173 cette façon nécessireun fichier temporaire de tri de la même taille que174 la table elle-même , donc l'utilisation limite du disque estd'environ175 trois la taille de la table au lieu de deux fois.174 éléments doivent être recréés manuellement. Un autre inconvénient est la 175 nécessité d'un fichier temporaire de tri de la même taille que 176 la table elle-même. Le pic d'utilisation du disque est alors d'environ 177 trois fois la taille de la table au lieu de deux fois. 176 178 </para> 177 179 </refsect1> … … 181 183 182 184 <para> 183 Grouper la table <literal>employes</literal> sur la base de son index185 Réorganiser la table <literal>employes</literal> sur la base de son index 184 186 <literal>emp_ind</literal> : 185 187 <programlisting>CLUSTER emp_ind ON employes; … … 188 190 189 191 <para> 190 Grouper la relation <literal>employes</literal> en utilisant le même index192 Réorganiser la relation <literal>employes</literal> en utilisant le même index 191 193 que précédemment : 192 194 <programlisting>CLUSTER employes; … … 195 197 196 198 <para> 197 Grouper toutes les tables de la base de donnéespréalablement198 groupées :199 Réorganiser toutes les tables de la base de données qui ont déjà été préalablement 200 réorganisées : 199 201 <programlisting>CLUSTER; 200 202 </programlisting>

