Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff...

25
Performance en Performance en aplicaciones GeneXus. aplicaciones GeneXus. ¿Qué hacer cuando hay ¿Qué hacer cuando hay problemas? problemas? Alexander Wolff ([email protected]) Marcos Crispino ([email protected]) Concepto

Transcript of Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff...

Page 1: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Performance en Performance en aplicaciones GeneXus. aplicaciones GeneXus. ¿Qué hacer cuando hay ¿Qué hacer cuando hay

problemas?problemas?

Alexander Wolff ([email protected])Marcos Crispino ([email protected])

Concepto

Page 2: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

¿Quiénes somos?¿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

Page 3: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

ObjetivosObjetivos

• Presentar opciones para analizar y mejorar la performance en aplicaciones GeneXus.

• Comentar la metodología utilizada en algunos casos.

Page 4: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

AgendaAgenda

• Optimizaciones en– GeneXus– Lenguaje de programación– Manejador de base de datos

• Metodología– Generalidades– Web panels– Procesos batch

Page 5: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

GeneXus – Buenas GeneXus – Buenas Prácticas (1)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 = &auxendfor

ClienteFor each

where Att = sysdate()endfor

Page 6: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

GeneXus – Buenas GeneXus – Buenas Prácticas (2)Prácticas (2)

• For each que suman o cuentan, utilizar optimizaciones de GeneXus.

No genera count() Genera count()

Page 7: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

GeneXus – Buenas GeneXus – Buenas Prácticas (3)Prácticas (3)

• Programar para que genere joins en el servidor

Page 8: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

GeneXus – GeneXus – PreferenciasPreferencias

• Delete groups / Agregate groups• Cache de tablas (GX 8.0)• Connect to server: At application

startup• Copy table groups

Page 9: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

GeneXus – GeneXus – OptimizacionesOptimizaciones

• Pasaje de valores por parámetro entre los objetos

• Uso de arrays o SDTs• Uso de tablas temporales para resolver

consultas complejas

Page 10: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Lenguaje de Lenguaje de programaciónprogramació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

Page 11: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

DBMS – Plan de DBMS – Plan de ejecuciónejecució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

Page 12: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Falta de índicesFalta de índices( No existe índice por FacFch )

Page 13: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Creando un índice por Creando un índice por FacFch..FacFch..

Page 14: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Estadísticas del DBMSEstadí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

Page 15: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Estadísticas Estadísticas desactualizadasdesactualizadas

FacFch Count

2004-06-01

600900

2004-06-03

600999

2004-06-05

99

2004-06-07

299

2004-06-08

199700

Page 16: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Después de actualizar Después de actualizar las estadísticas..las estadísticas..

Page 17: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

HistogramasHistogramas

• Se usan para mantener disponible distribuciones no uniformes al optimizador de consultas del DBMS

Histograma campo FacPaga

0

200000

400000

600000

800000

1000000

1200000

1400000

1600000

N S

Distribución uniforme campo FacPaga

0

100000

200000

300000

400000

500000

600000

700000

800000

N S

Page 18: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

HistogramasHistogramas

• Es necesario el uso de literales en el where del for each

Page 19: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

SQL Server ProfilerSQL 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

Page 20: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Index Tunning WizardIndex 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

Page 21: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Metodología – Metodología – Generalidades (1)Generalidades (1)

• Revisar las navegaciones– For each varias veces a la misma tabla– For each sin filtros– Navegaciones con tabla extendida

Page 22: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Metodología – Metodología – Generalidades (2)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

Page 23: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Metodología – WebMetodologí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

Page 24: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Metodología – Metodología – Procesos batchProcesos 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.

Page 25: Performance en aplicaciones GeneXus. ¿Qué hacer cuando hay problemas? Alexander Wolff (awolff@concepto.com.uy) Marcos Crispino (mcrispino@concepto.com.uy)

Performance en Performance en aplicaciones GeneXus. aplicaciones GeneXus. ¿Qué hacer cuando hay ¿Qué hacer cuando hay

problemas?problemas?

Alexander Wolff ([email protected])Marcos Crispino ([email protected])

Concepto