Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy) Concepto
¿Quiénes somos? Consultoría y desarrollo de software 10 años de experiencia con GeneXus Certificación ISO 9000 Reconocimientos “Early Adopter of New Technology” (2001) “Mejor Betatester GeneXus” (2000 y 2001) Bases de conocimiento de más de 6000 objetos y 700 tablas
Objetivos Presentar opciones para analizar y mejorar la performance en aplicaciones GeneXus. Comentar la metodología utilizada en algunos casos.
Agenda Optimizaciones en Metodología GeneXus Lenguaje de programación Manejador de base de datos Metodología Generalidades Web panels Procesos batch
GeneXus – Buenas Prácticas (1) Modelo de datos Uso de Subtipos Índices For each con filtros Filtros resueltos en el servidor vs en el cliente: Servidor &aux = sysdate() For each where Att = &aux endfor Cliente For each where Att = sysdate() endfor
GeneXus – Buenas Prácticas (2) For each que suman o cuentan, utilizar optimizaciones de GeneXus. No genera count() Genera count()
GeneXus – Buenas Prácticas (3) Programar para que genere joins en el servidor
GeneXus – Preferencias Delete groups / Agregate groups Cache de tablas (GX 8.0) Connect to server: At application startup Copy table groups
GeneXus – Optimizaciones Pasaje de valores por parámetro entre los objetos Uso de arrays o SDTs Uso de tablas temporales para resolver consultas complejas
Lenguaje de programación Uso de variables globales Herramientas específicas del lenguaje Ejemplo: Coverage logging en Visual Fox Pro http://www.concepto.com.uy/PetroCSharp/hwnver03.aspx?1,N,0,0,208
DBMS – Plan de ejecución Disponible en todos los DMBS Permite detectar “full scans” sobre tablas grandes determinar índices que usa el DBMS (no siempre coinciden con los que dice GeneXus) detectar estadísticas desactualizadas
Falta de índices ( No existe índice por FacFch )
Creando un índice por FacFch..
Estadísticas del DBMS Optimizador de consultas del DBMS usa estadísticas almacenadas para crear planes de ejecución de sentencias Las estadísticas se deben actualizar periódicamente para asegurar planes de ejecución buenos Hay que tener una estrategia de actualización de las estadísticas
Estadísticas desactualizadas FacFch Count 2004-06-01 600900 2004-06-03 600999 2004-06-05 99 2004-06-07 299 2004-06-08 199700
Después de actualizar las estadísticas..
Histogramas Se usan para mantener disponible distribuciones no uniformes al optimizador de consultas del DBMS
Histogramas Es necesario el uso de literales en el where del for each
SQL Server Profiler Permite hacer trace de las sesiones Que sentencias se envían al DBMS Cuando empieza a ejecutarse una sentencia, cuando termina Plan de ejecución de sentencias
Index Tunning Wizard Dado un trace generado con Profiler y una base de datos: Lista las consultas mas costosas Lista los índices utilizados por cada consulta Recomienda un conjunto de índices a crear, y estima el porcentaje de mejora para cada consulta Permite crear el conjunto de índices recomendados
Metodología – Generalidades (1) Revisar las navegaciones For each varias veces a la misma tabla For each sin filtros Navegaciones con tabla extendida
Metodología – Generalidades (2) Ver consultas en la base de datos Ejecutar sentencia SQL que genera GeneXus Ver el plan de ejecución Utilizar el Index Tunning Wizard para analizar el uso de los índices
Metodología – Web Uso de paginado para “minimizar” el tamaño de los HTML Ver el uso de tablas HTML Tamaño de las imágenes Analizar log del web server
Metodología – Procesos batch Por lo general intervienen varios procedures Optimizar la lectura de datos, pasando valores por parametro y usando arrays Uso de cache de tablas Si es posible, generar con un lenguaje “más rápido”, por ejemplo C/SQL.
Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy) Concepto