sql tuning without trying arup nanda ls

36
Copyright © 2014, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | Optimización de SQL sin esfuerzo Arup Nanda Principal Database Architect Starwood Hotels Marzo de 2016 Aguarde un momento por favor. La sesión comenzará en breve en el horario señalado en el programa. Muchas gracias.

Upload: cjava-peru

Post on 15-Apr-2017

252 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

Optimización de SQL sin esfuerzo2

Page 3: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

<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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

• 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 without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

Optimización automática de SQL

Optimización de SQL sin esfuerzo18

Page 19: Sql tuning without trying   arup nanda ls

Optimización de SQL sin esfuerzo19

Page 20: Sql tuning without trying   arup nanda ls

Optimización de SQL sin esfuerzo20

Muestra la comparación de planes antes y después del Perfil de SQL

Page 21: Sql tuning without trying   arup nanda ls

Comparación de mejoras

Optimización de SQL sin esfuerzo21

Page 22: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

Planes alternativos

Optimización de SQL sin esfuerzo23

Crea una LÍNEA DE BASE

Page 24: Sql tuning without trying   arup nanda ls

¿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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

¿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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

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: Sql tuning without trying   arup nanda ls

Preguntas y respuestas

Blog: arup.blogspot.comTweeter: @ArupNandaFacebook.com/ArupKNanda

35Optimización de SQL sin esfuerzo

Page 36: Sql tuning without trying   arup nanda ls

Copyright © 2014, Oracle y/o sus compañías afiliadas. Todos los derechos reservados. | 36