Determining Table Size

Aus BI-Snippets - Business Intelligence Code und Module
Wechseln zu: Navigation, Suche

Größenbestimmung bei Verteilter Architektur


Da Teradata Tabellen grundsätzlich auf eine Vielzahl von AMPs verteilt wird, ist neben der physikalischen Größe - also der Summe aller Felder - auch die Verteilung der Tabellenzeilen über die AMPs wichtig. Der für eine Datenbank verfügbare Platz wird nämlich ebenfalls gleichmäßig auf die AMPs verteilt. Wird bei einem AMP der verfügbare Platz überschritten, so gibt es den Fehler "No more room in <Databasename>". Da in Datenbanken in der Regel mehrere Tabellen vorhanden sind, muss der Grund nicht zwangsläufig bei der neuesten Tabelle liegen. Das folgende SQL gibt sämtliche Tabellen in einer Datenbank <DatabaseName> mit Größe aus:

select
tbs.databasename,
tbs.tablename,
cast(sum(tbs.currentperm)/(1024*1024) as DECIMAL(10,2)) as SizeInMB,
cast(sum(tbs.currentperm)/(1024*1024*1024) as DECIMAL(10,2)) as SizeInGB,
(max(tbs.currentperm)* (hashamp()+1))/(1024*1024) as Space_Utilised_Incld_Skew_MB,
cast(100-(AVG(tbs.CurrentPerm)/MAX(tbs.CurrentPerm)*100) as DECIMAL(10,2)) AS Skewfactor,
tb.CreatorName,
tb.LastAlterName
from dbc.tablesize tbs
left join dbc.tables tb
on tbs.Tablename=tb.TABLENAME
and tbs.DatabaseName=tb.Databasename
where
    tbs.databasename = <DatabaseName>
group by 1,2,7,8
order by 1,2;

In der Tabelle dbc.tablesize wird für alle Tabellen in allen Datenbanken der Speicherverbrauch auf den jeweiligen AMPs in der Spalte currentperm in Byte gespeichert. Für die Berechnung des benötigten Speicherplatz kann man also diese Spalte summieren. Die Spalten SizeInMB und SizeInGB rechnen diese Summe dann in Megabyte bzw Gigabyte um. Sollte der Speicherbedarf der Tabelle sehr hoch sein, kann man mit Komprimierung arbeiten, um ihn zu verringern.

Die Spalte Space_Utilised_Incld_Skew_MB berücksichtig dagegen die Verteilung der Tabelle auf die AMPs. Hierzu wird der maximale Speicherbedarf auf einem AMP (max(tbs.currentperm)) mit der Anzahl an AMPs (hashamp()+1) multipliziert.

Beispiel:

Amp
Größe
1
10 MB
2
10 MB
3
40 MB
4
10 MB

SizeInMB: 10 MB + 10 MB + 40 MB +10 MB = 70 MB.

Spalte Space_Utilised_Incld_Skew_MB: 40 MB * 4 AMPs = 160 MB.

Die ungleiche Verteilung bedeutet, dass die Tabelle auf AMP 3 so groß ist, wie eine gleichverteilte Tabelle mit 160 MB Größe.