Consejos para solucionar problemas de rendimiento de Actian Vector en Hadoop
Corporación Actian
20 de junio de 2016

Actian Vector y Vector en Hadoop son potentes herramientas para ejecutar consultas de forma eficiente. Sin embargo, la mayoría de los usuarios de plataformas de análisis de datos buscan formas de optimizar el rendimiento para obtener mejoras incrementales en las consultas.
El equipo de Servicio y Soporte de Actian trabaja con nuestros clientes para identificar las áreas comunes que deben ser investigadas cuando se trata de mejorar el rendimiento de las consultas. La mayoría de nuestras recomendaciones se aplican tanto a Actian Vector (nodo único) como a Actian Vector en Hadoop (VectorH, un clúster multinodo en Hadoop).
Actian ha publicado recientemente una visión general en profundidad de los conocimientos técnicos y las mejores prácticas para ayudar a todos los usuarios de Vector y VectorH a optimizar el rendimiento, con especial atención a VectorH.
A diferencia de los motores de consulta SQL en Hadoop (Hive, Impala, Spark SQL, etc.) VectorH es un verdadero RDBMS columnar, MPP, con capacidades completas de SQL, transactions acid (es decir, soporte para actualizaciones y eliminaciones en el lugar), opciones de seguridad robustas incorporadas, etc. Esta flexibilidad permite optimizar VectorH para cargas de trabajo y entornos complejos.
Tenga en cuenta que Vector y VectorH son muy capaces de ejecutar consultas de manera eficiente sin utilizar ninguna de las técnicas examinadas. No obstante, estas técnicas resultarán muy útiles para cargas de trabajo exigentes y entornos Hadoop muy concurridos, y le permitirán obtener los mejores resultados de su plataforma.
A través de nuestro trabajo con los clientes, hemos descubierto que deben investigarse las siguientes áreas para lograr el máximo rendimiento.
Partición de tablas
Una consideración muy importante en el diseño de esquemas para cualquier sistema de Procesamiento Paralelo Masivo (MPP) como VectorH es cómo distribuir los datos en un cluster para equilibrar la ejecución de consultas de manera uniforme en todos los recursos disponibles. Si no particionas explícitamente tus tablas cuando son creadas, VectorH creará por defecto tablas no particionadas - pero para un mejor rendimiento, siempre debes particionar las tablas más grandes de tu base de datos.
Evitar la desviación de los datos
Los datos desequilibrados, en los que un pequeño número de máquinas tiene muchos más datos que la mayoría de las demás, se conoce como desviación de datos. El desequilibrio de datos puede causar graves problemas de rendimiento en las consultas, ya que la máquina con la cantidad desproporcionada de datos gobierna la velocidad general de la consulta y puede convertirse en un cuello de botella.
Estadísticas pendientes
Las estadísticas de distribution des données son esenciales para la correcta creación de un buen plan de consulta. En ausencia de estadísticas, el optimizador de consultas VectorH hace ciertas suposiciones por defecto sobre cosas como cuántas filas coincidirán cuando se unan dos tablas. Cuando se trabaja con grandes conjuntos de datos, es mucho mejor disponer de datos reales sobre la distribución real de los datos, en lugar de confiar en estas estimaciones.
Clasificación de datos
El modelo relacional de procesamiento no requiere que los datos estén ordenados en el disco, sino que se utiliza una cláusula ORDER BY en una consulta que necesita los datos en una secuencia determinada.
Sin embargo, mediante el uso de lo que se conoce como índices MinMax (mantenidos automáticamente dentro de la estructura de una tabla sin intervención del usuario), VectorH es capaz de utilizar datos ordenados para eliminar de forma más eficiente bloques innecesarios de datos del procesamiento y, por tanto, acelerar la ejecución de consultas, cuando éstas tienen una cláusula WHERE o una restricción join sobre una columna en la que la tabla está ordenada.
Utilizar los tipos de datos más adecuados
Como en cualquier base de datos, elegir el tipo de datos adecuado para tu esquema y tus consultas puede marcar una gran diferencia en el rendimiento de VectorH, así que no acostumbres a utilizar el tamaño máximo de columna por comodidad. En su lugar, considere los valores más grandes que es probable que almacene en una columna VARCHAR, por ejemplo, y dimensione sus columnas en consecuencia.
Dado que VectorH comprime los datos de las columnas de forma muy eficaz, la creación de columnas mucho más grandes de lo necesario tiene un impacto mínimo en el tamaño de las tablas de datos. Dado que las columnas VARCHAR se almacenan internamente como cadenas terminadas en cero, el tamaño de VARCHAR no tiene ningún efecto sobre los tiempos de procesamiento de las consultas. Sin embargo, sí influye en los tiempos de comunicación del frontend, ya que los datos se almacenan como la longitud máxima definida después de salir del motor. Nótese sin embargo que almacenar datos que son inherentemente numéricos (IDs, timestamps, etc) como datos VARCHAR es muy perjudicial para el sistema, ya que VectorH puede procesar datos numéricos mucho más eficientemente que datos de caracteres.
Gestión de memoria para pequeños cambios
VectorH cuenta con un mecanismo pendiente de patente para gestionar de forma eficiente muchos cambios pequeños en los datos, denominado Positional Delta Trees (PDT). Estos también permiten el uso de sentencias de actualización y borrado en datos almacenados en un sistema de archivos de solo apéndice como HDFS.
Sin embargo, si se ejecutan muchas sentencias de actualización, inserción o borrado, el uso de memoria para las estructuras PDT puede crecer rápidamente. Si se utilizan grandes cantidades de memoria, el sistema puede volverse más lento a la hora de procesar futuros cambios y, finalmente, la memoria se agotará. La gestión de esta memoria se realiza de forma automática, aunque el usuario también puede emitir directamente una sentencia 'combine', que fusionará los cambios de la PDT de nuevo en la tabla principal en un proceso denominado propagación de actualizaciones. Hay una serie de disparadores que hacen que el sistema realice este mantenimiento automáticamente en segundo plano (como umbrales para la memoria total utilizada por las PDT, o el porcentaje de filas actualizadas), por lo que esto suele ser transparente para el usuario.
Optimización de simultanéité
VectorH está diseñado para permitir que una sola consulta se ejecute utilizando tantos hilos de ejecución paralela como sea posible para alcanzar el máximo rendimiento. Sin embargo, quizás atípicamente para un sistema MPP, también está diseñado para permitir una alta simultanéité con una asignación democrática de recursos cuando hay un alto número de consultas presentes en el sistema. VectorH gestiona estas dos situaciones con una configuración "lista para usar", pero puede ajustarse para satisfacer las necesidades de la aplicación (por ejemplo, si se desea un mayor rendimiento de las consultas más exigentes restringiendo el máximo de recursos que puede adquirir una consulta).
El número de conexiones simultáneas (64 por defecto) que acepta una instancia de VectorH se rige por el parámetro connect_limit, almacenado en config.dat y gestionado a través de la utilidad CBF. Pero normalmente hay más conexiones que consultas ejecutándose, así que ¿cómo se distribuyen los recursos entre las consultas concurrentes?
Por defecto, VectorH intenta equilibrar las cargas de trabajo de una y varias consultas. Los parámetros clave para equilibrar esto son:
- Número de núcleos processeur en el cluster VectorH.
- Número de hilos que puede utilizar una consulta.
- Número de hilos que el sistema concede a una consulta.
- Número de consultas que se están ejecutando actualmente en el sistema.
Resumen
Vector y VectorH son muy capaces de ejecutar consultas de forma eficiente sin necesidad de utilizar ninguna de las técnicas y consejos aquí descritos. Pero cuanto más exigente sea su carga de trabajo, ya sea en términos de volúmenes de datos, complejidad de las consultas o simultanéité los usuarios, la aplicación de algunos de los consejos definidos en el informe completo le permitirá obtener los mejores resultados de su plataforma.
Suscríbase al blog de Actian
Suscríbase al blog de Actian para recibir información sobre datos directamente en su correo electrónico.
- Manténgase informado: reciba lo último en análisis de datos directamente en su bandeja de entrada.
- No se pierda ni una publicación: recibirá actualizaciones automáticas por correo electrónico que le avisarán cuando se publiquen nuevas publicaciones.
- Todo depende de usted: cambie sus preferencias de entrega para adaptarlas a sus necesidades.