Page 1
Copyright © 2014, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. |
Optimización de SQL sin esfuerzo
Arup NandaPrincipal Database ArchitectStarwood HotelsMarzo de 2016
Aguarde un momento por favor. La sesión comenzará en breve en el horario señalado en el programa. Muchas gracias.
Page 2
Optimización de SQL sin esfuerzo2
Page 3
Optimización de SQL sin esfuerzo3
El desarrollador debería haberse ocupado de esto.
¿Por qué el DBA no es consciente de este problema?
El DBA revisará todas las consultas y las aprobará.
DBA Desarrollador Gerente
Page 4
Por qué un buen sistema SQL empieza a funcionar mal...
• Estadísticas inexistentes, incompletas o inexactas• Indexación inadecuada o inexistente• Errores de sintaxis
– WHERE COL1+20 = COL2– WHERE UPPER(COL1) = ‘XYZ’
Optimización de SQL sin esfuerzo4
Page 5
Por qué un buen sistema SQL empieza a funcionar mal
• Gran demanda de búferes de datos• Bind peeking [inspección de variables de enlace]• Actualizaciones, revisiones
Optimización de SQL sin esfuerzo5
Page 6
Soluciones...
• Agregar o corregir índices– Índice inexistente– ¿Es adecuado el índice de árbol B? ¿El de mapa de bits? ¿Uno
único?• Reescribir el código SQL
– P. ej. col1+10=:v1 se reemplaza por col1=:v1-10– De combinación de bucle anidado a combinación hash
Optimización de SQL sin esfuerzo6
Page 7
Soluciones
• Reducir la cantidad de E/S– Vistas materializadas– Trabajo con particiones
• Recopilar estadísticas precisas• Incorporar hints [sugerencias]• Crear outlines [esquemas descriptivos]
Optimización de SQL sin esfuerzo7
Page 8
Desafíos...• No es fácil determinar por qué los planes no funcionan, por
lo menos no rápidamente• Se requieren competencias de desarrollo
– No alcanzan las competencias habituales del DBA• Son muchas las instrucciones para optimizar• Tiempo
– Casi siempre se aplica un enfoque reactivo– Hágalo ahora. Bajo presión.
Optimización de SQL sin esfuerzo8
Page 9
Desafíos
• No forma parte del ciclo de implementación de aplicaciones• El código no puede modificarse, no hay hints• Pruebas insuficientes
– Tiempo– Recursos
Optimización de SQL sin esfuerzo9
Page 10
Perfil de SQL
Los hints se agregan automáticamente a las consultasSe cuenta con más información sobre los objetos, datos, etc., a los que se accede
Optimización de SQL sin esfuerzo10
Page 11
<outline_data>
<hint><![CDATA[BEGIN_OUTLINE_DATA]]></hint>
<hint><![CDATA[IGNORE_OPTIM_EMBEDDED_HINTS]]></hint>
<hint><![CDATA[OPTIMIZER_FEATURES_ENABLE('11.2.0.3')]]></hint>
<hint><![CDATA[DB_VERSION('11.2.0.3')]]></hint>
<hint><![CDATA[OPT_PARAM('optimizer_dynamic_sampling' 7)]]></hint>
<hint><![CDATA[ALL_ROWS]]></hint>
<hint><![CDATA[OUTLINE_LEAF(@"SEL$2")]]></hint>
<hint><![CDATA[OUTLINE_LEAF(@"SEL$1")]]></hint>
<hint><![CDATA[NO_ACCESS(@"SEL$1" "from$_subquery$_001"@"SEL$1")]]></hint>
<hint><![CDATA[INDEX_RS_ASC(@"SEL$2" "CH"@"SEL$2" (“T1".“COL1“ “T1".“COL2“ “T1".“COL3"))]]></hint>
<hint><![CDATA[OPT_ESTIMATE(@”SEL$1″, TABLE, “T”@”SEL$1″, SCALE_ROWS=0.15")]]></hint>
<hint><![CDATA[END_OUTLINE_DATA]]></hint>
</outline_data> Optimización de SQL sin esfuerzo11
Page 12
Cómo selecciona un perfil Oracle
Optimización de SQL sin esfuerzo12
perfil1 perfil235 seg. 17 seg. El perfil 2 es mejor
perfil1 perfil2No termina nunca
17 seg. Ejecución riesgosa
perfil1
perfil2
35 seg.
17 seg.
El perfil 2 es mejorEjecución
en paralelo
Page 13
Optimización de SQL sin esfuerzo13
perfil1 perfil2
No termina No hay ganador
15 seg.
No termina
perfil1 perfil2
No termina El perfil 2 es
mejor30 seg.
Termina tras 17 seg.
30 seg.
15 seg.
Page 14
Cómo incorporar perfiles de SQL
• SQL Tuning Advisor– Herramienta incorporada para optimización de SQL– Puede proponer alternativas, algunas muy buenas
Optimización de SQL sin esfuerzo14
Page 15
• La herramienta STA propone:– Índices– Posibilidades de reescritura– Vistas materializadas– Trabajo con particiones
Optimización de SQL sin esfuerzo15
– Estadísticas– Perfiles de SQL– Líneas de base
Page 16
SQL Tuning Advisor• Desde el menú superior -> Administration [administración] -
> Oracle Scheduler - > Automated Maintenance Tasks [tareas de mantenimiento automatizado]
Optimización de SQL sin esfuerzo16
Page 17
Funcionamiento automático• Funcionamiento automático desde Oracle 11g• O, desde el menú superior -> Performance [rendimiento] ->
Advisor Home [página principal de Advisor] -> SQL Advisors
Optimización de SQL sin esfuerzo17
Page 18
Optimización automática de SQL
Optimización de SQL sin esfuerzo18
Page 19
Optimización de SQL sin esfuerzo19
Page 20
Optimización de SQL sin esfuerzo20
Muestra la comparación de planes antes y después del Perfil de SQL
Page 21
Comparación de mejoras
Optimización de SQL sin esfuerzo21
Page 22
Comparación de planes
Optimización de SQL sin esfuerzo22
Muestra que los pasos del plan son diferentes como resultado del Perfil de
SQL
Page 23
Planes alternativos
Optimización de SQL sin esfuerzo23
Crea una LÍNEA DE BASE
Page 24
¿Por qué solo se emplean ///perfiles automáticos?
• Se configuran rápidamente – crear un índice lleva tiempo
• No es necesario modificar el código SQL• Pruebas localizadas ///para SQL solamente -> brindan
eficacia• ¿No le gusta el resultado? Es fácil volver atrás.• Pueden ser privados, usando la categoría de optimización
de SQLOptimización de SQL sin esfuerzo
24
Page 25
Más sobre los perfiles automáticos
• Comportamiento predeterminado:– Se usa
MAINTENANCE_WINDOW_GROUP
– Los perfiles de SQL se generan pero no se implementan
Optimización de SQL sin esfuerzo25
Es posible configurar:– Si, cuándo, por cuánto
tiempo– Los recursos permitidos– Si los perfiles se aceptan
automáticamente– Cuántos perfiles se
implementan
Page 26
Perfiles de SQL o Líneas de basePerfil de SQL Línea de base
Enfoque reactivo Enfoque proactivo
Mal plan. Se aplica una solución Buen plan. Se ///fija el plan.
Funcionamiento: almacena información adicional sobre cardinalidad
Funcionamiento: almacena el plan; la cardinalidad no es el factor principal
Brinda datos adicionales a Optimizer Ayuda a Optimizer a elegir entre distintas opciones
No se contemplan planes específicos Solo set de planes
Cuando las modificaciones de datos son considerables, es el mejor enfoque
Cuando las modificaciones de datos son considerables, es difícil de utilizar
Una ejecución basta para generar un perfil Se necesita más de una ejecución para capturar la línea de base
Puede seguir siendo válido si se modifican las estructuras de acceso
Es posible que deje de ser válida si se modifican las estructuras de acceso
Optimización de SQL sin esfuerzo26
Page 27
Real-time SQL Monitoring
• Desde el menú de SQL, ///Plan– Monitorea automáticamente procesos SQL de ejecución
prolongada– Muestra las estadísticas y los recursos que se utilizan en cada
paso del plan – Muestra la cardinalidad real en cada paso, ayuda a resolver
problemas relativos a estimaciones de cardinalidad poco satisfactorias
Optimización de SQL sin esfuerzo27
Page 28
Real-time SQL Monitoring
• Expone estadísticas de monitoreo– Nivel de funcionamiento del plan– Nivel de ejecución en paralelo– E/S, CPU, memoria, red– Exadata Smart Scan
Optimización de SQL sin esfuerzo28
Herramienta muy útil:Listados activos
Page 29
Listados activos sin EM
• Funciones incorporadas que devuelven listados como objetos CLOB– SQL Details dbms_perf.report_session– SQL Monitor dbms_sqltune.report_sql_monitor_list– SQL Performance Analyzer
dbms_sqlpa.report_analysis_task– Performance Hub dbms_perf.report_perfhub
Optimización de SQL sin esfuerzo29
Page 30
Listados activos en un ejemplo de SQL
set pages 0 linesize 32767 trimspool on set long 1000000 longchunksize 10000000 spool rep.html select dbms_perf.report_perfhub (is_realtime=>1, type=>'active') from dual;
Optimización de SQL sin esfuerzo30
Page 31
¿No le gusta la interfaz GUI?• Paquetes de funciones DBMS_SQLTUNE
Optimización de SQL sin esfuerzo31
Función DescripciónCREATE_TUNING_TASK Crea una tarea de optimización
• Para una única rutina de SQL, un grupo de rutinas de SQL• Para texto de SQL, o SQL_ID• Desde un set de optimización de SQL
EXECUTE_TUNING_TASK Ejecuta la tarea• Los parámetros se definen aquí
REPORT_TUNING_TASK Informa los resultadosSCRIPT_TUNING_TASK Implementa los resultados. Crea una rutina que se implementará en SQL*Plus
Page 32
Optimización automática sin interfaz GUI• Paquete DBMS_AUTO_SQLTUNE
Optimización de SQL sin esfuerzo32
Función DescripciónSET_AUTO_TUNING_TASK_PARAMETER Modifica los parámetros predeterminadosEXECUTE_AUTO_TUNING_TASK Ejecuta la tarea
• Los parámetros se definen aquíREPORT_AUTO_TUNING_TASK Informa los resultados
Page 33
Origen del set de optimización
Optimización de SQL sin esfuerzo33
Origen Cómo obtenerlo
Espacio compartido SELECT_CURSOR_CACHE ()
De un repositorio AWR SELECT_WORKLOAD_REPOSITORY ()
Archivos de seguimiento de Oracle SELECT_SQL_TRACE ()
Resultados de comparación de tareas de SQL Performance Analyzer
SELECT_SQLPA_TASK ()
Otro set de optimización de SQL SELECT_SQLSET ()
Todas las funciones están en el paquete DBMS_SQLTUNE
Page 34
Para llevar• Active SQL Tuning Advisor para que se ejecute automáticamente• Desactive la aplicación automática de los perfiles de SQL• Consulte las recomendaciones y aplíquelas desde una pantalla
– En bases de datos pequeñas, quizá desee activar la aplicación automática de perfiles
• Emplee Real-time Monitoring para identificar problemas en pasos específicos
• Genere listados activos para explicar problemas de las bases de datos
Optimización de SQL sin esfuerzo34
Page 35
Preguntas y respuestas
Blog: arup.blogspot.comTweeter: @ArupNandaFacebook.com/ArupKNanda
35Optimización de SQL sin esfuerzo
Page 36
Copyright © 2014, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 36