PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Tabellengröße mit Seitenlayout

Ihre Berechnung ist an mehreren Stellen falsch.

Fette Hervorhebung von mir, um die Frage im Kommentar anzusprechen.

  • Der HeapTupleHeader belegt 23 Bytes . Aber jedes Tupel ("Element" - Zeile oder Indexeintrag) hat eine Elementkennung am Anfang der Datenseite dazu, in Höhe der genannten 27 Bytes. Die Unterscheidung ist relevant, da tatsächliche Benutzerdaten bei einem Vielfachen von MAXALIGN beginnen vom Anfang jedes Elements, und die Elementkennung zählt nicht zu diesem Offset - ebenso wie die tatsächliche "Tupelgröße".

  • 1 Byte Padding wegen Datenausrichtung (Vielfaches von 8), das in diesem Fall für die NULL-Bitmap verwendet wird.

  • Kein Padding für den Typ varchar (aber das oben erwähnte zusätzliche Byte)

Die eigentliche Berechnung (mit maximal gefüllten Spalten) lautet also:

    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

Verwandte:

Viele weitere finden Sie in der Linkliste rechts neben diesen Antworten.