Identifizieren von Tabellen mit verzerrter Datenverteilung oder unsortierten Zeilen - Amazon Redshift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Identifizieren von Tabellen mit verzerrter Datenverteilung oder unsortierten Zeilen

Mit der folgenden Abfrage können Sie Tabellen identifizieren, die eine ungleichmäßige („verzerrte“) Datenverteilung oder einen hohen Prozentsatz an unsortierten Zeilen aufweisen.

Ein geringer skew-Wert weist darauf hin, das die Tabellendaten ordnungsgemäß verteilt sind. Wenn eine Tabelle für skew einen Wert von 4,00 oder höher hat, sollten Sie erwägen, den Datenverteilungsstil zu ändern. Weitere Informationen finden Sie unter Suboptimale Datenverteilung.

Wenn eine Tabelle für pct_unsorted einen Wert über 20 Prozent hat, sollten Sie ggf. den Befehl VACUUM ausführen. Weitere Informationen finden Sie unter Unsortierte oder falsch sortierte Zeilen.

Sie sollten auch die mbytes- und pct_of_total-Werte für jede Tabelle überprüfen. Diese Spalten geben die Größe einer Tabelle an, sowie den Prozentsatz des verfügbaren Bruttospeicherplatzes auf dem Datenträger, den die Tabelle verbraucht. Der Roh-Festplattenspeicherplatz schließt den Platz ein, der von Amazon Redshift für die interne Verwendung reserviert ist, ist also größer als die nominelle Festplattenkapazität, bei der es sich um den Festplattenspeicherplatz handelt, der dem Benutzer zur Verfügung steht. Verwenden Sie diese Informationen, um zu verifizieren, dass der verfügbare Speicherplatz auf dem Datenträger mindestens um den Faktor 2,5 größer ist als Ihre größte Tabelle. Dieser verfügbare Speicherplatz reicht dafür aus, dass das System bei der Verarbeitung von komplexen Abfragen Zwischenergebnisse auf den Datenträger schreiben kann.

select trim(pgn.nspname) as schema, trim(a.name) as table, id as tableid, decode(pgc.reldiststyle,0, 'even',1,det.distkey ,8,'all') as distkey, dist_ratio.ratio::decimal(10,4) as skew, det.head_sort as "sortkey", det.n_sortkeys as "#sks", b.mbytes, decode(b.mbytes,0,0,((b.mbytes/part.total::decimal)*100)::decimal(5,2)) as pct_of_total, decode(det.max_enc,0,'n','y') as enc, a.rows, decode( det.n_sortkeys, 0, null, a.unsorted_rows ) as unsorted_rows , decode( det.n_sortkeys, 0, null, decode( a.rows,0,0, (a.unsorted_rows::decimal(32)/a.rows)*100) )::decimal(5,2) as pct_unsorted from (select db_id, id, name, sum(rows) as rows, sum(rows)-sum(sorted_rows) as unsorted_rows from stv_tbl_perm a group by db_id, id, name) as a join pg_class as pgc on pgc.oid = a.id join pg_namespace as pgn on pgn.oid = pgc.relnamespace left outer join (select tbl, count(*) as mbytes from stv_blocklist group by tbl) b on a.id=b.tbl inner join (select attrelid, min(case attisdistkey when 't' then attname else null end) as "distkey", min(case attsortkeyord when 1 then attname else null end ) as head_sort , max(attsortkeyord) as n_sortkeys, max(attencodingtype) as max_enc from pg_attribute group by 1) as det on det.attrelid = a.id inner join ( select tbl, max(mbytes)::decimal(32)/min(mbytes) as ratio from (select tbl, trim(name) as name, slice, count(*) as mbytes from svv_diskusage group by tbl, name, slice ) group by tbl, name ) as dist_ratio on a.id = dist_ratio.tbl join ( select sum(capacity) as total from stv_partitions where part_begin=0 ) as part on 1=1 where mbytes is not null order by mbytes desc;