| 1 |
<?xml version="1.0" encoding="ISO-8859-15"?> |
|---|
| 2 |
<!-- Dernière modification |
|---|
| 3 |
le $Date$ |
|---|
| 4 |
par $Author$ |
|---|
| 5 |
révision $Revision$ --> |
|---|
| 6 |
<!-- SAS : 20060511, PG824 --> |
|---|
| 7 |
|
|---|
| 8 |
<chapter id="diskusage"> |
|---|
| 9 |
<title>Surveiller l'utilisation des disques</title> |
|---|
| 10 |
|
|---|
| 11 |
<para> |
|---|
| 12 |
Ce chapitre explique comment surveiller l'utilisation que fait |
|---|
| 13 |
<productname>PostgreSQL</productname> des disques. |
|---|
| 14 |
|
|---|
| 15 |
</para> |
|---|
| 16 |
|
|---|
| 17 |
<sect1 id="disk-usage"> |
|---|
| 18 |
<title>Déterminer l'utilisation des disques</title> |
|---|
| 19 |
|
|---|
| 20 |
<indexterm zone="disk-usage"> |
|---|
| 21 |
<primary>utilisation des disques</primary> |
|---|
| 22 |
</indexterm> |
|---|
| 23 |
|
|---|
| 24 |
<para> |
|---|
| 25 |
Chaque table possède un fichier principal dans lequel la majorité |
|---|
| 26 |
des données sont stockées. Si la table contient des colonnes pouvant recevoir |
|---|
| 27 |
des valeurs étendues, il existe aussi un fichier <acronym>TOAST</acronym> associé à la |
|---|
| 28 |
table. Ce fichier permet de stocker les valeurs trop larges pour tenir |
|---|
| 29 |
dans la table principale (voir la <xref linkend="storage-toast"/>). |
|---|
| 30 |
Si la table <acronym>TOAST</acronym> existe, un index lui est associé. |
|---|
| 31 |
Des index peuvent également être associés à la table de base. |
|---|
| 32 |
Chaque table ou index est stocké dans un fichier distinct — |
|---|
| 33 |
ou plusieurs si la taille du fichier dépasse 1 Go. |
|---|
| 34 |
Les conventions de nommage de ces fichiers sont décrites dans la |
|---|
| 35 |
<xref linkend="storage-file-layout"/>. |
|---|
| 36 |
</para> |
|---|
| 37 |
|
|---|
| 38 |
<para> |
|---|
| 39 |
L'espace disque peut être surveillé de trois façons différentes : |
|---|
| 40 |
depuis <application>psql</application> en utilisant les informations retournées par |
|---|
| 41 |
<command>VACUUM</command>, depuis <application>psql</application> avec les outils de |
|---|
| 42 |
<filename>contrib/dbsize</filename> et en ligne de commande avec les outils de |
|---|
| 43 |
<filename>contrib/oid2name</filename>. |
|---|
| 44 |
</para> |
|---|
| 45 |
<para> |
|---|
| 46 |
Les fonctions SQL sont les plus faciles à utiliser. Elles rapportent des |
|---|
| 47 |
informations concernant les tables, les tables avec index et stockage de |
|---|
| 48 |
valeurs étendues (TOAST), les bases de données et les |
|---|
| 49 |
<foreignphrase>tablespaces</foreignphrase>. |
|---|
| 50 |
</para> |
|---|
| 51 |
|
|---|
| 52 |
<para> |
|---|
| 53 |
L'utilisation de <application>psql</application> sur une base de données |
|---|
| 54 |
récemment « nettoyée » (<command>VACUUM</command>) ou |
|---|
| 55 |
« analysée » (<command>ANALYZE</command>) permet de lancer des |
|---|
| 56 |
requêtes pour connaître l'occupation disque d'une table : |
|---|
| 57 |
<programlisting>SELECT relfilenode, relpages FROM pg_class WHERE relname = 'customer'; |
|---|
| 58 |
|
|---|
| 59 |
relfilenode | relpages |
|---|
| 60 |
-------------+---------- |
|---|
| 61 |
16806 | 60 |
|---|
| 62 |
(1 ligne)</programlisting> |
|---|
| 63 |
Chaque page utilise typiquement 8 Ko d'espace disque. |
|---|
| 64 |
</para> |
|---|
| 65 |
|
|---|
| 66 |
<para> |
|---|
| 67 |
<structfield>relpages</structfield> n'est mis à jour que par |
|---|
| 68 |
les commandes <command>VACUUM</command>, <command>ANALYZE</command> et |
|---|
| 69 |
par quelques commandes de définition de données (DDL, Data Definition |
|---|
| 70 |
Language), telles que <command>CREATE INDEX</command>. La valeur de |
|---|
| 71 |
<structfield>relfilenode</structfield> est intéressante pour l'examen direct du fichier |
|---|
| 72 |
de table. |
|---|
| 73 |
</para> |
|---|
| 74 |
|
|---|
| 75 |
<para> |
|---|
| 76 |
Pour connaître l'espace disque utilisé par les tables |
|---|
| 77 |
<acronym>TOAST</acronym>, on utilise une requête similaire à la suivante : |
|---|
| 78 |
<programlisting>SELECT relname, relpages |
|---|
| 79 |
FROM pg_class, |
|---|
| 80 |
(SELECT reltoastrelid FROM pg_class |
|---|
| 81 |
WHERE relname = 'customer') ss |
|---|
| 82 |
WHERE oid = ss.reltoastrelid |
|---|
| 83 |
OR oid = (SELECT reltoastidxid FROM pg_class |
|---|
| 84 |
WHERE oid = ss.reltoastrelid) |
|---|
| 85 |
ORDER BY relname; |
|---|
| 86 |
|
|---|
| 87 |
relname | relpages |
|---|
| 88 |
----------------------+---------- |
|---|
| 89 |
pg_toast_16806 | 0 |
|---|
| 90 |
pg_toast_16806_index | 1</programlisting> |
|---|
| 91 |
</para> |
|---|
| 92 |
|
|---|
| 93 |
<para> |
|---|
| 94 |
On peut aussi facilement afficher la taille des index : |
|---|
| 95 |
<programlisting>SELECT c2.relname, c2.relpages |
|---|
| 96 |
FROM pg_class c, pg_class c2, pg_index i |
|---|
| 97 |
WHERE c.relname = 'customer' |
|---|
| 98 |
AND c.oid = i.indrelid |
|---|
| 99 |
AND c2.oid = i.indexrelid |
|---|
| 100 |
ORDER BY c2.relname; |
|---|
| 101 |
|
|---|
| 102 |
relname | relpages |
|---|
| 103 |
----------------------+---------- |
|---|
| 104 |
customer_id_indexdex | 26</programlisting> |
|---|
| 105 |
</para> |
|---|
| 106 |
|
|---|
| 107 |
<para> |
|---|
| 108 |
Les tables et les index les plus volumineux sont repérés à l'aide de la requête |
|---|
| 109 |
suivante : |
|---|
| 110 |
<programlisting>SELECT relname, relpages FROM pg_class ORDER BY relpages DESC; |
|---|
| 111 |
|
|---|
| 112 |
relname | relpages |
|---|
| 113 |
----------------------+---------- |
|---|
| 114 |
bigtable | 3290 |
|---|
| 115 |
customer | 3144</programlisting> |
|---|
| 116 |
</para> |
|---|
| 117 |
|
|---|
| 118 |
<para> |
|---|
| 119 |
L'utilitaire <filename>contrib/oid2name</filename> permet également de connaître |
|---|
| 120 |
l'utilisation de l'espace disque. Des exemples d'utilisation sont repris dans |
|---|
| 121 |
le fichier <filename>README.oid2name</filename> situé dans le répertoire |
|---|
| 122 |
de l'utilitaire. On y trouve notamment un script permettant de connaître l'utilisation |
|---|
| 123 |
de l'espace disque par base de données. |
|---|
| 124 |
</para> |
|---|
| 125 |
</sect1> |
|---|
| 126 |
|
|---|
| 127 |
<sect1 id="disk-full"> |
|---|
| 128 |
<title>Panne pour disque saturé</title> |
|---|
| 129 |
|
|---|
| 130 |
<para> |
|---|
| 131 |
La tâche la plus importante d'un administrateur de base de données, |
|---|
| 132 |
en ce qui concerne la surveillance des disques, est de s'assurer que les |
|---|
| 133 |
disques n'arrivent pas à saturation. Un disque de données plein ne corrompt pas |
|---|
| 134 |
les données mais peut empêcher toute activité. S'il s'agit |
|---|
| 135 |
du disque contenant les fichier WAL, une alerte |
|---|
| 136 |
PANIC et un arrêt du serveur peuvent survenir. |
|---|
| 137 |
</para> |
|---|
| 138 |
|
|---|
| 139 |
<para> |
|---|
| 140 |
S'il n'est pas possible de libérer de la place sur le disque, il faut |
|---|
| 141 |
envisager le déplacement de quelques fichiers vers d'autres systèmes de |
|---|
| 142 |
fichiers à l'aide des <foreignphrase>tablespaces</foreignphrase>. Voir la |
|---|
| 143 |
<xref linkend="manage-ag-tablespaces"/> pour plus d'informations. |
|---|
| 144 |
</para> |
|---|
| 145 |
|
|---|
| 146 |
<tip> |
|---|
| 147 |
<para> |
|---|
| 148 |
Certains systèmes de fichiers réagissent mal à proximité des limites de remplissage. |
|---|
| 149 |
Il est donc préférable de ne pas attendre ce moment pour réagir. |
|---|
| 150 |
</para> |
|---|
| 151 |
</tip> |
|---|
| 152 |
|
|---|
| 153 |
<para> |
|---|
| 154 |
Si le système supporte les quotas disque par utilisateur, la |
|---|
| 155 |
base de données est alors soumise au quota de |
|---|
| 156 |
l'utilisateur qui exécute le serveur de base de données. Dépasser ce |
|---|
| 157 |
quota a les mêmes conséquences néfastes qu'un disque plein. |
|---|
| 158 |
</para> |
|---|
| 159 |
</sect1> |
|---|
| 160 |
</chapter> |
|---|