Document 7491586

Download Report

Transcript Document 7491586

Performance en
aplicaciones GeneXus.
¿Qué hacer cuando hay
problemas?
Alexander Wolff ([email protected])
Marcos Crispino ([email protected])
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
– 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
Cliente
&aux = sysdate()
For each
For each
where Att = sysdate()
where Att = &aux endfor
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
Histograma campo FacPaga
Distribución uniforme campo
FacPaga
1600000
800000
1400000
700000
1200000
600000
500000
1000000
800000
400000
600000
300000
400000
200000
100000
200000
0
0
N
S
N
S
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 ([email protected])
Marcos Crispino ([email protected])
Concepto