PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Taille du tableau avec mise en page

Votre calcul est faussé à plusieurs endroits.

  • Taille de stockage de varchar , text (et character !) est, citant le manuel ):

J'insiste en gras pour répondre à la question dans les commentaires.

  • Le HeapTupleHeader occupe 23 octets . Mais chaque tuple ("élément" - ligne ou entrée d'index) a un identifiant d'élément au début de la page de données, totalisant les 27 octets mentionnés. La distinction est pertinente car les données utilisateur réelles commencent à un multiple de MAXALIGN depuis le début de chaque élément, et l'identifiant de l'élément n'est pas pris en compte dans ce décalage - ainsi que la "taille de tuple" réelle.

  • 1 octet de remplissage dû à l'alignement des données (multiple de 8), qui est utilisé pour le bitmap NULL dans ce cas.

  • Pas de rembourrage pour le type varchar (mais l'octet supplémentaire mentionné ci-dessus)

Ainsi, le calcul réel (avec toutes les colonnes remplies au maximum) est :

    23    -- heaptupleheader
 +   1    -- NULL bitmap (or padding if row has NO null values)
 +   9    -- columns ...
 + 101 
 +   2 
 + 101 
 +   4 
 +  11
-------------
   252 bytes

 +   4    -- item identifier at page start

Connexe :

Vous en trouverez beaucoup plus dans la liste de liens à droite de ces réponses.