Skip to content

Commit

Permalink
Mise à jour en version 15 beta 3
Browse files Browse the repository at this point in the history
  • Loading branch information
gleu committed Aug 22, 2022
1 parent dc2b672 commit bede065
Show file tree
Hide file tree
Showing 33 changed files with 5,105 additions and 4,888 deletions.
86 changes: 59 additions & 27 deletions postgresql/brin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,14 @@
<acronym>BRIN</acronym> signifie Block Range Index, soit index par
intervalles de bloc. <acronym>BRIN</acronym> est conçu pour gérer de grosses
tables dont certaines ont des colonnes ayant une corrélation naturelle avec
leur stockage physique. Un <firstterm>intervalle de bloc</firstterm> est un
groupe de pages physiquement adjacentes dans la table&nbsp;; Pour chaque
leur stockage physique.
</para>

<para>
<acronym>BRIN</acronym> fonctionne en terme d'<firstterm>intervalle de blocs</firstterm>
(ou <quote>intervalle de pages</quote>).
Un <firstterm>intervalle de bloc</firstterm> est un
groupe de blocs physiquement adjacents dans la table&nbsp;; Pour chaque
gamme de bloc, un résumé des informations est stocké par l'index. Un exemple
courant est une table avec une colonne date, contenant les références des
ventes d'un magasin. Chaque commande y serait enregistrée chronologiquement.
Expand Down Expand Up @@ -70,37 +76,63 @@
intervalle, incluant certainement aussi un intervalle incomplet à la fin.
Lors de l'ajout de nouvelles données dans des pages déja incluses dans des
résumés, cela va entrainer la mise à jour du résumé, avec les informations
sur les nouvelles lignes insérées. Lorsqu'une nouvelle page est créée et
qu'elle ne correspond à aucun des derniers intervalles résumés,
l'intervalle ne crée pas automatiquement un résumé. Ces lignes restent non
catégorisées jusqu'à ce qu'un processus soit lancé pour le faire, créant
alors les résumés initiaux. Ce processus peut être appelé manuellement en
exécutant la fonction <function>brin_summarize_range(regclass,
bigint)</function> ou la fonction
<function>brin_summarize_new_values(regclass)</function>&nbsp;;
automatiquement lorsque <command>VACUUM</command> va inspecter la
table&nbsp;; ou par un résumé automatique effectué par autovacuum, au fur
et à mesure que des insertions sont effectuées. (Ce dernier déclencheur
est désactivé par défaut, et peut être activé avec le paramètre
<literal>autosummarize</literal>.) Inversement, le résumé d'un intervalle
peut être supprimé en utilisant la fonction
<function>brin_desummarize_range(regclass, bigint)</function>, ce qui peut
être utile quand la ligne de l'index n'est plue une bonne représentation du
fait des changements des valeurs existantes.
sur les nouvelles lignes insérées.
Lorsqu'une nouvelle page est créée et qu'elle ne correspond à aucun des
derniers intervalles résumés, l'intervalle auquel appartient la nouvelle
page n'acquiert pas automatiquement un résumé&nbsp;; ces lignes restent sans
résumé jusqu'à ce qu'une exécution de résumé soit demandée plus tard, créant
ainsi le résumé initial pour cet intervalle.
</para>

<para>
Il existe plusieurs façons de déclencher le résumé initial d'un intervalle
de blocs. Si la table est traitée par VACUUM, soit manuellement soit par
l'<link linkend="autovacuum">autovacuum</link>, tous les intervalles de
blocs existants non résumés sont résumés. De plus, si le paramètre <xref
linkend="index-reloption-autosummarize"/> de l'index est activé, ce qui
n'est pas le cas par défaut, à chaque fois que l'autovacuum est exécuté dans
cette base, le résumé surviendra pour tous les intervalles de blocs non
résumés qui ont été remplis, que la table elle-même soit traitée par
l'autovacuum ou pas&nbsp;; voir ci-dessous.
</para>

<para>
Quand le résumé automatique est activé, chaque fois qu'un intervalle de
page est rempli, une requête est envoyée à autovacuum pour qu'il exécute un
résumé ciblé pour cet intervalle, opération à exécuter à la fin du travail
du prochain worker sur la même base de données. Si la queue des demandes
est remplie, la demande n'est pas enregistré et un message est enregistré
dans les traces du serveur&nbsp;:
Dernièrement, les fonctions suivantes peuvent être utilisées&nbsp;:
<simplelist>
<member>
<function>brin_summarize_new_values(regclass)</function>
qui résume tous les blocs sans résumé&nbsp;;
</member>
<member>
<function>brin_summarize_range(regclass, bigint)</function>
qui résume seulement l'intervalle contenant le bloc donné
s'il n'est pas résumé.
</member>
</simplelist>
</para>

<para>
Quand le résumé automatique est activé, une requête est envoyée à
l'<literal>autovacuum</literal> pour exécuter un résumé cible pour un
intervalle de bloc quand une insertion est détecté pour le premier élément
du premier bloc du prochain intervalle de bloc, opération à réaliser la
prochaine fois qu'un autovacuum worker finit son exécution dans la même
base. Si la queue des demandes est remplie, la demande n'est pas
enregistrée et un message est enregistré dans les traces du serveur&nbsp;:
<screen>
LOG: request for BRIN range summarization for index "brin_wi_idx" page 128 was not recorded
</screen>
Quand cela arrive, l'intervalle sera résumé avec la méthode habituelle lors
du prochain VACUUM standard de la table.
Quand cela arrive, l'intervalle restera non résumé jusqu'à la prochaine
exécution d'un vacuum standard sur la table ou jusqu'à ce qu'une des
fonctions mentionnées ci-dessus soit appelée.
</para>

<para>
Inversement, un intervalle peut se voir supprimer son résumé avec la
fonction <function>brin_desummarize_range(regclass, bigint)</function>, qui
est utile quand l'enregistrement de l'index n'est plus une très bonne
représentation car les valeurs existantes ont changées. Voir <xref
linkend="functions-admin-index"/> pour les détails.
</para>
</sect2>
</sect1>
Expand Down

0 comments on commit bede065

Please sign in to comment.