Title: Performance en aplicaciones GeneXus.
1Performance en aplicaciones GeneXus. Qué hacer
cuando hay problemas?
- Alexander Wolff (awolff_at_concepto.com.uy)
- Marcos Crispino (mcrispino_at_concepto.com.uy)
- Concepto
2Quié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
3Objetivos
- Presentar opciones para analizar y mejorar la
performance en aplicaciones GeneXus. - Comentar la metodología utilizada en algunos
casos.
4Agenda
- Optimizaciones en
- GeneXus
- Lenguaje de programación
- Manejador de base de datos
- Metodología
- Generalidades
- Web panels
- Procesos batch
5GeneXus 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
6GeneXus Buenas Prácticas (2)
- For each que suman o cuentan, utilizar
optimizaciones de GeneXus.
No genera count()
Genera count()
7GeneXus Buenas Prácticas (3)
- Programar para que genere joins en el servidor
8GeneXus Preferencias
- Delete groups / Agregate groups
- Cache de tablas (GX 8.0)
- Connect to server At application startup
- Copy table groups
9GeneXus Optimizaciones
- Pasaje de valores por parámetro entre los objetos
- Uso de arrays o SDTs
- Uso de tablas temporales para resolver consultas
complejas
10Lenguaje 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.as
px?1,N,0,0,208
11DBMS 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
12Falta de índices
( No existe índice por FacFch )
13Creando un índice por FacFch..
14Estadí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
15Estadísticas desactualizadas
FacFch Count
2004-06-01 600900
2004-06-03 600999
2004-06-05 99
2004-06-07 299
2004-06-08 199700
16Después de actualizar las estadísticas..
17Histogramas
- Se usan para mantener disponible distribuciones
no uniformes al optimizador de consultas del DBMS
18Histogramas
- Es necesario el uso de literales en el where del
for each
19SQL 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
20Index 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
21Metodología Generalidades (1)
- Revisar las navegaciones
- For each varias veces a la misma tabla
- For each sin filtros
- Navegaciones con tabla extendida
22Metodologí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
23Metodologí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
24Metodologí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.
25Performance en aplicaciones GeneXus. Qué hacer
cuando hay problemas?
- Alexander Wolff (awolff_at_concepto.com.uy)
- Marcos Crispino (mcrispino_at_concepto.com.uy)
- Concepto