Warum verbraucht eine Tabelle in einem Amazon Redshift-Cluster mehr oder weniger Festplattenspeicher als erwartet?
Eine Tabelle belegt mehr Speicherplatz als erwartet oder ein Prozentsatz des freien Festplattenspeichers hat sich nach meiner klassischen Größenänderung nicht erhöht. Ich möchte wissen, wie Amazon Redshift den Festplattenspeicher und die Tabellengröße berechnet.
Lösung
Überprüfen Sie die Mindestgröße der Tabelle
Die minimale Tabellengröße ist der kleinste Platzbedarf, den eine Tabelle in einem Amazon Redshift-Cluster hat. Sie können die minimale Tabellengröße überprüfen, wenn Sie die Cluster-Speichernutzung analysieren oder die Größe eines Amazon Redshift-Clusters ändern.
Verwenden Sie für Tabellen, die mit dem Verteilungsstil KEY, EVEN oder Auto (EVEN) erstellt wurden, die folgende Formel:
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments
Verwenden Sie für Tabellen, die mit dem Verteilungsstil ALL oder Auto (ALL) erstellt wurden, die folgende Formel:
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments
Bei den Tabellenformeln basiert die Anzahl der Segmente darauf, ob die Tabelle einen definierten Sortierschlüssel hat. Wenn eine Amazon Redshift-Tabelle einen definierten Sortierschlüssel hat, dann hat die Tabelle zwei Segmente: ein sortiertes Segment und ein unsortiertes Segment. Wenn eine Amazon Redshift-Tabelle über keinen Sortierschlüssel verfügt, erzeugt die Tabelle nur ein unsortiertes Segment.
Sie können die Anzahl der ausgefüllten Segmente mithilfe der folgenden Abfrage berechnen:
select count(distinct a.slice) asnumber_of_populated_slices, b."table" from stv_blocklist a, svv_table_info b where a.tbl = b.table_id group by b."table" ;
Beispiel: sechs dc2.large-Cluster
Beispielsweise kann ein sechs dc2.large-Cluster mit vier kleinen Tabellen mit derselben Struktur und Zeilenanzahl erstellt werden. Wenn der Cluster drei verschiedene Verteilungsstile und einen Verteilungsstil mit einem Sortierschlüssel verwendet, werden unterschiedliche Abfragen verwendet.
Die folgende Abfrage erstellt eine Tabelle mit einem ALL-Verteilungsstil (und einer Ausgabe von sechs ausgefüllten Segmenten):
create table testsize_all (a varchar(100),b varchar(100), cvarchar(100)) diststyle all; insert into testsize_all values ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
Die folgende Abfrage erstellt eine Tabelle mit einem EVEN-Verteilungsstil (und einer Ausgabe von sechs ausgefüllten Segmenten):
create table testsize_even (a varchar(100),b varchar(100), cvarchar(100)) diststyle even; insert into testsize_even values ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
Die folgende Abfrage erstellt eine Tabelle mit einem Verteilungsschlüssel (und einer Ausgabe eines aufgefüllten Segments):
create table testsize_key (a varchar(100),b varchar(100), cvarchar(100)) distkey (a); insert into testsize_key values ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
Die folgende Abfrage erstellt eine Tabelle mit einem Verteilungsschlüssel und einem Sortierschlüssel (und einer Ausgabe von sechs ausgefüllten Segmenten):
create table testsize_sort_even (a varchar(100),bvarchar(100), c varchar(100) ) diststyle even sortkey (a); insert into testsize_sort_even values ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');
Berechnen der minimalen Tabellengröße
Verwenden Sie die folgende Formel, um die minimale Tabellengröße für einen EVEN-Verteilungsstil zu berechnen:
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments 1MB * (3+3) * 6 *1 = 36MB
Verwenden Sie die folgende Formel, um die minimale Tabellengröße für einen ALL-Verteilungsstil zu berechnen:
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_cluster_nodes * number_of_table_segments 1MB * (3+3) * 6 *1 = 36 MB
Verwenden Sie die folgende Formel, um die minimale Tabellengröße für einen KEY-Verteilungsstil zu berechnen:
Minimum table size = block_size (1 MB) * (number_of_user_columns+ 3 system columns) * number_of_populated_slices * number_of_table_segments 1MB * (3+3) * 1 *1 = 6MB
Verwenden Sie die folgende Formel, um die minimale Tabellengröße für eine gleichmäßige Verteilung mit einem Sortierschlüssel zu berechnen:
Minimum table size = block_size (1 MB) *(number_of_user_columns + 3 system columns) * number_of_populated_slices * number_of_table_segments 1MB * (3+3) * 6 *2 = 72MB
Wenn eine kleine Anzahl von Zeilen eingefügt wurde, ist die Größe Ihrer Tabelle größer als erwartet. Die Größe der Tabelle nimmt weiter zu, da die Anzahl der Zeilen eingefügt wird und die Anzahl der aufgefüllten Segmente zunimmt.
Wenn eine klassische Größenänderung durchgeführt wird, wächst die Anzahl der aufgefüllten Segmente, ohne dass das Datenvolumen für die Tabelle zunimmt. Infolgedessen wächst der freie Speicherplatz nach der Größenänderung nicht linear.
Ähnliche Informationen
Bewährte Methoden für Amazon Redshift für das Entwerfen von Tabellen
Arbeiten mit automatischer Tabellenoptimierung
Ähnliche Videos
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren