Heim > Datenbank > MySQL-Tutorial > Wie viel Speicherplatz verbrauchen NULL-Werte in PostgreSQL wirklich?

Wie viel Speicherplatz verbrauchen NULL-Werte in PostgreSQL wirklich?

Susan Sarandon
Freigeben: 2024-12-26 03:26:10
Original
812 Leute haben es durchsucht

How Much Disk Space Do NULL Values in PostgreSQL Really Consume?

Auswirkungen von NULL-Werten auf den Speicherplatzverbrauch von PostgreSQL

In PostgreSQL unterscheiden sich die Speicheranforderungen für Spalten, die NULL-Werte zulassen, von denen, die Werte erzwingen. Betrachten Sie die folgende Tabellenspaltendefinition:

"MyColumn" smallint NULL
Nach dem Login kopieren

Das Speichern von Ganzzahlen wie 0, 1 oder einem anderen Wert erfordert 2 Bytes. Es stellt sich jedoch die Frage: Wie viel Speicherplatz wird verbraucht, wenn „MyColumn“ auf NULL gesetzt ist? Belegt es 0 Bytes?

Bitmap vs. NULL-Speicher

Entgegen der anfänglichen Annahme eines 0-Byte-Verbrauchs belegen NULL-Werte keinen Platz. Stattdessen verwendet PostgreSQL eine Bitmap, um den NULL-Status für jede Spalte in einer Tabelle zu verfolgen. Jedes Bit in der Bitmap stellt den NULL/NOT NULL-Status für eine bestimmte Zeile dar.

Die Bitmap wird jedoch nicht jeder Zeile zugewiesen. Stattdessen ist die Datenausrichtung ein zu berücksichtigender Faktor. Der HeapTupleHeader, der Informationen zu jeder Zeile enthält, belegt 23 Bytes. Die Daten werden so ausgerichtet, dass sie bei Vielfachen von MAXALIGN beginnen (normalerweise 8 Bytes), wobei ein Byte Auffüllung für die Null-Bitmap verbleibt.

Anforderungen an den Festplattenspeicher

Als Ergebnis von Aufgrund dieser Faktoren ist Nullspeicher für Tabellen mit bis zu 8 Spalten praktisch kostenlos. Für Tabellen mit mehr Spalten ist jedoch zusätzlicher Speicherplatz wie folgt erforderlich:

  • Zusätzliche MAXALIGN-Bytes (normalerweise 8) werden für die nächste Gruppe von 64 Spalten zugewiesen.
  • Speicherplatz ist Wird nur zugewiesen, wenn mindestens ein tatsächlicher NULL-Wert in der Zeile vorhanden ist.
  • Entfernte Spalten, die im Systemkatalog als solche markiert sind, belegen immer noch ein Bit im Nullwert Bitmap.

Realwelttests

Umfangreiche Tests haben diese Beobachtungen bestätigt. Weitere Einzelheiten finden Sie in der Diskussion unter:

  • https://dba.stackexchange.com/questions/4452/does-not-using-null-in-postgresql-still-use-a -null-bitmap-in-the-header

Das obige ist der detaillierte Inhalt vonWie viel Speicherplatz verbrauchen NULL-Werte in PostgreSQL wirklich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage