2. Agenda
Introducción al taller
Conceptos aplicables
Herramientas de monitoreo SQL
Recomendaciones al ejecutar y programar consultas
Documentación de referencia y enlaces de interés
5. ¿ Por qué se planteó el Taller ?
El sistema iSeries o AS/400 aloja el
procesamiento de gran parte de los
datos empresariales de ETAPA EP
desde hace algunas décadas debido a
su efectividad, el bajo nivel de
administración y la confianza de la
plataforma en procesar cargas de
trabajo.
A pesar de que la plataforma es
autoadministrable, autoajustable,
fácil de usar y fácil de mantener,
conocer de herramientas de
monitoreo y análisis de rendimiento
es ventajoso.
6. ¿ Qué pretende el Taller ?
La mejora de rendimiento del sistema es un tema
demasiadamente amplio y considera desde el diseño de las
aplicaciones hasta un monitoreo constante de la ejecución
de las mismas.
Hacer una introducción básica de la arquitectura de la base
de datos.
Hacer una introducción de las herramientas y opciones de
monitoreo existentes con el fin de propiciar mejoras en las
consultas.
Hacer recomendaciones básicas al momento de realizar la
codificación tanto de aplicaciones como en consultas.
7.
8. DB2 para iSeries
DB2 es la base de datos embebida dentro del iSeries
Tres bases de código de DB2 basado en la historia de
los sistemas, en la arquitectura y en el sistema
operativo.
DB2 para i (IBM i, System i, iSeries, AS/400)
DB2 para z (System z, zSeries, S/390)
DB2 para luw (Linux, UNIX, Windows, System p, System
x)
10. DB2 para iSeries
Ventajas de la plataforma
La base de datos parte del sistema operativo
Autónoma y autoadministrable
Muchas aplicaciones legada en lenguajes nativos
(COBOL, RPG) contra los mismos datos junto a
aplicaciones modernas (.Net, Java, PHP).
Trabajo a bajo nivel
Una sola base de datos con múltiples interfaces de
acceso
CL Nativo (CRTPF, CLRPF, DDS)
SQL (Embebido, ODBC, JDBC, CLI)
11. Interfaces de acceso
Aplicaciones
generadas en RPG
utilizan el acceso nativo
sobre la base de datos
(READE, SETLL,
CHAIN). La
optimización del
rendimiento depende
del diseño y la forma de
acceder a los datos.
Aplicaciones en .Net o
Java utilizan el acceso SQL
sobre la base de datos. La
optimización del
rendimiento depende de
como los programas y
consultas se ingresan a los
datos y de la asistencia de la
base de datos.
Consultas Query/400
utilizan el acceso nativo y
tienen cierto nivel de
optimización dentro del
sistema operativo.
12. Procesamiento de
consultas
Aplicaciones
generadas en
RPG utilizan el
acceso nativo
sobre la base de
datos (READE,
SETLL, CHAIN).
Aplicaciones en .Net o Java utilizan
el acceso SQL sobre la base de datos.
Consultas
Query/400 utilizan
el acceso nativo y
tienen cierto nivel
de optimización
dentro del sistema
operativo (CQE).
13. Procesamiento de consultas
El “Optimizador” de consultas en la base de datos DB2
para iSeries está basado en una optimización basada
en costo.
El “costo” es definido como tiempo estimado que toma
en ejecutarse una petición
El “costeo” de planes se refiere a la comparación de un
grupo de algoritmos y métodos para encontrar el plan
más rápido y reducir accesos a disco.
El “Optimizador” tiene la habilidad de reescribir la
consulta.
14. Procesamiento de consultas
Classic Query Engine
(CQE): procesa las
peticiones provenientes
de interfaces no SQL
(Query/400,
QPNQRYF). Todas las
consultas procesadas en
el componente clásico.
SQL Query Engine
(SQE): procesa las
peticiones basadas en
SQL.
15. Procesamiento de consultas
Fases de ejecución de una consulta :
Validación de la consulta
Validación de la petición realizada
Validación de planes existentes
Creación de estructuras internas de la consulta
Despacho de la consulta
Determinar que componente (CQE/SQE) completará el proceso.
Optimización de la consulta
Escoger el acceso más eficiente los métodos de proceso.
Construir el plan de acceso
Ejecución de la consulta
Construir las estructuras que utilizará el cursor
Construir estructuras temporales si son necesarias
Construir y activar el cursor
Generar la información
16.
17. Herramientas de Monitoreo SQL
Asesor de Índices
Ante memoria de Planes
SQL
Instantáneas de ante
memoria de Planes SQL
Supervisores de eventos de
ante memoria de planes
SQL
Visual Explain
Supervisores de
rendimiento
20. Recomendaciones para consultas
Evitar tomar en el SQL los nombres de índices. El DBMS
volverá a reescribir la consulta. En algunos casos utilizará el
módulo CQE para ejecutar la consulta no beneficiándose de las
nuevas opciones del SQE.
Evitar usar select *. En primera instancia se selecciona
información innecesaria. Al definirse todas las columnas no
puede el optimizador encontrar una ruta alterna (p.e Índice) y
no podrá ejecutarse más rápidamente la consulta.
Evitar usar funciones o conversiones de datos. Una
comparación debe hacerse en base al mismo tipo de dato,
misma escala y misma precisión. El optimizador encontrará
más fácilmente un índice en vez de recuperar todos los datos.
Evitar usar expresiones numéricas o cálculos dentro del select.
El optimizador ejecutará la operación sobre todos los datos sin
considerar un posible índice existente.
21. Recomendaciones Genexus
Por que índice va a realizar
la consulta
Que condición aplica
sobre el índice (WHERE
- CHAIN)
Sobre los datos recuperados
que búsqueda realiza
Se aplica optimizaciones de ser
el caso. No relevante en RPG.
22. Recomendaciones en Genexus RPG
En lo posible indicar un índice de lectura que sea
relevante para el proceso. Si no se especifica un índice
Genexus tomará por defecto el índice principal de la tabla
base y sobre todos los datos ejecutará las búsquedas.
Evitar usar funciones o conversiones de datos dentro de
los argumentos de un for each. Genexus recuperará los
datos del índice o tabla base y sobre aquellos ejecutará las
condiciones.
Debe validarse según la necesidad el utilizar opciones
dentro del DB2 como por ejemplo JOINS a nivel de RPG,
vistas materializadas y particionamiento.
23. Recomendaciones en Genexus RPG
Estar atento a los mensajes de especificación
Cuando se hace una navegación completa de una tabla
para recuperar un solo dato o un grupo de datos
(Navigation filters: Start from: FirstRecord Loop while:
NotEndOfTable)
Cuando se hace un join a nivel cliente (Join location:
Client).
Cuando una condición dentro de un for each pasa de
“Conditional constraint” a “standard constraint”
Considerar que elementos van en “Constraint” que
implican que se leyó por algún índice y luego de ese
grupo de datos se aplican los “Constraint”
24. Recomendaciones en Genexus C# o
Java
En lo posible hacer la que base de datos responda a las
peticiones de sumatorias, conteos, etc.. Para ello debe
usarse las optimizaciones creadas dentro de la herramienta
(http://wiki.genexus.com/commwiki/servlet/wiki?26286,F
or+Each+Optimizations,). Las optimizaciones disparan el
SQL correspondiente en la base de datos que es mucho
mejor que si se desarrolla en el lenguaje destino.
Considerar que el hacer referencia de atributos
relacionados entre distintos datastores hará que los joins se
hagan a nivel de cliente.
25. Documentación de referencia y
enlaces de interés
Libros Rojos de IBM (http://www.ibm.com/redbooks)
Advanced Functions and Administration on DB2
Universal Database for iSeries (SG24-4249-03)
DB2 Universal Database for iSeries Administration The
Graphical Way on V5R3 (SG24-6092-00)
Preparing for and Tuning the SQL Query Engine on DB2
for i5/OS (SG24-6598-01)
SQL Performance Diagnosis on IBM DB2 Universal
Database for iSeries (SG24-6654-00)
DB2 UDB for AS/400 Visual Explain
26. Documentación de referencia y
enlaces de interés
IBM DB2 for i indexing methods and strategies
(https://www.ibm.com/partnerworld/wps/servlet/RedirectServlet?cmsId=stg_
ast_sys_wp_db2_i_indexing_methods_strategies&attachmentName=ibm_db2_
for_i_indexing_methods_and_strategies.pdf)
System i Database Performance and Query Optimization Version 6 Release 1
(https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzajq/rzajqp
df.pdf)
IBM i Technology Updates
(https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/w
iki/IBM+i+Technology+Updates/page/DB2+for+i+-+Technology+Updates)
Blog de DB2 en i (http://db2fori.blogspot.com/)
DB2 Performance https://www.youtube.com/watch?v=sW1iN3Yd6wk
DB2 for i SQL
http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_61/db2/rbafzintro.
htm
http://www.lab400.com/Faster-Better-Queries.asp
Notas del editor
Se presenta la agenda.
En estos días se ha realizado una pequeña evaluación de los problemas existentes con relación a los problemas de rendimiento que tiene la empresa.
Se ha realizado un árbol de problemas bajo mi criterio. El problema principal es el deficiente tiempo y no predictibilidad del proceso del sistema actual.
Las causas son varias y posiblemente existan muchas mas, pero a partir de este esquema se pretende atacar parcialmente las siguientes :
Falta de conocimiento de herramientas y como usarlas
Diseño y programación de sistemas sin considerar temas de rendimiento
Por que el AS/400?... Las primeras organizaciones que se iniciaron en el tema informático en la ciudad usaron un sistema 36 provisto por Electrodatos. Los pioneros en la ciudad fueron los Ing. Hernán Vintimilla, quienes ofrecían procesamiento de sistemas como servicio. A principios de los 90 ETAPA decide adquirir su propio equipamiento, siendo el sw el que se ha mantenido y mejorado.
Inclusive ahora deben existir aun desarrollos corriendo en el sistema actual. La filosofia es mantener la inversión en lo actuado e ir mejorando conforme exista mejor tecnología. En otros entornos ha existido migraciones en diferentes tecnologías (Foxpro a VB a .Net).
Por que i por que es integrado. En otras plataformas se necesitan gurues a nivel de sistema operativo y de base de datos o de servidor de aplicaciones. En i simplemente funciona y punto.
El objetivo del monitoreo del rendimiento de la base de datos es minimizar el tiempo de respuesta de las consultas haciendo el mejor uso posible de los recursos del sistema, minimizando el tráfico de red, lecturas y escrituras de disco y tiempo de CPU.
El objetivo se cumple teniendo un conocimiento de la estructura lógica y física de los datos, entendiendo las aplicaciones usadas en el sistema y entendiendo que conflictos de la base de datos alteran su rendimiento.
La mejor forma de evitar problemas de rendimiento es hacer que se tome en cuenta dentro de las actividades de desarrollo y diseño de sistemas.
La ventaja del
DB2 es una sola familia, y es una de las bases de datos más utilizadas en el mundo. Se ubica en el puesto numero 6 de popularidad de bases de datos.
Asesor de Índices : que permite en base a las estadísticas (uso, cardinalidad, etc.), sugerir la creación de índices para mejorar las consultas.
Antememoria de Planes SQL: que permite el monitoreo de la actividad SQL en el Sistema.
Instantáneas de antememoria de Planes SQL : que permite capturar para un análisis posterior la actividad SQL conforme criterios a ser establecidos.
Supervisores de eventos de antememoria de planes SQL : que permite capturar información en base a eventos (usuario que ejecuto una consulta)
Visual Explain : Detalla de forma gráfica la selección de datos en una consulta
Supervisores de rendimiento : captura información de proceso de la base de datos para un análisis posterior
Hacer la demostración con el client access.
Asesor de Índices : que permite en base a las estadísticas (uso, cardinalidad, etc.), sugerir la creación de índices para mejorar las consultas.
Antememoria de Planes SQL: que permite el monitoreo de la actividad SQL en el Sistema.
Instantáneas de antememoria de Planes SQL : que permite capturar para un análisis posterior la actividad SQL conforme criterios a ser establecidos.
Supervisores de eventos de antememoria de planes SQL : que permite capturar información en base a eventos (usuario que ejecuto una consulta)
Visual Explain : Detalla de forma gráfica la selección de datos en una consulta
Supervisores de rendimiento : captura información de proceso de la base de datos para un análisis posterior
Para que los Querys aparezcan dnetro del Visual Explain usar:
STRQMQRY QMQRY(SIGEDAT/APSISES) OUTPUT(*PRINT) ALWQRYDFN(*YES)
Hacer la demostración con el client access.
Probar el STRQMQRY para correr una consulta Query400 dentro del optimizador y visualizarlo en el iSeries Navigator.
Radix index: Indice basado en arbol B.
EVI Index: Indice basado en vector. Usado para optimizar consultas cuando un campo tiene pocos valores posibles o cardinalidades en comparación a la cantidad de registros. Por ejemplo estados de un registro.
En el caso de optimizaciones no es lo mismo preparar un cursor para recuperar 1 solo dato que varios datos. Internamente el Gestor de la base de datos prepara buffers internos para recibir más información por lo tanto se
Revisar la logica de lectura si aparece el mensaje
Navigation filters: Start from: FirstRecord Loop while: NotEndOfTable
Join location: Client
warning: spc0053: Conditional constraint XXXXX cannot be generated in group starting at line NN. Changed to standard constraint.
Tomar como ejemplo los siguientes objetos :
Se toma como ejemplo el programa wIn2MBOG que ocupa en algunos casos hasta el 11% del CPU
wIn2MBOG Fue reportado por el juan. Analizar lo que se ha encontrado.
PObtPermisos que utiliza funciones upper en la busqueda. Demostrar el fuente como se generan busquedas contra toda la base de datos.
En el caso del programa, se buscan todos los registros de ISIGA3 y por cada registro busca en SIGAP1 hasta que se cumpla la condición. En el peor de los casos son 90711 registros en la primera tabla y 641 en la segunda tabla. Esto se puede mejorar cambiando la lógica o haciendo que PgmName y UsrName sean mayusculas.
pC2CtroMJ Lógica de la linea 44. Mejorar la logica para evitar el join por cliente. No es muy critico pero sirve de ejemplo
Revisar la logica de lectura si aparece el mensaje
Navigation filters: Start from: FirstRecord Loop while: NotEndOfTable
Join location: Client
warning: spc0053: Conditional constraint XXXXX cannot be generated in group starting at line NN. Changed to standard constraint.
Tomar como ejemplo los siguientes objetos :
Se toma como ejemplo el programa wIn2MBOG que ocupa en algunos casos hasta el 11% del CPU
wIn2MBOG Fue reportado por el juan. Analizar lo que se ha encontrado.
PObtPermisos que utiliza funciones upper en la búsqueda. Demostrar el fuente como se generan búsquedas contra toda la base de datos.
En el caso del programa, se buscan todos los registros de ISIGA3 y por cada registro busca en SIGAP1 hasta que se cumpla la condición. En el peor de los casos son 90711 registros en la primera tabla y 641 en la segunda tabla. Esto se puede mejorar cambiando la lógica o haciendo que PgmName y UsrName sean mayusculas.
pC2Prms Revisar la lógica. Al cambiarse al Standard Constraint se hace un recorrido sobre ISIGA3 (90000 registros) condicionados por el IdApp, sobre todos esos datos se aplica la lógica mediante comparaciones de variables. Lo ideal sería que se lea directamente sobre un indice. En conclusión debería verificarse la lógica.
pC2CtroMJ Lógica de la línea 44. Mejorar la lógica para evitar el join por cliente. No es muy critico pero sirve de ejemplo