Uno de los conceptos más importantes en Teradata es el ‘skew factor‘ (que podríamos traducir algo así como ‘factor de sesgo’) en la distribución de los datos de las tablas entre los AMP’s.
Y es tan importante porque está directamente ligado al concepto de paralelismo y al funcionamiento de Teradata. Como hemos dicho otras veces, el paralelismo tiene sus -casi siempre- cosas buenas (muchos procesos trabajando a la vez) y sus -a veces- cosas malas (la tarea tarda tanto como el último de los procesos…). Es aquí donde entra el ‘skew factor‘ en la distribución de datos entre los AMP’s: si todos los AMP’s tienen un volumen de datos similar la tarea se realizará en paralelo de la forma más eficiente. Si por el contrario hay unos AMP’s que tienen poco volumen de datos y otros que tienen mucho volumen, estos últimos tendrán que hacer casi todo el trabajo y la tarea no terminará hasta que no acabe el último de ellos (aquí se abre un universo de metáforas con el mundo laboral y tal…)
Por ello hay quien define el ‘skew factor‘ como la función inversa de la ‘Parallel Efficiency‘ (eficiencia paralela): cuanto menor sea el ‘skew factor‘ mayor será la ‘Parallel Efficiency‘.
La fórmula para calcular el ‘skew factor‘ es:
100-((Media de CurrentPerm/Máximo de CurrentPerm) X 100).
Por regla general se considera aceptable un ‘skew factor‘ menor o igual que 10, mientras que si el ‘skew factor‘ es superior a 10 se recomienda revisar la definición del ‘primary index‘ para que el algoritmo ‘hash‘ distribuya los datos de la tabla de una forma más equitativa entre los AMP’s.
Otra cosa a tener en cuenta es que si la tabla es muy pequeña el ‘skew factor‘ deja de ser significativo.
BTEQ -- Enter your DBC/SQL request or BTEQ command:
SELECT TABLENAME,
SUM(CURRENTPERM) CURRENTPERM,
SUM(PEAKPERM) PEAKPERM,
CAST((100-(AVG(CURRENTPERM)/MAX(CURRENTPERM)*100)) AS DECIMAL(5,2))
"SKEWFACTOR(%)"
FROM DBC.TABLESIZE
WHERE DATABASENAME = 'MY_DB'
GROUP BY TABLENAME
ORDER BY TABLENAME
;
*** Query completed. 24 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
TableName CURRENTPERM PEAKPERM SKEWFACTOR(%)
---------- ----------- ----------- -------------
TABLA01 3,911,680 3,911,680 6.60
TABLA02 61,952 61,952 24.38
TABLA03 467,456 467,456 10.49
TABLA04 3,987,968 3,987,968 7.49
TABLA05 1,980,928 1,980,928 7.00
TABLA06 38,400 38,400 6.25
TABLA07 913,920 913,920 7.03
TABLA08 21,504 21,504 30.00
TABLA09 76,800 76,800 31.82
TABLA10 1,320,448 1,320,448 7.23
TABLA11 557,056 557,056 12.26
TABLA12 748,032 748,032 7.53
TABLA13 1,263,616 1,263,616 7.22
TABLA14 128,400,896 128,400,896 8.71
TABLA15 121,289,728 121,289,728 13.52
TABLA16 23,704,064 23,704,064 7.52
TABLA17 67,391,488 67,391,488 8.35
TABLA18 34,304 34,304 16.25
TABLA19 748,032 748,032 9.81
TABLA20 76,288 76,288 17.22
TABLA21 72,192 72,192 21.67
TABLA22 55,808 55,808 9.17
TABLA23 35,840 35,840 12.50
TABLA24 860,672 860,672 4.49
BTEQ -- Enter your DBC/SQL request or BTEQ command:
Saludos.
Carlos.