Ich habe eine Tabelle in RedShift. Wie kann ich sehen, wie viel Speicherplatz es verwendet?Wie Tabellenplatz auf der Festplatte in RedShift/ParAccel gemessen werden
Antwort
Verwenden Anfragen von dieser Präsentation: http://www.slideshare.net/AmazonWebServices/amazon-redshift-best-practices
Speicherplatznutzung für die Cluster-Analyse:
select
trim(pgdb.datname) as Database,
trim(pgn.nspname) as Schema,
trim(a.name) as Table,
b.mbytes,
a.rows
from (
select db_id, id, name, sum(rows) as 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
join pg_database as pgdb on pgdb.oid = a.db_id
join (
select tbl, count(*) as mbytes
from stv_blocklist
group by tbl
) b on a.id = b.tbl
order by mbytes desc, a.db_id, a.name;
Tabelle Verteilung zwischen den Knoten Analyse:
select slice, col, num_values, minvalue, maxvalue
from svv_diskusage
where name = '__INSERT__TABLE__NAME__HERE__' and col = 0
order by slice, col;
hey, überprüfen Sie meinen Kommentar, es ist ein potenzieller Fehler bei Ihrer Abfrage. – Diego
Hinzufügen Besitzer und ein Schema Filter zu der obigen Abfrage:
select
cast(use.usename as varchar(50)) as owner,
trim(pgdb.datname) as Database,
trim(pgn.nspname) as Schema,
trim(a.name) as Table,
b.mbytes,
a.rows
from
(select
db_id,
id,
name,
sum(rows) as rows
from stv_tbl_perm a
group by db_id, id, name
) as a
join pg_class as pgc on pgc.oid = a.id
left join pg_user use on (pgc.relowner = use.usesysid)
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
-- leave out system schemas
and pgn.nspowner > 1
join pg_database as pgdb on pgdb.oid = a.db_id
join
(select
tbl,
count as mbytes
from stv_blocklist
group by tbl
) b on a.id = b.tbl
order by mbytes desc, a.db_id, a.name;
Anzahl sollte gezählt werden (*) –
oder Anzahl (Blocknummer) – rohitkulky
Ich dachte nur, ich würde dies erweitern, da ich mit einer ungleichmäßigen Verteilung konfrontiert bin. Ich habe einige Links und Felder hinzugefügt, um die Analyse von Speicherplatz nach Knoten und Slice zu ermöglichen. Auch hinzugefügt werden, max/min-Werte und die Anzahl der Werte pro Scheibe für Spalte 0.
select
cast(use.usename as varchar(50)) as owner,
trim(pgdb.datname) as Database,
trim(pgn.nspname) as Schema,
trim(a.name) as Table,
a.node,
a.slice,
b.mbytes,
a.rows,
a.num_values,
a.minvalue,
a.maxvalue
from
(select
a.db_id,
a.id,
s.node,
s.slice,
a.name,
d.num_values,
d.minvalue,
d.maxvalue,
sum(rows) as rows
from stv_tbl_perm a
inner join stv_slices s on a.slice = s.slice
inner join (
select tbl, slice, sum(num_values) as num_values, min(minvalue) as minvalue, max(maxvalue) as maxvalue
from svv_diskusage
where col = 0
group by 1, 2) d on a.id = d.tbl and a.slice = d.slice
group by 1, 2, 3, 4, 5, 6, 7, 8
) as a
join pg_class as pgc on pgc.oid = a.id
left join pg_user use on (pgc.relowner = use.usesysid)
join pg_namespace as pgn on pgn.oid = pgc.relnamespace
-- leave out system schemas
and pgn.nspowner > 1
join pg_database as pgdb on pgdb.oid = a.db_id
join
(select
tbl,
slice,
count(*) as mbytes
from stv_blocklist
group by tbl, slice
) b on a.id = b.tbl
and a.slice = b.slice
order by mbytes desc, a.db_id, a.name, a.node;
Ich weiß, diese Frage ist alt und hat bereits eine Antwort akzeptiert, aber muss ich darauf hinweisen, dass die Antwort falsch ist. Was die Abfrage dort als "mb" ausgibt, ist eigentlich die "Anzahl der Blöcke". Die Antwort wäre nur dann korrekt, wenn die Blockgröße 1 MB beträgt (was der Standardwert ist).
Wenn die Blockgröße unterschiedlich ist (in meinem Fall zum Beispiel 256K), müssen Sie die Anzahl der Blöcke mit ihrer Größe in Bytes multiplizieren. Ich schlage vor, die folgende Änderung Ihrer Abfrage, wo ich die Anzahl der Blöcke durch die Blockgröße in Byte multiplizieren (262.144 Bytes) und teilen sich dann durch (1024 * 1024), um die Summe in Megabyte:
select
trim(pgdb.datname) as Database,
trim(pgn.nspname) as Schema,
trim(a.name) as Table,
b.mbytes as previous_wrong_value,
(b.mbytes * 262144)::bigint/(1024*1024) as "Total MBytes",
a.rows
from (
select db_id, id, name, sum(rows) as 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
join pg_database as pgdb on pgdb.oid = a.db_id
join (
select tbl, count(blocknum) as mbytes
from stv_blocklist
group by tbl
) b on a.id = b.tbl
order by mbytes desc, a.db_id, a.name;
Kann die Blockgröße in Rotverschiebung geändert werden? Ich habe eine Weile nach Informationen darüber gesucht und keine Möglichkeit gefunden, dies zu tun. –
Ich glaube, du kannst. Auf früheren Paraccel (Actian Matrix - Redshift Vorgänger), können Sie das steuern, indem Sie den Wert von block_size in der padb.conf ändern. Bei Rotverschiebung sollte etwas in derselben Zeile sein – Diego
hallo diemacht, überprüfen Sie bitte meine Antwort, es gibt einen Fehler in der angenommenen Antwort, wenn Ihre Blockgrößenkonfiguration nicht die Standardkonfiguration ist. Vielleicht beeinflusst dich das, ohne es zu wissen. – Diego