Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

Aller au contenu | Aller au menu | Aller à la recherche


< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 >

vendredi 9 mai 2008

Combien coûte un tuple avec PostgreSQL?

Question au combien intéressante!

Soit la table test qui contient deux champs:

  • id: de type entier sur 4 octets;
  • data: varchar de longueur 20.
Pour créer la table, on invoquera la requête suivante
 CREATE TABLE test(id int4,data varchar(20));
Au mieux, on dirait qu'un tuple coûtera 24 octets et en fait non! Faisant une simple insertion
INSERT INTO test VALUES (1,'Beautiful Ewa Sonnet');
Examinons les champs:
  • un entier occupe 4 octect dont pour le moment taille >=4
  • le champs data est de type varchar(20). Il faut compter 20 octets pour stocker le texte et 4 octets pour stocker la taille (sizeof(int4)) (cf. type valerna de PostgreSQL) soit 24 octet à prendre en compte pour ce champs.
La fonctionnalité pg_column_size() vient confirmer nos dires
SELECT pg_column_size(id),pg_column_size(data) from test;
 pg_column_size | pg_column_size
----------------+----------------
              4 |             24
(1 row)
Donc pour le moment taille est supérieur à 28=4+24 octets Or d'après [1] et [2), il faut aussi prendre en compte la taille prise par les champs des colonnes systèmes (sans les oids car je n'ai pas créé ma table en les invoquant)
 SELECT tableoid,xmin,xmax,cmin,cmax,ctid from test;
 tableoid | xmin  | xmax | cmin | cmax | ctid
----------+-------+------+------+------+-------
   205658 | 62456 |    0 |    0 |    0 | (0,1)
(1 row)

SOURCES

jeudi 8 mai 2008

(Petit )week-end de 5 jours de jeudi 8 mai à lundi 12 mai (1/2)

Ce petit week-end a bien commencé!

Mercredi soir

Rien de spécial, comme à l'accoutumée, une petite virée sur les bars de Juan Les Pins!...Je suis rentré à la villa sur les coups de 3h00 du mat', fatigué mais content de ma soirée

Jeudi

J'avais rendez-vous avec une amie pour aller faire bronzette sur la plage de la Gallice. Je l'ai rejoint sur les coups de 13h45. Elle était en compagnie d'un couple d'amis et de leur gosse. Un ami à nous nous a rejoint par la suite, le temps de trouver la place pour garer la voiture....J'en ai profité pour piquer une ou deux têtes, faire plus ample connaissance avec le couple...Il y avait du monde (et du beau monde!)...Ca va j'aurais pris des couleurs. Sur les coups de 17h00, je suis rentré à la villa.

Ca fait du bien ces petites vacances ces temps-ci suite notamment au week-end de la semaine dernrnière. Ca fait une coupure par rapport au taf! Le soir de 23h00-3h00, je suis resté au Ché à discuter avec un pote de tout et de rien...Très très bonne soirée!

Vendredi

Sur les coups de 14h00, je me suis décidé à prendre la voiture pour rentrer. Il y avait du vent sur la route et faisait chaud. Du coup j'ai du m'arrêté pas mal de fois (3 ou 4 fois). Je suis arrivé sur Montpellier sur les coups de 17h30-18h00. Un petit whisky coca au bar de la place et zou direction l'appart. J'ai dormi de suite :)

Samedi

Petit café et là je rédige un billet sur PostgreSQL ....Les papiers administratifs à faire et cet aprem' ce sera coiffue et cinéma pour aller voir iron man.

Lundi soir: anniversaire d'une amie au Ché de Juan-Les-Pins

Lundi j'ai attendu avec hâte de partir du travail pour aller rejoindre deux amies au Crystal. On a bu quelques vers. Plus tard dans la soirée, on est allé au Tché pour attendre une amie qui fêtait son anniversaire.

Elle a eu de beaux cadeaux de la part de tout le monde . Moi je me suis contenté de lui offrir une rose, le samedi précédent. J'en ai profité pour remercier son ami de l'accueil qu'il m'avait fait quand je susi arrivé il y a quelques mois à Juan-Les-Pins. Une petite larme a coulé pour le remercier d'un simple geste de bienvenue qu'il m'a offert pour me souhaiter la bienvenue.....c'était trop sympatithou de sa part

J'ai passé un agréable soirée mais j'ai du partir assez tôt car je devais retravailler le lendemain...

mardi 6 mai 2008

Obtenir le liste détaillée de l'occupation disque pour chaque table (avec index et toast)

Pas de race, on fait tout simplement

SELECT  stat.relname AS "Table",pg_size_pretty(pg_total_relation_size(stat.relid)) AS "Occupation totale",
pg_size_pretty(pg_relation_size(stat.relid)) AS "Taille de la table", 
CASE WHEN cl.reltoastrelid = 0 THEN 'aucun' ELSE 
pg_size_pretty(pg_relation_size(cl.reltoastrelid)+ 
COALESCE((SELECT SUM(pg_relation_size(indexrelid)) FROM pg_index WHERE indrelid=cl.reltoastrelid)::int8, 0)) END AS "Taille de la table TOAST",
 pg_size_pretty(COALESCE((SELECT SUM(pg_relation_size(indexrelid)) FROM pg_index WHERE indrelid=stat.relid)::int8, 0)) AS "Taille des index"
 FROM pg_stat_all_tables stat JOIN pg_statio_all_tables statio ON stat.relid = statio.relid JOIN
 pg_class cl ON cl.oid=stat.relid AND stat.schemaname='public' order by stat.relname;

Ce qui donnera par exemple

        Table         | Occupation totale | Taille de la table | Taille de la table TOAST | Taille des index 
----------------------+-------------------+--------------------+--------------------------+------------------
 table                | 72 kB             | 40 kB              | 8192 bytes               | 24 kB
 terrain_golf         | 152 kB            | 104 kB             | 8192 bytes               | 40 kB
 theatre              | 272 kB            | 168 kB             | 8192 bytes               | 96 kB
 ua_arrondissement    | 152 kB            | 48 kB              | 80 kB                    | 24 kB
 ua_chef-lieu_departe | 40 kB             | 8192 bytes         | 8192 bytes               | 24 kB
 ua_chef-lieu_region  | 40 kB             | 8192 bytes         | 8192 bytes               | 24 kB
 ua_commune           | 74 MB             | 43 MB              | 28 MB                    | 2320 kB
 ua_departement       | 4608 kB           | 16 kB              | 4568 kB                  | 24 kB
Petit rappel: (surtout pour moi ) Vu que j'ai compilé PostgreSQL sans modifier les source donc une page a une taille de BLCKSZ soit
psql -At -U postgres -d postgres -c "show block_size" --> 8192
, les 8192 bytes correspondent à une page de 8Ko.