Considérez le tableau suivant à Postgres 9.4:
CREATE TABLE t
(
a1 bigserial,
a2 bigint NOT NULL,
a3 bigint NOT NULL,
a4 integer,
a5 timestamp with time zone NOT NULL,
a6 timestamp with time zone NOT NULL DEFAULT now(),
a7 bigint NOT NULL,
a8 bigint NOT NULL,
a9 real,
a10 integer,
CONSTRAINT kkkey PRIMARY KEY (a1)
)
Quels sont les coûts estimés pour sauver cette table?
Un enregistrement coûts:
size(bigserial)
+ size(bigint)
+ size(bigint)
+ size(integer)
+ size(timestamp)
+ size(timestamp)
+ size(bigint)
+ size(bigint)
+ size(real)
+ size(integer)
= 8 + 8 + 8 + 4 + 8 + 8 + 8 + 8 + 4 + 4 = 68 bytes
mise en page de la page de base de données de Postgres fournit des informations assez détaillées comment les enregistrements atterrissent sur le stockage secondaire, mais je ne sais pas comment obtenir tous les numéros ensemble.
Les rapports Linux
blockdev --getbsz /dev/sda1
1024
Questions:
(1) Y a-t-il des fonctions d'assistance pour évaluer les coûts de stockage par ligne (il n'est donc pas nécessaire de ne pas avoir besoin de ces calculs compliqués à la main)
(2) Comment mettre les chiffres ensemble, c'est-à-dire d'estimer les frais généraux de chaque ligne?
(3) Comment estimer les coûts de l'indice principal principal?
Les fonctions qui donnent la taille des colonnes, des tableaux et des index sont documentées dans le manuel: http://www.postgresql.org/docs/9.4/static/fonctions-admin.html
Il n'y a pas de fonction pour calculer la taille d'un enregistrement entier (alors qu'il existe une fonction de connaître le coût de stockage d'une valeur de données individuelle (pg_column_size
)), puisque les enregistrements sont en général de la longueur variable (parfois ils sont compressés), je pense donc que vous avez deux possibilités, effectuez une requête de catalogue pour résumer toutes les tailles des colonnes d'une table, ou simplement obtenir le taille d'une table peuplée et divisez par le nombre d'enregistrements, afin d'avoir une taille moyenne pour enregistrer.