Skew Factor en Teradata

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.

4 respuestas a Skew Factor en Teradata

  1. Juan Pablo dice:

    hola carlos que interesante articulo, te hago una pregunta de que manera puedo calcular el espacio fisico en gb o mb que va utilizar una tabla ante de insertar la información previamente se que la tabla va tener mas o menos 120 millones de registros hay forma de calcular esto antes de insertar para reservar el espacio apropiado.

    • mjano dice:

      select
      tablename,
      sum(columnlength)
      from
      dbc.columns
      where
      databasename = ‘desa_edw_tb’
      group by 1

    • CarlosAL dice:

      Juan Pablo:
      La documentación de Teradata da información acerca de cómo estimar el tamaño de una tabla en función de su estructura (y del número de filas previsto, claro). Ello incluye conocer los tipos de los datos de las columnas (y el tamaño medio de las columnas de longitud variable como los VARCHARS), columnas “NULL” o “NOT NULL” y columnas comprimidas (“COMPRESS”) con sus bits de presencia, “overhead” de las estructuras etc…
      También influyen cosas como el número de AMPs del sistema, ya que una tabla colocará cabeceras (“headers”) en cada uno de ellos.También habría que estimar el tamaño de los índices secundarios, si los hubiera.
      Yo utilizo una hoja excel que construí hace tiempo para una estimacón rápida de los tamaños. Pero hay que saber que se trata siempre de estimaciones -muy aproximadas, eso sí-, no de cálculos.
      Saludos.
      Carlos.

      • Carlos dice:

        Buenas Carlos,
        me podrías decir en que documentación de Teradata te indica como estimar el tamaño de una tabla. Con la cantidad de documentación que hay a veces se pierde uno.
        Gracias,
        Carlos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: