Teradata: ¿Tablas NoPI o SíPI?

A partir de la versión 13.0 Teradata introdujo un nuevo tipo de tablas: las tablas sin Primary Index (tablas NoPI para los amigos). Esto a alguien que llevara cierto tiempo trabajando con Teradata podría rechinarle un poco. En efecto, el Primary Index está en la base de la distribución de las tablas entre los AMPs y por tanto es la base del paralelismo. El algoritmo de ‘hash‘ que es el encargado de distribuir las filas de una tabla entre los AMPs se basa en el valor del PI. Entonces, ¿qué son y cómo funcionan estas tablas NoPI? Y lo que es más importante: ¿para qué pueden valer?

La idea tras estas tablas NoPI está en sustituir el algoritmo de distribución ‘hasing‘ basado en el PI por una distribución aleatoria. Las filas son enviadas a los AMPs a partir de métodos ‘random’, con lo que, de momento, la distribución debería ser mejor (menos ‘skew‘). También se elimina la verificación de filas duplicadas que ocurre con las tablas ‘normales’ y su ‘sort’ correspondiente, así como la redistribución de la fase de ‘application‘. Esto supone mejora en CPU e I/O.

Vamos a ver estos supuestos beneficios sobre el terreno:

Utilizaremos un fichero de 15GB con 63 millones de filas y 44 campos. Lo cargamos con fastload en una tabla ‘normal’ (con un Primary Index) y en una tabla idéntica, pero sin él (NoPI).
En el sistema utilizado (Teradata 14, 40 amps) los números son:

+------+----------+
|      | fastload |
+------+----------+
|  PI  |  4'33''  |
+------+----------+
| NOPI |  3'31''  |
+------+----------+

¡Qué maravilla! ¡Casi un 25% de mejora en tiempo de carga! ¡Pues a usar NoPI como tablas de ‘staging‘ con fastload a mogollón!

Ya pero, un momento. Las tablas de ‘staging‘ son tablas de almacenamiento temporal que normalmente se utilizan como fuente para inserciones en tablas definitivas. Y es aquí donde aparece la “PREGUNTA” con mayúsculas, la madre del cordero. ¿Qué pasa con las inserciones desde las tablas de ‘staging‘?

Es frecuente que las tablas definitivas sobre las que se volcará en contenido tengan el mismo PI que las tablas de ‘staging’. Esto hace que todas las operaciones sean locales en los AMPs y eliminan la necesidad de redistribución (filas arriba y abajo por la bynet moviéndose de un AMP a otro).

Otra prueba nos dará una idea del asunto. Insertaremos las filas desde la tabla de ‘staging‘ a una tabla con la misma estructura y mismo PI que la tabla PI de ‘staging‘. Para los 63 millones de filas el resultado es que:

+------+---------+
|      | INS/SEL |
+------+---------+
|  PI  |  0'56'' |
+------+---------+
| NOPI |  4'32'' |
+------+---------+

¡Epa! Entonces la cosa no está tan clara, porque el total del proceso es:

+------+----------+---------+---------+
|      | fastload | INS/SEL |  TOTAL  |
+------+----------+---------+---------+
|  PI  |  4'33''  |  0'56'' |  5'29'' |
+------+----------+---------+---------+
| NOPI |  3'31''  |  4'32'' |  8'03'' |
+------+----------+---------+---------+

Así pues, si utilizamos tablas NoPI lo que ganamos en el ‘fastload‘ lo perdemos luego con creces en el INSERT…SELECT y al final vemos que la carga con tablas de ‘staging’ que tienen el mismo PI que las tablas destino es alrededor de un 30% más rápida que el que usa tablas NoPI.

Además, hemos dejado aparte otras limitaciones de las tablas NoPI, como la imposibilidad de ejecutar UPDATEs (en forma de “UPSERT”) y MERGEs sobre ellas, ya que ambos comandos dependen de los Primary Indexes.

La moraleja: no es oro todo lo que reluce. Hay que ver exactamente las condiciones de datos, estructuras y procesos antes de tomar decisiones que pueden suponer diferencias sustanciales.

¿Tablas NoPI o SíPI? Pues depende…

Saludos.

Carlos.

Anuncios

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: