sql tuning without trying arup nanda ls
TRANSCRIPT
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.
Optimización de SQL sin esfuerzo2
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
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
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
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
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
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
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
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
<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
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
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.
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
• 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
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
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
Optimización automática de SQL
Optimización de SQL sin esfuerzo18
Optimización de SQL sin esfuerzo19
Optimización de SQL sin esfuerzo20
Muestra la comparación de planes antes y después del Perfil de SQL
Comparación de mejoras
Optimización de SQL sin esfuerzo21
Comparación de planes
Optimización de SQL sin esfuerzo22
Muestra que los pasos del plan son diferentes como resultado del Perfil de
SQL
Planes alternativos
Optimización de SQL sin esfuerzo23
Crea una LÍNEA DE BASE
¿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
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
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
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
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
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
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
¿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
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
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
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
Preguntas y respuestas
Blog: arup.blogspot.comTweeter: @ArupNandaFacebook.com/ArupKNanda
35Optimización de SQL sin esfuerzo
Copyright © 2014, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 36