Sei sulla pagina 1di 52

Optimizacin del Rendimiento de las Consultas

Contenido Introduccin Introduccin al optimizador de consultas Obtencin de informacin del plan de ejecucin Uso de un ndice para abarcar una consulta Estrategias de indizacin Suplantacin del optimizador de consultas 1 2 13 25 36 43

Optimizacin del Rendimiento de las Consultas

Notas para el instructor


Este mdulo proporciona a los alumnos conocimientos avanzados acerca del funcionamiento del optimizador de consultas y la obtencin de informacin del plan de ejecucin. Se describe cmo crear ndices que abarcan consultas, qu estrategias de ndices se pueden implementar para reducir las operaciones de entrada y salida (E/S) y si es conveniente suplantar el optimizador de consultas. En la prctica los alumnos utilizarn el plan de ejecucin grfico, recopilarn informacin de consultas y vern el resultado del optimizador de consultas. Tambin vern informacin de ndices y la utilizarn para observar cmo el optimizador de consultas optimiza una consulta y aplica las sugerencias del optimizador. Despus de completar este mdulo, los alumnos sern capaces de:

Explicar la funcin del optimizador de consultas y cmo asegura la optimizacin de las consultas. Utilizar diversos mtodos para obtener informacin del plan de ejecucin de forma que puedan determinar cmo se proces una consulta en el optimizador de consultas y comprobar que se gener el plan de ejecucin ms efectivo. Crear ndices que abarcan consultas. Identificar estrategias de indizacin que reduzcan el nmero de lecturas de pgina. Evaluar cundo se debe suplantar el optimizador de consultas.

Optimizacin del Rendimiento de las Consultas

Introduccin
Objetivo del tema
Proporcionar una introduccin a los temas y objetivos del mdulo.

Introduccin al optimizador de consultas Obtencin de informacin del plan de ejecucin Uso de un ndice para abarcar una consulta Estrategias de indizacin Suplantacin del optimizador de consultas

Explicacin previa

En este mdulo aprender cmo el optimizador de consultas utiliza los ndices y dems informacin para determinar cul es el mtodo ms eficaz para tener acceso a los datos.

En este mdulo se describe cmo el optimizador de consultas utiliza los ndices y dems informacin para determinar cul es el mtodo ms eficaz para tener acceso a los datos. Despus de completar este mdulo, el alumno ser capaz de:

Explicar la funcin del optimizador de consultas y cmo asegura la optimizacin de las consultas. Utilizar diversos mtodos para obtener informacin del plan de ejecucin de forma que pueda determinar cmo se proces una consulta en el optimizador de consultas y comprobar que se gener el plan de ejecucin ms efectivo. Crear ndices que abarcan consultas. Identificar estrategias de indizacin que reduzcan las lecturas de pginas. Evaluar cundo se debe suplantar el optimizador de consultas.

Optimizacin del Rendimiento de las Consultas

Introduccin al optimizador de consultas


Objetivo del tema
Presentar los temas de esta seccin.

Explicacin previa

Funcin del optimizador de consultas Cmo utiliza el optimizador de consultas la optimizacin basada en el costo Cmo funciona el optimizador de consultas Fases de la optimizacin de consultas Almacenamiento en cach del plan de ejecucin Establecimiento de un lmite de costo

En esta seccin trataremos el optimizador de consultas y su funcionamiento.

Conocer el funcionamiento del optimizador de consultas le prepara para crear ndices tiles, escribir consultas eficaces y optimizar las consultas que presentan un rendimiento insuficiente.

Optimizacin del Rendimiento de las Consultas

Funcin del optimizador de consultas


Objetivo del tema
Presentar el optimizador de consultas

Determina el plan de ejecucin ms eficaz


Explicacin previa

El optimizador de consultas es el componente encargado de generar el plan de ejecucin ptimo para una consulta.

Determinar la existencia de ndices y evaluar su utilidad Determinar los ndices o las columnas que se pueden utilizar Determinar cmo procesar las combinaciones Uso de evaluacin basada en costos de alternativas

Creacin de estadsticas de columnas Utiliza informacin adicional Produce un plan de ejecucin

El optimizador de consultas es el componente encargado de generar el plan de ejecucin ptimo para una consulta.

Determina el plan de ejecucin ms eficaz


El optimizador de consultas evala cada una de las instrucciones de Transact-SQL y decide cul es el plan de ejecucin ms eficaz. Calcula la entrada y salida (E/S) que se necesita para procesar una consulta mediante:

La determinacin de la existencia de ndices y la evaluacin de su utilidad para una consulta. La determinacin de los ndices o las columnas que se pueden utilizar para reducir el nmero de filas examinadas por la consulta. Mediante la reduccin del nmero de filas examinadas, se reduce la cantidad de E/S, lo que aumenta el rendimiento de las consultas. La determinacin de la estrategia ms eficaz para procesar las operaciones de combinacin, como el orden de combinacin de las tablas y la estrategia de combinacin que se va a utilizar. El uso de evaluacin basada en costos de alternativas para seleccionar el plan ms eficaz para una consulta determinada. La creacin de estadsticas de columnas para mejorar el rendimiento de la consulta.

Optimizacin del Rendimiento de las Consultas

Utiliza informacin adicional


El optimizador de consultas utiliza informacin adicional acerca de los datos subyacentes y las estructuras de almacenamiento, el tamao de los archivos y los tipos de estructuras de los archivos. Tambin utiliza varias de sus propias operaciones internas, como la creacin de ndices o tablas temporales en la memoria, para mejorar el rendimiento de las consultas.

Produce un plan de ejecucin


El optimizador de consultas produce un plan de ejecucin que describe la secuencia de pasos necesarios para llevar a cabo una consulta. Optimiza el proceso de bsqueda, combinacin, agrupacin y ordenacin de las filas.

Optimizacin del Rendimiento de las Consultas

Cmo utiliza el optimizador de consultas la optimizacin basada en el costo


Objetivo del tema
Describir la optimizacin basada en el costo.

Explicacin previa

Limita el nmero de planes de optimizacin


El optimizador de consultas se basa en el costo, lo que significa que calcula el costo de ejecutar un plan de ejecucin para evaluarlo.

El costo se estima en trminos de E/S y costo de CPU Utilice operadores fsicos y secuencia de operaciones Utilice procesos paralelos y en serie

Determina el tiempo de procesamiento de las consultas


El optimizador de consultas se basa en el costo, lo que significa que calcula el costo de ejecutar un plan de ejecucin para evaluarlo. Nota El clculo de los costos slo puede ser tan preciso como permitan los datos estadsticos disponibles acerca de las columnas, ndices y tablas.

Limita el nmero de planes de optimizacin


Para llevar a cabo la ejecucin en una cantidad de tiempo razonable, el optimizador de consultas limita el nmero de planes de optimizacin que tiene en cuenta. Mediante la evaluacin de las secuencias de las operaciones relacionales necesarias para generar el conjunto de resultados, el optimizador de consultas crea un plan de ejecucin que tiene el costo ms bajo calculado en lo que se refiere a la E/S y a la prdida de recursos de la CPU.

Determina el tiempo de procesamiento de las consultas


El rendimiento de las consultas est determinado por los operadores fsicos que utiliza el optimizador de consultas y la secuencia de procesamiento de las operaciones. El objetivo es reducir:

El nmero de filas devueltas. El nmero de pginas ledas. El tiempo de procesamiento global mediante la reduccin del uso de recursos de E/S y CPU para un plan de ejecucin.

Optimizacin del Rendimiento de las Consultas

Cuando el optimizador optimiza las consultas, no inicia el plan de ejecucin con la menor prdida de recursos sino que elige el plan de ejecucin que devuelve los resultados al usuario de la forma ms rpida con una reduccin de recursos razonable. Nota Si Microsoft SQL Server 2000 tiene varios procesadores disponibles, el optimizador de consultas puede dividir la consulta entre ellos. Las consultas de duracin prolongada suelen beneficiarse de planes de ejecucin paralelos, pero una consulta en paralelo puede utilizar, en general, ms recursos que el procesamiento de una consulta en serie.

Optimizacin del Rendimiento de las Consultas

Cmo funciona el optimizador de consultas


Objetivo del tema
Presentar cmo procesa el optimizador de consultas una consulta despus de que se emite a SQL Server.
Transact-SQL Transact-SQL Proceso Procesode deanlisis anlisis

Explicacin previa

Proceso Procesode deestandarizacin estandarizacin

Despus de emitir una consulta, tienen lugar varios pasos que transforman la consulta original en un formato que el optimizador de consultas puede interpretar.

Optimizacin Optimizacinde dela laconsulta consulta

Compilacin Compilacin Rutinas Rutinasde deacceso accesoa a bases basesde dedatos datos
Conjunto Conjunto de de resultados resultados

Sugerencia

Explique cmo contribuye cada paso al proceso de transformacin de la consulta original en un formato que puede interpretar el optimizador de consultas.

Despus de emitir una consulta, tienen lugar varios pasos que transforman la consulta original en un formato que el optimizador de consultas puede interpretar.

Proceso de anlisis
El proceso de anlisis comprueba la sintaxis de la consulta entrante y divide la sintaxis en partes a las que puede responder el motor de base de datos relacional. El resultado de este paso es un rbol de la consulta analizada.

Proceso de estandarizacin
El proceso de estandarizacin convierte una consulta a un formato til para la optimizacin. Las clusulas de sintaxis redundantes que se detectan se quitan. Se estandarizan las subconsultas, si es posible. El resultado de este paso es un rbol de la consulta estandarizada.

Optimizacin de la consulta
El proceso de seleccin de un plan de ejecucin entre varios posibles se denomina optimizacin. En esta fase estn implicados numerosos pasos. Sin embargo, los pasos siguientes son los que tienen mayor efecto en el costo del plan de ejecucin: anlisis de la consulta, seleccin de ndices y seleccin de la combinacin.

Compilacin
La consulta se compila en cdigo ejecutable.

Rutinas de acceso a bases de datos


El optimizador de consultas determina el mejor mtodo para tener acceso a los datos, mediante la ejecucin de un recorrido de tabla o mediante el uso de un ndice disponible. Despus se aplica el mejor mtodo.

Optimizacin del Rendimiento de las Consultas

Fases de la optimizacin de consultas


Objetivo del tema
Presentar las fases por las que atraviesa la optimizacin de consultas.

Anlisis de la consulta

Explicacin previa

El proceso de optimizacin de consultas consta de tres fases.

Identifica los criterios de bsqueda y combinacin de la consulta Determina si existe algn ndice Produce una valoracin de la utilidad del ndice o ndices Evala qu estrategia de combinacin se va a utilizar

Seleccin de ndices

Seleccin de la combinacin

El proceso de optimizacin de consultas consta de tres fases. Estas fases no son pasos de procesamiento distintos y slo se utilizan para representar conceptualmente la actividad interna del optimizador de consultas.

Anlisis de la consulta
La primera fase de optimizacin de las consultas se denomina anlisis de la consulta. En esta fase, el optimizador identifica los criterios de bsqueda y combinacin de la consulta. Mediante la limitacin de la bsqueda, el optimizador de consultas reduce al mnimo el nmero de filas que se procesan. La reduccin del nmero de filas procesadas reduce el nmero de pginas de ndices y datos ledas.

Seleccin de ndices
La seleccin de ndices es la segunda fase de la optimizacin de las consultas. Durante esta fase, el optimizador de consultas detecta si existe un ndice para las clusulas identificadas. Despus, se produce una valoracin de la utilidad del ndice o ndices. La utilidad de un ndice est determinada por la cantidad de filas que se devolvern. Esta informacin se obtiene de las estadsticas del ndice o las estadsticas de la columna. Se realiza un clculo del costo de diversos mtodos de acceso mediante el clculo de las lecturas de pginas fsicas y lgicas necesarias para buscar las filas correctas.

Seleccin de la combinacin
La seleccin de la combinacin es la tercera fase de la optimizacin de las consultas. Si hay una consulta de varias tablas o autocombinacin, se evala la estrategia de combinacin que se va a utilizar. La determinacin de la estrategia de combinacin que se va a utilizar consiste en considerar una serie de factores: selectividad, densidad y memoria requerida para procesar la consulta.

Optimizacin del Rendimiento de las Consultas

Almacenamiento en cach del plan de ejecucin


Objetivo del tema
Describir cmo se administran los planes de ejecucin en la cach y cmo la reduccin de compilaciones del plan puede mejorar el rendimiento.

Almacenamiento de un plan de ejecucin en la memoria


Una copia para todas las ejecuciones en serie Otra copia para todas las ejecuciones en paralelo Se vuelve a utilizar un plan de ejecucin existente, si lo hay Se genera un plan de ejecucin nuevo, si no existe uno Los cambios en la base de datos pueden hacer que el plan de ejecucin sea ineficaz o deje de ser vlido

Uso de un contexto de ejecucin


Explicacin previa

SQL Server tiene un bloque de memoria que se utiliza para almacenar los planes de ejecucin y los bferes de datos.

Recompilacin de planes de ejecucin


SQL Server tiene un bloque de memoria que se utiliza para almacenar los planes de ejecucin y los bferes de datos. El porcentaje del bloque de memoria asignado a los planes de ejecucin o los bferes de datos vara dinmicamente, en funcin del estado del sistema. La parte del bloque de memoria que se utiliza para almacenar los planes de ejecucin se denomina cach de procedimientos.

Almacenamiento de un plan de ejecucin en la memoria


La mayor parte del plan de ejecucin es una estructura de datos reutilizable y de slo lectura que puede ser utilizada por un nmero cualquiera de usuarios. No se almacena ningn contexto de usuario en el plan de ejecucin. Nunca hay ms de dos copias del plan de ejecucin en la memoria:

Una copia para todas las ejecuciones en serie. Otra copia para todas las ejecuciones en paralelo. La copia en paralelo cubre todas las ejecuciones en paralelo, con independencia de su grado de paralelismo.

Uso de un contexto de ejecucin


Cada usuario que ejecuta una consulta tiene una estructura de datos que contiene los datos especficos de una ejecucin como son los valores de los parmetros. Esta estructura de datos se denomina contexto de ejecucin. Cuando se ejecuta una instruccin de Transact-SQL, SQL Server explora la cach de procedimientos para determinar si hay un plan de ejecucin para esa instruccin.

Si lo hay, SQL Server lo vuelve a utilizar. As se ahorra el trabajo de volver a compilar la instruccin de Transact-SQL.

Si no hay un plan de ejecucin, SQL Server genera uno nuevo para la consulta.

10

Optimizacin del Rendimiento de las Consultas

Recompilacin de planes de ejecucin


Ciertos cambios en una base de datos pueden hacer que un plan de ejecucin sea ineficaz o deje de ser vlido. Cuando SQL Server detecta cambios que invalidan un plan de ejecucin, lo marca como no vlido. Se compila un nuevo plan de ejecucin para la siguiente conexin que ejecute la consulta. Importante Se puede mejorar el rendimiento si se reduce el nmero de veces que se vuelve a compilar un plan. Algunas condiciones que invalidan un plan de ejecucin son:

Los cambios estructurales realizados en una tabla o vista a la que hace referencia la consulta (instrucciones ALTER TABLE y ALTER VIEW). Generacin de nuevas estadsticas de distribucin, bien de forma explcita a partir de una instruccin, como en UPDATE STATISTICS, o automticamente. Eliminacin de un ndice usado por el plan de ejecucin. Una llamada explcita al procedimiento almacenado del sistema sp_recompile. Gran cantidad de cambios en las claves, o instrucciones INSERT o DELETE, en una tabla a la que hace referencia la consulta. En las tablas con desencadenadores, un aumento considerable del nmero de filas en las tablas inserted o deleted.

Nota SQL Server utiliza un algoritmo de caducidad para administrar con eficacia los planes de ejecucin de la cach y evala el costo y el uso del plan de ejecucin.

Optimizacin del Rendimiento de las Consultas

11

Establecimiento de un lmite de costo


Objetivo del tema
Presentar el regulador de consultas.

Explicacin previa

Especificacin de un lmite mximo


Puede ser conveniente establecer un lmite para controlar el costo de ejecutar una consulta.

Utilice el regulador de consultas para evitar que se ejecuten consultas que tarden mucho tiempo y usen muchos recursos del sistema Use el procedimiento almacenado sp_configure Ejecute la instruccin SET QUERY_GOVERNOR_COST_LIMIT Especifique 0 para desactivar el regulador de consultas

Especificacin de lmites de conexin


Puede ser conveniente establecer un lmite para controlar el costo de ejecutar una consulta. El trmino costo de la consulta se refiere al clculo del tiempo transcurrido, en segundos, necesario para ejecutar una consulta en una configuracin de hardware especfica.

Especificacin de un lmite mximo


Puede utilizar la opcin query governor cost limit para evitar que se ejecuten consultas que tarden mucho tiempo y usen muchos recursos del sistema. De forma predeterminada, las consultas tienen permiso para ejecutarse, sin importar el tiempo que tarden. El regulador de consultas utiliza un clculo del costo para evitar que se ejecuten consultas con un costo elevado. Aunque el valor de configuracin se especifica en segundos, no se corresponde realmente con el tiempo, sino con el costo real calculado de la consulta. Puede especificar un lmite mximo para el costo de la consulta que se va a ejecutar. Como el regulador de consultas se basa en el clculo del costo de la consulta, en lugar del tiempo real transcurrido, no se procesa en tiempo de ejecucin. Si el costo calculado de una consulta es mayor que el lmite especificado, la instruccin del regulador de consultas impide que se ejecute la consulta. Esto es ms eficaz que permitir la ejecucin de una consulta hasta que se alcanza un lmite definido previamente y, despus, detenerla.

12

Optimizacin del Rendimiento de las Consultas

Especificacin de lmites de conexin


Se pueden especificar lmites para todas las conexiones o slo las consultas de una conexin determinada. Para aplicar los lmites de costo del regulador de consultas, puede:

Utilizar el procedimiento almacenado sp_configure para aplicar lmites a todas las conexiones. Puede cambiar el lmite de costo del regulador de consultas slo cuando show advanced options est configurado a 1. La configuracin tiene efecto inmediato. No tiene que detener y reiniciar el servidor.

Ejecutar la instruccin SET QUERY_GOVERNOR_COST_LIMIT para aplicar lmites para una conexin determinada. Especificar 0 (predeterminado) para desactivar el regulador de consultas. En este caso, todas las consultas se ejecutan sin lmites.

Optimizacin del Rendimiento de las Consultas

13

Obtencin de informacin del plan de ejecucin


Objetivo del tema
Presentar los temas de esta seccin.

Explicacin previa

Se puede obtener informacin acerca del plan de ejecucin mediante tres mtodos.

Presentacin de los resultados de las instrucciones STATISTICS Presentacin de los resultados de SHOWPLAN_ALL y SHOWPLAN_TEXT Presentacin grfica del plan de ejecucin

El optimizador de consultas responde a la informacin que tiene disponible al determinar el mejor plan de ejecucin. Se puede obtener informacin acerca del plan de ejecucin mediante la consulta de la tabla sysindexes. Tambin se puede obtener informacin mediante las instrucciones STATISTICS, las instrucciones SHOWPLAN y la presentacin grfica del plan de ejecucin.

14

Optimizacin del Rendimiento de las Consultas

Presentacin de los resultados de las instrucciones STATISTICS


Objetivo del tema
Describir la presentacin de los resultados estadsticos mediante las instrucciones STATISTICS.

Instruccin n Instrucci Instruccin STATISTICS STATISTICS TIME TIME STATISTICS STATISTICS PROFILE PROFILE

Ejemplo Ejemplode desalida salida


SQL SQL Server Server Execution Execution Times: Times: CPU CPU time time = =0 0 ms, ms, elapsed elapsed time time = =2 2 ms. ms. Rows StmtId Rows Executes Executes StmtText StmtText StmtId --------------------------------------------------------------------------------------------47 SELECT 16 47 1 1 SELECT * * FROM FROM [charge] [charge] 16 WHERE WHERE (([charge_amt]>=@1) (([charge_amt]>=@1) . . . . . . Table Table 'member'. 'member'. Scan Scan count count 1, 1, logical logical reads reads 23, 23, physical physical reads reads 0, 0, read-ahead read-ahead reads reads 0. 0.

Explicacin previa

Se pueden utilizar las instrucciones STATISTICS IO, STATISTICS TIME y STATISTICS PROFILE para obtener informacin que ayude a diagnosticar consultas de ejecucin prolongada.

STATISTICS STATISTICSIO IO

Se pueden utilizar las instrucciones STATISTICS IO, STATISTICS TIME y STATISTICS PROFILE para obtener informacin que ayude a diagnosticar consultas de ejecucin prolongada. Los resultados de las instrucciones STATISTICS proporcionan informacin acerca del plan de ejecucin real. STATISTICS TIME obtiene informacin acerca del nmero de milisegundos necesarios para analizar, compilar y ejecutar cada instruccin. STATISTICS PROFILE muestra la informacin de perfil de una instruccin. Al ejecutar una consulta, el conjunto de resultados incluye los resultados de la instruccin SHOWPLAN_ALL y dos columnas adicionales. En la tabla siguiente se muestran las columnas adicionales.
Columna Rows Executes Descripcin Nmero real de filas que produce cada operador Nmero de veces que se ejecut el operador

Optimizacin del Rendimiento de las Consultas

15

STATISTICS IO obtiene informacin acerca de la cantidad de lecturas de pginas generadas por las consultas. Los resultados de STATISTICS IO incluyen los valores de la tabla siguiente.
Valor Lecturas lgicas Descripcin Nmero de pginas ledas de la cach de datos Nmero de pginas ledas del disco Informacin adicional Se tiene acceso a todas las pginas en la cach de datos. Si una pgina no est disponible en la cach, se debe leer fsicamente del disco. Este valor siempre es menor o igual que el valor de lecturas lgicas. El mtodo que se utiliza para calcular el valor de Proporcin de aciertos de cach es el siguiente:
Proporcin de aciertos de cach = Lecturas lgicas Lecturas lgicas Lecturas fsicas

Lecturas fsicas

Lecturas anticipadas Nmero de exploraciones

Nmero de pginas colocadas en la cach Nmero de veces que se tuvo acceso a la tabla

Un nmero alto para este valor significa que el valor de lecturas fsicas es menor y la proporcin de aciertos de cach es mayor que si no estuviera habilitada la lectura anticipada. Las tablas externas de una combinacin izquierda siempre deben tener un nmero de exploraciones igual a 1. Para las tablas internas, el nmero de lecturas lgicas est determinado por el nmero de exploraciones multiplicado por el nmero de pginas a las que se tiene acceso en cada exploracin.

Nota Las instrucciones SET permanecen vigentes durante la sesin hasta que se especifica la opcin OFF o hasta que se termina la sesin.

16

Optimizacin del Rendimiento de las Consultas

Presentacin de los resultados de SHOWPLAN_ALL y SHOWPLAN_TEXT


Objetivo del tema
Describir el uso de las instrucciones SHOWPLAN.

Estructura de los resultados de la instruccin SHOWPLAN


Explicacin previa

Devuelven informacin en forma de un conjunto de filas Forman un rbol jerrquico Representan los pasos realizados por el optimizador de consultas Muestran un clculo de cmo se optimiz una consulta, no el plan de ejecucin real

Se puede obtener informacin detallada acerca de cmo se ejecutan las consultas y cuntos recursos se requieren para procesarlas mediante las instrucciones SET SHOWPLAN_TEXT y SET SHOWPLAN_ALL.

Detalles de los pasos de ejecucin Diferencia entre los resultados de SHOWPLAN_TEXT y SHOWPLAN_ALL

Se pueden utilizar las instrucciones SET SHOWPLAN_TEXT y SET SHOWPLAN_ALL para obtener informacin detallada acerca de cmo se ejecutan las consultas y cuntos recursos se requieren para procesarlas.

Estructura de los resultados de la instruccin SHOWPLAN


Los resultados de la instruccin SHOWPLAN:

Devuelven informacin en forma de un conjunto de filas. Forman un rbol jerrquico. Representan los pasos realizados por el optimizador de consultas para ejecutar cada instruccin. Muestran un clculo de cmo se optimiz una consulta, no el plan de ejecucin real. El clculo se basa en las estadsticas existentes.

Detalles de los pasos de ejecucin


Cada instruccin que se refleja en los resultados contiene una nica fila con el texto de la instruccin, seguido por varias filas con los detalles de los pasos de ejecucin. Algunos detalles de los pasos de ejecucin son:

Los ndices que se utilizan con cada tabla. El orden de combinacin de las tablas. La seleccin del modo de actualizacin. Las tablas de trabajo y dems estrategias.

Optimizacin del Rendimiento de las Consultas

17

Diferencia entre los resultados de SHOWPLAN_TEXT y SHOWPLAN_ALL


La diferencia entre los resultados de SHOWPLAN_TEXT y SHOWPLAN_ALL es que SHOWPLAN_ALL devuelve informacin adicional, como el clculo de filas, E/S, CPU y promedio de tamao de las filas de la consulta. Nota Las instrucciones SET permanecen vigentes durante la sesin hasta que se especifica la opcin OFF o hasta que se termina la sesin.

18

Optimizacin del Rendimiento de las Consultas

Presentacin grfica del plan de ejecucin


Objetivo del tema
Presentar los temas de este apartado.

Explicacin previa

Elementos del plan de ejecucin grfico Lectura de los resultados del plan de ejecucin grfico Uso de la operacin de consulta de marcadores

Se puede utilizar el Analizador de consultas SQL para ver grficamente un plan de ejecucin codificado con colores.

Se puede utilizar el Analizador de consultas SQL para ver grficamente un plan de ejecucin codificado con colores.

Optimizacin del Rendimiento de las Consultas

19

Elementos del plan de ejecucin grfico


Objetivo del tema
Presentar los elementos del plan de ejecucin grfico.

Explicacin previa

En el plan de ejecucin grfico, que contiene los elementos siguientes, se utilizan iconos para representar la ejecucin de partes especficas de las instrucciones y consultas.

Los pasos son unidades de trabajo que se utilizan para procesar una consulta La secuencia de pasos es el orden en que se procesan los pasos Los operadores lgicos describen la operacin algebraica relacional que se utiliza para procesar una instruccin Los operadores fsicos describen el algoritmo de implementacin fsica que se utiliza para procesar una instruccin

Sugerencia

Repase brevemente el icono, el operador fsico y la descripcin que utiliza el optimizador de consultas. A continuacin se ofrece una lista de los operadores fsicos.

En el plan de ejecucin grfico, que contiene los elementos siguientes, se utilizan iconos para representar la ejecucin de partes especficas de las instrucciones y consultas:

Los pasos son unidades de trabajo que se utilizan para procesar una consulta. La secuencia de pasos es el orden en que se procesan los pasos. Los operadores lgicos describen la operacin algebraica relacional que se utiliza para procesar una instruccin; por ejemplo, llevar a cabo una agregacin. En general, el operador lgico coincide con el operador fsico. No todos los pasos que se realizan para procesar una consulta o en operaciones de actualizacin implican operaciones lgicas. Los operadores fsicos describen el algoritmo de implementacin fsica que se utiliza para procesar una instruccin; por ejemplo, explorar un ndice agrupado. Cada paso de la ejecucin de una consulta o una operacin de actualizacin incluye un operador fsico.

20

Optimizacin del Rendimiento de las Consultas

La tabla siguiente contiene una lista parcial de los operadores fsicos que se utilizan para representar los algoritmos que utiliza el optimizador de consultas.
Icono Operador fsico Consulta de marcadores Filtro Coincidencia hash Recorrido de ndice Bsqueda en ndice Combinacin de mezcla Bucles anidados Orden Recorrido de tabla Descripcin del operador Utiliza un marcador (Id. de fila o clave de agrupacin) para consultar la fila correspondiente en la tabla o ndice agrupado Examina la entrada y slo devuelve las filas que cumplen la expresin del filtro que aparece en la columna argument Crea una tabla hash mediante el clculo de un valor hash para cada fila de informacin de generacin Recupera todas las filas del ndice no agrupado especificado en la columna argument Utiliza la capacidad de bsqueda de los ndices para recuperar filas de un ndice no agrupado Realiza todos los tipos de combinaciones (excepto autocombinacin y combinacin cruzada), incluidas las operaciones UNION Busca en la tabla interna cada una de las filas de la tabla externa, generalmente mediante un ndice Ordena todas las filas entrantes Recupera todas las filas de la tabla especificada en la columna argument

Nota Para ver la lista completa de iconos y obtener ms informacin, busque en mostrar grficamente el plan de ejecucin mediante el Analizador de consultas SQL en los Libros en pantalla de SQL Server.

Optimizacin del Rendimiento de las Consultas

21

Lectura de los resultados del plan de ejecucin grfico


Objetivo del tema
Describir cmo se leen los resultados del plan de ejecucin.
Plan de consulta

Secuencia de pasos Secuencia de pasos


Member.corp_no Costo: 9%

Explicacin previa

Los resultados del plan de ejecucin grfico se leen de derecha a izquierda y de arriba a abajo. Se muestra cada consulta del lote que se analiza; el costo de cada consulta se incluye como porcentaje del costo total del lote.

SELECT Consulta de marcadores Costo: 8% Costo: 0%

Raz de combinacin hash

Costo: 28% Filtro Costo: 0% Member.fname Costo: 10%

Bsqueda en ndice Recorre un intervalo de filas en particular desde un ndice no agrupado. Operacin fsica: Bsqueda en ndice Operacin lgica: Bsqueda en ndice Cuenta de filas: 414 Tamao estimado de fila: 24 Costo de E/S: 0,00706 Costo de CPU: 0,000605 Nmero de ejecuciones: 1,0 Costo: 0,007675(6%) Costo del subrbol: 0,00767 Argumento: OBJECT: ([credit].[dbo].[member].[fname]), SEEK: ([member],[firstname] >=Rb AND [member],[firstname] <T) ORDERED

Sugerencia

Mediante el Analizador de consultas SQL, active Mostrar plan de ejecucin y, despus, ejecute una consulta. En los resultados del plan de ejecucin, coloque el puntero en un icono para mostrar la informacin adicional acerca de esa operacin especfica.

Los resultados del plan de ejecucin grfico se leen de derecha a izquierda y de arriba a abajo. Se muestra cada consulta del lote que se analiza, lo que incluye el costo de cada consulta como porcentaje del costo total del lote. Cada paso puede tener uno o varios nodos para procesar. El trmino nodo se refiere a una operacin utilizada por el optimizador de consultas que se representa mediante un icono. El plan de ejecucin puede tener varios nodos para un paso determinado.

Cada nodo est relacionado con un nodo principal. Todos los nodos con el mismo nodo principal se especifican en la misma columna. Cada nodo se conecta con su nodo principal mediante puntas de flecha. Las operaciones recursivas se muestran con un smbolo de iteracin. Los operadores se muestran como smbolos relacionados con un principal especfico. Si el lote contiene varias instrucciones, se crean varios planes de ejecucin.

22

Optimizacin del Rendimiento de las Consultas

Describa brevemente los tipos de informacin detallada que se puede ver.

Sugerencia

Presentacin de informacin adicional


Al colocar el puntero en cada nodo (representado mediante un icono), se puede ver informacin detallada acerca de los operadores fsicos y lgicos, adems de la informacin de la tabla siguiente.
Medidas Cuenta de filas Tamao estimado de fila Costo de E/S Costo de CPU Nmero de ejecuciones Costo Descripcin El nmero de filas devueltas por el operador. El tamao estimado de la fila devuelta por el operador. El costo estimado de toda la actividad de E/S de la operacin. Este valor debe ser lo ms bajo posible. El costo calculado de toda la actividad de CPU de la operacin. El nmero de veces que se ejecut la operacin durante la consulta. El costo para el optimizador de consultas al ejecutar la operacin, que incluye el costo de esta operacin como porcentaje del costo total de la consulta. El costo total para el optimizador de consultas al ejecutar esta operacin y todas las operaciones anteriores en el mismo subrbol. Los predicados y parmetros utilizados por la consulta.

Costo del subrbol

Argumento

Optimizacin del Rendimiento de las Consultas

23

Uso de la operacin de consulta de marcadores


Objetivo del tema
Describir cmo el optimizador de consultas utiliza la operacin de consulta de marcadores.

Anlisis del plan de consultas


Normalmente se utiliza despus de haber procesado todos los pasos Identificadores de fila Claves de agrupacin Se utiliza una etiqueta de marcador para buscar la fila

Explicacin previa

Recuperacin de filas

La consulta de marcadores es un operador interno utilizado por el optimizador de consultas.

Observacin de los detalles


Determinacin de cundo se utiliza el operador de consulta de marcadores


Las consultas contienen la clusula IN o el operador OR

La consulta de marcadores es un operador interno que utiliza con frecuencia el optimizador de consultas. Cuando el optimizador de consultas identifica registros que son candidatos posibles para el conjunto de resultados que se pretende, anota la informacin que identifica la ubicacin de las filas (marcador) y contina las operaciones que afinan la bsqueda. Si se incluye una fila en la bsqueda, SQL Server utiliza la ubicacin de la fila en el marcador para buscarla mediante el anlisis del plan de consultas, recuperacin de las filas, observacin de los detalles y determinacin de cundo se utiliza el operador de consulta de marcadores.

Anlisis del plan de consultas


En el plan de consultas, el optimizador de consultas utiliza, generalmente, el operador de consulta de marcadores despus de que se hayan procesado los dems pasos.

Recuperacin de filas
El operador de consulta de marcadores recupera todas las filas apropiadas mediante:

Un identificador de fila (RID) para buscar la fila correspondiente en un montn. La clave de agrupacin para buscar la fila correspondiente en un ndice agrupado.

24

Optimizacin del Rendimiento de las Consultas

Observacin de los detalles


En el plan de la consulta, los detalles del operador de consulta de marcadores contienen:

Una etiqueta de marcador que se utiliza para buscar la fila en la tabla o ndice agrupado. El nombre de la tabla o el nombre del ndice agrupado donde se encuentra la fila. La clusula WITH PREFETCH si el optimizador de consultas determina que la lectura anticipada es la mejor manera de buscar marcadores en la tabla o el ndice agrupado.

Determinacin de cundo se utiliza el operador de consulta de marcadores


En general, el optimizador de consultas utiliza el operador de consulta de marcadores para procesar las consultas que contienen la clusula IN y los operadores OR en la clusula WHERE. Ejemplo En este ejemplo la tabla member tiene un ndice no agrupado en la columna member_no. El optimizador de consultas utiliza un operador de consulta de marcadores para recuperar las filas correspondientes.
USE credit SELECT * FROM member WHERE member_no IN (4567,8765,4321)

Optimizacin del Rendimiento de las Consultas

25

Uso de un ndice para abarcar una consulta


Objetivo del tema
Presentar los temas de esta seccin.

Explicacin previa

Introduccin a los ndices que abarcan consultas Bsqueda de datos mediante ndices que abarcan consultas Identificacin de si se puede utilizar un ndice para abarcar una consulta Determinacin de si se utiliza un ndice para abarcar una consulta Instrucciones para la creacin de ndices que abarcan consultas

Se pueden crear ndices que satisfagan los criterios de la consulta sin tener acceso a las pginas de datos.

Se pueden crear ndices que satisfagan los criterios de la consulta sin tener acceso a las pginas de datos. Esta estrategia puede mejorar el rendimiento de las consultas.

26

Optimizacin del Rendimiento de las Consultas

Introduccin a los ndices que abarcan consultas


Objetivo del tema
Presentar el concepto de ndices que abarcan consultas.

Explicacin previa

Slo los ndices no agrupados pueden abarcar consultas Los ndices deben contener todas las columnas a las que se hace referencia en la consulta No es necesario el acceso a las pginas de datos Las vistas indizadas pueden agregar datos anteriores Los ndices que abarcan consultas recuperan los datos rpidamente

Al crear ndices, puede que desee crear un ndice que abarque las consultas ms comunes con el fin de reducir la cantidad de E/S.

Al crear ndices, puede que desee crear un ndice que abarque las consultas ms comunes con el fin de reducir la cantidad de E/S.

Slo los ndices no agrupados pueden abarcar consultas


Los ndices que abarcan consultas contienen todos los datos necesarios de una consulta en las hojas de un ndice no agrupado.

Los ndices deben contener todas las columnas a las que se hace referencia en la consulta
Un ndice que abarca una consulta debe contener todas las columnas a las que se hace referencia en la instruccin SELECT. Si hay un ndice agrupado, los campos de la clave de agrupacin estn en las hojas del ndice no agrupado y contribuyen a abarcar la consulta.

No es necesario el acceso a las pginas de datos


Cuando un ndice abarca una consulta, el optimizador de consultas no tiene acceso a las pginas de datos porque todos los datos necesarios estn contenidos en el ndice. La cantidad de E/S se reduce considerablemente.

Las vistas indizadas pueden agregar datos anteriores


Si una vista indizada suma, cuenta o crea un promedio de columnas, el optimizador de consultas puede utilizar esta vista para proporcionar valores almacenados al resolver una consulta. Las vistas indizadas que agregan datos anteriores pueden mejorar notablemente el rendimiento.

Optimizacin del Rendimiento de las Consultas

27

Los ndices que abarcan consultas recuperan los datos rpidamente


La creacin de ndices que abarcan consultas es una de las maneras ms rpidas de tener acceso a los datos, especialmente para consultas de baja selectividad. Al comparar las hojas de los ndices agrupados y de los no agrupados, la ventaja de tener ndices que abarcan consultas es evidente.
Tipo de ndice Agrupado No agrupado Contenido del nivel de hoja Fila entera (pginas de datos reales) Valor de clave

Como los valores de clave tienen, generalmente, un tamao ms pequeo que las filas reales, una pgina de ndice puede almacenar ms valores de clave que filas completas. El almacenamiento de valores de clave requiere menos pginas, lo que reduce la cantidad de E/S.

28

Optimizacin del Rendimiento de las Consultas

Bsqueda de datos mediante ndices que abarcan consultas


Objetivo del tema
Presentar los temas de este apartado.

Explicacin previa

Ejemplo de exploracin de una sola pgina Ejemplo de exploracin de recorrido parcial Ejemplo de exploracin de recorrido completo

El optimizador de consultas explora las hojas de diferentes maneras cuando se puede utilizar un ndice para abarcar una consulta.

El optimizador de consultas explora las hojas de diferentes maneras cuando se puede utilizar un ndice para abarcar una consulta. Abarcar una consulta puede consistir en leer una sola pgina, un intervalo de pginas o todas las pginas de las hojas. Nunca se tiene acceso a las pginas de datos.

Optimizacin del Rendimiento de las Consultas

29

Ejemplo de exploracin de una sola pgina


Objetivo del tema
Ilustrar la exploracin de una sola pgina de un ndice.
Pginas de ndice
Akhtar Akhtar Lang Lang Sarah Sarah Eric Eric

SELECT SELECT lastname, lastname, firstname firstname FROM FROM member member WHERE lastname = 'Hall' WHERE lastname = 'Hall' No situadas en el nivel de hoja
Lang Lang Eric Eric

Explicacin previa

En este ejemplo una consulta que abarca un ndice requiere la lectura de una sola pgina de una hoja.

Akhtar Akhtar Ganio Ganio

Sarah Sarah Jon Jon

Nivel de hoja (valor de clave)


Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl Sarah Sarah

Ganio Ganio Hall Hall Hart Hart Jones Jones Jones Jones

Jon Jon Don Don Sherri Sherri Amy Amy Beverly Beverly

Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris

Eric Eric

Pginas de datos

La exploracin de una sola pgina se produce cuando se lee slo una de las pginas de una hoja en el nivel que no es de hoja. Leer una pgina es similar a una consulta puntual, donde la informacin (una nica fila o varias filas) se encuentra en una sola pgina. Nota La exploracin de una sola pgina no significa que la consulta slo pueda devolver una fila. Una consulta puntual puede devolver una fila o todas las filas de una pgina. En cualquier caso, todos los datos se encuentran en una sola pgina. Ejemplo En este ejemplo, un ndice compuesto y no agrupado en las columnas lastname y firstname abarca la consulta.
SELECT lastname, firstname FROM member WHERE lastname = 'Hall'

Ms informacin

SQL Server ejecuta los pasos siguientes para obtener la informacin: 1. Recorre el rbol del ndice y compara el apellido Hall con los valores de clave. 2. Contina recorriendo el ndice hasta que alcanza la primera pgina del nivel de hoja que contiene el valor de clave Hall. 3. Devuelve las filas correspondientes sin tener acceso a las pginas de datos porque los valores de clave lastname y firstname estn contenidos en el nivel de hoja.

Para simplificar, en la diapositiva no se muestra el puntero del nivel de hoja del ndice no agrupado a las pginas de datos (montn o ndice agrupado).

30

Optimizacin del Rendimiento de las Consultas

Ejemplo de exploracin de recorrido parcial


Objetivo del tema
Ilustrar la exploracin de recorrido parcial de un ndice.
Pginas de ndice
Akhtar Akhtar Jordan Jordan Akhtar Akhtar Chai Chai Dunn Dunn Ganio Ganio
USE credit USE credit SELECT lastname, firstname SELECT lastname, firstname FROM FROM member member WHERE lastname lastname BETWEEN BETWEEN 'Funk' 'Funk' AND AND 'Lang' 'Lang' WHERE

Explicacin previa

En este ejemplo una consulta que abarca un ndice requiere la lectura de una serie de pginas de nivel de hoja.

Jordan Jordan Lang Lang Morgan Morgan Smith Smith

No situadas en el nivel de hoja

Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl

Chai Chai Con Con Con Con Cox Cox Dale Dale

Dunn Dunn Dunn Dunn Fine Fine Fort Fort Funk Funk

Ganio Ganio Hall Hall Hart Hart Jones Jones Jones Jones

Jordan Jordan Kim Kim Kim Kim Koch Koch Koch Koch

Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris

Morgan Morgan Nash Nash Nay Nay Ota Ota Rudd Rudd

Nivel Nivel de de hoja hoja (valor (valor de de clave) clave)


Smith Smith Smith Smith Smith Smith Smith Smith Smith Smith

Pginas de datos

Un recorrido parcial se produce cuando se lee un intervalo de pginas del nivel de hoja. Ejemplo En este ejemplo un ndice compuesto no agrupado en las columnas lastname y firstname abarca la consulta mediante un recorrido parcial de las pginas de nivel de hoja.
USE credit SELECT lastname, firstname FROM member WHERE lastname BETWEEN 'Funk' AND 'Lang'

La columna firstname se omite para simplificar la diapositiva. Consulte la diapositiva anterior en caso de confusin.

Para su informacin

SQL Server ejecuta los pasos siguientes para obtener la informacin: 1. Recorre el rbol del ndice. 2. Comienza a leer las pginas de nivel de hoja en la pgina que contiene la primera aparicin del apellido Funk. Los datos del nivel de hoja estn ordenados de forma ascendente. 3. Lee el intervalo de pginas del nivel de hoja hasta el apellido Lang. En este momento, el recorrido parcial se completa. 4. Devuelve las filas correspondientes sin tener acceso a las pginas de datos porque se recorre el nivel de hoja en busca de los apellidos entre Funk y Lang.

Optimizacin del Rendimiento de las Consultas

31

Ejemplo de exploracin de recorrido completo


Objetivo del tema
Ilustrar la exploracin de recorrido completo de un ndice.
Pginas de ndice
Akhtar Akhtar Martin Martin Akhtar Akhtar Ganio Ganio

USE USE credit credit SELECT SELECT lastname, lastname, firstname firstname FROM FROM member member No situadas en el nivel de hoja
Martin Martin Smith Smith

Explicacin previa

En este ejemplo una consulta que abarca un ndice requiere la lectura de todas las pginas de nivel de hoja.

Nivel de hoja (valor de clave)


Akhtar Akhtar Barr Barr Barr Barr Borm Borm Buhl Buhl Chai Chai Con Con Con Con Cox Cox Dale Dale Dunn Dunn Dunn Dunn Fine Fine Fort Fort Funk Funk Ganio Ganio Hall Hall Hart Hart Jones Jones Jones Jones

Jordan Jordan Kim Kim Kim Kim Koch Koch Koch Koch

Lang Lang Martin Martin Martin Martin Martin Martin Moris Moris

Morgan Morgan Nash Nash Nay Nay Ota Ota Rudd Rudd

Smith Smith Smith Smith Smith Smith Smith Smith Smith Smith

Pginas de datos

Un recorrido completo se produce cuando se leen todas las pginas del nivel de hoja. De manera similar a un recorrido de tabla, un recorrido completo se produce cuando una consulta no incluye una clusula WHERE o cuando la clusula WHERE no es selectiva. Ejemplo En este ejemplo un ndice compuesto no agrupado en las columnas lastname y firstname abarca la consulta mediante un recorrido completo de las pginas de nivel de hoja.
USE credit SELECT lastname, firstname FROM member

Esta diapositiva ilustra un recorrido de los datos ordenados por lastname. Si se solicitan datos, sin ordenar u ordenados por firstname, SQL Server puede utilizar las pginas de asignacin para identificar y recorrer todas las pginas del ndice y, despus, rechazar las que no estn situadas en las hojas. La columna firstname se omite para simplificar la diapositiva.

Para su informacin

Para recuperar la informacin SQL Server hace lo siguiente: 1. Recorre el rbol del ndice. 2. Lee las pginas de las hojas, comenzando por la primera pgina, y las recorre todas hasta que llega a la ltima. 3. Devuelve las filas correspondientes sin tener acceso a las pginas de datos porque se recorre el nivel de hoja. Nota El recorrido del nivel de hoja de un ndice tambin es un recorrido de datos paralelo. SQL Server utiliza el procesamiento de lectura anticipada para mejorar el rendimiento de la consulta.

32

Optimizacin del Rendimiento de las Consultas

Identificacin de si se puede utilizar un ndice para abarcar una consulta


Objetivo del tema
Indicar cundo el optimizador de consultas puede utilizar un ndice para abarcar una consulta.

Todos los datos necesarios deben estar en el ndice Un ndice compuesto es til aunque no se haga referencia a la primera columna No es necesaria una clusula WHERE Se puede utilizar un ndice no agrupado si requiere menos E/S que un ndice agrupado que contenga una columna a la que se hace referencia en la clusula WHERE Los ndices se pueden combinar para abarcar consultas

Explicacin previa

Estos factores afectan a la capacidad de un ndice para abarcar una consulta.

Estos factores afectan a la capacidad de un ndice para abarcar una consulta:


Todos los datos necesarios deben estar en el ndice. Estos datos incluyen todas las columnas a las que se hace referencia, con independencia de si se devuelven en el conjunto de resultados, se utilizan para la ordenacin o agregacin, o se suministran en la clusula WHERE. Una columna de un ndice puede contribuir a abarcar una consulta incluso cuando no sea la primera columna a la que se hace referencia en un ndice compuesto. Por ejemplo, un ndice compuesto en SalesRep, Region, Amount (en este orden) puede abarcar una consulta que slo haga referencia a Region y SUM(Amount).

No es necesaria una clusula WHERE. El optimizador de consultas recorre el nivel de hoja completo. Un ndice no agrupado se puede utilizar para abarcar una consulta si requiere menos E/S que un ndice agrupado que contiene una columna a la que se hace referencia en la clusula WHERE. Los ndices se pueden combinar para abarcar consultas. Si algunas tablas o todas a las que se hace referencia en una operacin de combinacin tienen un ndice que abarcar una consulta, los resultados se combinan mediante una operacin de combinacin especial y, despus, se devuelven las filas.

Optimizacin del Rendimiento de las Consultas

33

Determinacin de si se utiliza un ndice para abarcar una consulta


Objetivo del tema
Explicar cmo se determina si una consulta est abarcada por un ndice.

Observacin de los resultados del plan de ejecucin


Explicacin previa

Se muestra la frase Comprobar un ndice no agrupado, en su totalidad o slo un intervalo ndice no agrupado Nmero total de niveles no situados en el nivel de hoja Nmero total de pginas que componen el nivel de hoja Nmero total de filas por pgina del nivel de hoja Nmero total de filas por pgina de datos Nmero total de pginas que componen la tabla

Las consultas que estn abarcadas por un ndice no son aparentes explcitamente para los usuarios. Se puede observar el plan de ejecucin grfico o comparar la E/S para determinar si el optimizador de consultas utiliz un ndice para abarcar una consulta.

Comparacin de E/S

Las consultas que estn abarcadas por un ndice no son aparentes explcitamente para los usuarios. Se puede observar el plan de ejecucin grfico o comparar la E/S para determinar si el optimizador de consultas utiliz un ndice para abarcar una consulta.

Observacin de los resultados del plan de ejecucin


Se puede ver el plan de ejecucin grficamente. Si los resultados de un plan de ejecucin muestran la frase Comprobar un ndice no agrupado, en su totalidad o slo un intervalo, el optimizador de consultas pudo abarcar la consulta mediante un ndice.

34

Optimizacin del Rendimiento de las Consultas

Comparacin de E/S
Tambin se pueden ver los resultados de STATISTICS IO. Al evaluar el costo de un ndice que abarca una consulta, recuerde que el optimizador de consultas siempre intenta abarcar la consulta al evaluar un plan de ejecucin. Como ayuda para determinar si la consulta est abarcada por un ndice, debe conocer la informacin siguiente acerca del ndice no agrupado y la tabla:

ndice no agrupado Nmero total de niveles no situados en el nivel de hoja Nmero total de pginas que componen el nivel de hoja Nmero total de filas por pgina del nivel de hoja Nmero total de filas por pgina de datos Nmero total de pginas que componen la tabla

Nota Si lo prefiere, tambin puede calcular el tamao del nivel de hoja de un ndice no agrupado en lugar de utilizar la instruccin STATISTICS IO. Como alternativa, puede consultar sysindexes y revisar la columna dpages, que mostrar el tamao del nivel de hoja.

Optimizacin del Rendimiento de las Consultas

35

Instrucciones para la creacin de ndices que abarcan consultas


Objetivo del tema
Proporcionar algunas instrucciones para crear ndices que abarquen consultas.

Agregar columnas a los ndices Reduzca el tamao de la clave del ndice Mantenga una proporcin de tamao entre la fila y la clave

Explicacin previa

Al crear ndices que abarquen consultas, tenga en cuenta las instrucciones siguientes.

Al crear ndices que abarquen consultas, tenga en cuenta las instrucciones siguientes:

Agregar columnas a los ndices. Puede que desee agregar columnas a ndices que: Abarcan ms de una consulta. Contribuyen a resolver algunas de las consultas ms comunes. Se hace referencia a ellas con frecuencia. No aumentan considerablemente el tamao de la clave. Reduzca el tamao de la clave del ndice. Al definir la clave del ndice (valores de clave), evite especificar valores de clave demasiado grandes. Las filas grandes aumentan el tamao de la fila, el nmero de niveles de ndice y el nmero total de pginas. Las ventajas de rendimiento obtenidas con la creacin de un ndice que abarca consultas se reduciran. Mantenga una proporcin de tamao entre la fila y la clave. El aumento del tamao de la clave del ndice en relacin con el tamao de las filas puede afectar al rendimiento de la consulta. Un ejemplo extremo es la creacin de un ndice no agrupado en todas las columnas de una tabla. Al hacer esto, se genera una copia virtual de la tabla y se almacena en el nivel de hoja del ndice no agrupado de forma ordenada.

Sugerencia

Mencione que las columnas que pueden ser muy grandes en una ocasin pueden ser aceptables en otra. Pregunte a los alumnos qu numero de caracteres es demasiado grande para optimizar una tabla.

36

Optimizacin del Rendimiento de las Consultas

Estrategias de indizacin
Objetivo del tema
Presentar los temas de esta seccin.

Explicacin previa

Se puede implementar estrategias de indizacin para mejorar el rendimiento de las consultas.

Evaluacin de la E/S para las consultas que tienen acceso a un intervalo de datos Indizacin para varias consultas Instrucciones para la creacin de ndices

Se puede implementar estrategias de indizacin para mejorar el rendimiento de las consultas.

Optimizacin del Rendimiento de las Consultas

37

Evaluacin de la E/S para las consultas que tienen acceso a un intervalo de datos
Objetivo del tema
Ilustrar las diferencias en la E/S de pginas mediante distintos mtodos de acceso.
SELECT SELECT charge_no charge_no FROM FROM charge charge WHERE WHERE charge_amt charge_amt BETWEEN BETWEEN 20 20 AND AND 30 30

Explicacin previa

El optimizador de consultas tiene en cuenta automticamente varios planes de ejecucin y calcula la E/S necesaria para cada plan.

M todo de Mtodo deacceso acceso


Recorrido Recorridode detabla tabla ndice ndiceagrupado agrupadoen enla lacolumna columnacharge_amt charge_amt ndice ndiceno noagrupado agrupadoen enla lacolumna columnacharge_amt charge_amt ndice ndicecompuesto compuestoen enlas lascolumnas columnascharge_amt charge_amt y ycharge_no charge_no

P gina de Pgina deE/S E/S


10.417 10.417 1042 1042 100.273 100.273 273 273

Sugerencia

El ejemplo no se puede ejecutar en la base de datos credit. Consulte los supuestos en el cuaderno de trabajo al comparar la E/S de pginas para los distintos ndices.

El optimizador de consultas tiene en cuenta automticamente varios planes de ejecucin y calcula la E/S necesaria para cada plan. Despus, inicia un plan de ejecucin con la menor cantidad de E/S adems de tener en cuenta otras consideraciones. Compare la E/S de pginas entre los distintos mtodos de acceso que puede utilizar el optimizador de consultas. Por ejemplo, considere la siguiente consulta que recupera un intervalo de datos y, a continuacin, compare la E/S de esta consulta con otros mtodos de acceso a los datos.
SELECT charge_no FROM charge WHERE charge_amt BETWEEN 20 AND 30

Sugerencia

Al comparar los distintos mtodos debe suponer lo siguiente:


Seale que los mtodos de acceso ilustrados en la diapositiva utilizan esta informacin.

Hay 1 milln de filas y 96 filas por pgina. El nmero total de pginas es de 10.147. No hay ningn ndice agrupado. Hay 100.000 filas en el intervalo de 20,00 a 30,00 dlares. En una pgina de hoja de ndice no agrupado entran 367 filas de ndice.

38

Optimizacin del Rendimiento de las Consultas

Recorrido de tabla
La realizacin de un recorrido de tabla es beneficiosa para las consultas en las que el conjunto de resultados incluye un porcentaje alto de una tabla (baja selectividad). Los recorridos de tabla son apropiados cuando el total de E/S de pginas de una consulta sobrepasara el nmero de pginas de la tabla. Al ejecutar la consulta que recorre una tabla, el nmero de operaciones de E/S de pginas es de 10.417. Compare la E/S de pginas en el recorrido de una tabla con un ndice no agrupado en la columna charge_amt. Un recorrido de tabla es ms eficaz.

ndice agrupado en la columna charge_amt


Para obtener la informacin, SQL Server ejecuta los pasos siguientes: 1. Busca en el ndice agrupado el valor mnimo, en este caso 20,00. 2. Lee las filas comenzando en 20,00 y detiene la bsqueda en 30,00. Como la columna charge_amt est agrupada, el orden fsico de los datos se organiza segn la cantidad que cobrar. Todos los datos que pertenecen a ese intervalo estn en orden secuencial en las pginas siguientes, con lo que resulta fcil recuperarlos. El nmero de operaciones de E/S de pginas es de 1.042 (100.000/96 filas por pgina).

ndice no agrupado en la columna charge_amt


SQL Server ejecuta los pasos siguientes para obtener la informacin: 1. Busca el intervalo de valores en las hojas del ndice no agrupado y recupera el RID de cada fila. En este caso, se tiene acceso a 273 pginas de nivel de hoja (100.000/367). 2. Los datos se recuperan de cada pgina mediante la consulta de marcadores para las filas correspondientes. El nmero de operaciones de E/S de pginas es, aproximadamente, de 100.273. Recuperar los datos mediante un ndice no agrupado en la columna charge_amt es el mtodo menos eficaz porque SQL Server debe leer una pgina por cada fila y, adems, se leen las hojas del ndice para recuperar los valores RID. Cada pgina de datos se lee varias veces en la cach.

ndice compuesto en las columnas charge_amt y charge_no


El nmero de operaciones de E/S de pginas es de 273 (100.000/367 filas por pgina). El promedio de filas de ndice por nivel de hoja es de 367. Como las columnas charge_amt y charge_no estn en el ndice, SQL Server no busca en las pginas de datos, lo que reduce la cantidad de E/S.

Optimizacin del Rendimiento de las Consultas

39

Indizacin para varias consultas


Objetivo del tema
Ilustrar los problemas de crear ndices para resolver las consultas ms importantes.
Ejemplo Ejemplo 1 1

Explicacin previa

Elegir el ndice ms apropiado en funcin de una consulta individual es ms fcil que crear un ndice para consultas con varias prioridades.

USE USE credit credit SELECT SELECT charge_no, charge_no, charge_dt, charge_dt, charge_amt charge_amt FROM charge FROM charge WHERE WHERE statement_no statement_no = = 19000 19000 AND AND member_no member_no = = 3852 3852

Ejemplo Ejemplo 2 2

USE USE credit credit SELECT SELECT member_no, member_no, charge_no, charge_no, charge_amt charge_amt FROM charge FROM charge WHERE WHERE charge_dt charge_dt between between '07/30/1999' '07/30/1999' AND '07/31/1999' AND '07/31/1999' AND AND member_no member_no = = 9331 9331

Sugerencia

Utilice los ejemplos de la diapositiva y consulte la tabla del cuaderno de trabajo al comparar el rendimiento de ambas consultas con diferentes estrategias de indizacin.

Elegir el ndice ms apropiado en funcin de una consulta individual es ms fcil que crear un ndice para consultas con varias prioridades. La creacin de ndices para consultas con varias prioridades es ms compleja porque el mejor ndice para una consulta puede no serlo para otra. El objetivo es lograr un rendimiento aceptable para todas las consultas con la prioridad ms alta mediante la evaluacin de la E/S.

Situacin de ejemplo en una empresa


En los ejemplos siguientes, se supone que las consultas ms comunes solicitadas por los usuarios son la bsqueda de cobros a clientes para un informe especfico (ejemplo 1) y la bsqueda de cobros a clientes para un da especfico (ejemplo 2). La primera consulta de ejemplo es el 15 por ciento de la tabla. La otra consulta es muy selectiva y slo tiene acceso a unas pocas filas.

Ejemplo 1

USE credit SELECT charge_no, charge_dt, charge_amt FROM charge WHERE statement_no = 19000 AND member_no = 3852 USE credit SELECT member_no, charge_no, charge_amt FROM charge WHERE charge_dt between '07/30/1999' AND '07/31/1999' AND member_no = 9331

Ejemplo 2

40

Optimizacin del Rendimiento de las Consultas

En la tabla siguiente se compara el rendimiento de las consultas de los ejemplos 1 y 2 en funcin de la posible estrategia de indizacin que se implemente. La mejor estrategia es usar un ndice agrupado en la columna member_no.
Tipo de ndice Agrupado No agrupado Agrupado No agrupado Agrupado No agrupado, compuesto Agrupado No agrupado, compuesto Columna member_no charge_no charge_no member_no member_no statement_no, member_no charge_no member_no, charge_dt Consulta del ejemplo 1 Muy rpida. Utiliza el ndice agrupado. Ms lenta que si se creara un ndice agrupado en la columna member_no. Muy rpida. Utiliza el ndice agrupado. Ms lenta que si se creara un ndice agrupado en la columna member_no. Consulta del ejemplo 2 Muy rpida. Utiliza el ndice agrupado. Lenta. El ndice no agrupado en member_no no es eficaz con intervalos de datos. Muy rpida. Utiliza el ndice agrupado. Rpida. Un ndice compuesto aumenta considerablemente el rendimiento del ndice no agrupado.

Optimizacin del Rendimiento de las Consultas

41

Instrucciones para la creacin de ndices


Objetivo del tema
Proporcionar instrucciones para la creacin de ndices tiles.

Determine las prioridades de todas las consultas Determine la selectividad de cada parte de la clusula WHERE de cada consulta Determine si es conveniente crear un ndice Identifique las columnas que se deben indizar Determine el mejor orden para las columnas de los ndices compuestos Determine los dems ndices que sean necesarios Pruebe el rendimiento de las consultas

Explicacin previa

Para asegurar que los ndices que se crean son tiles para el optimizador de consultas, tenga en cuenta las instrucciones siguientes.

La decisin acerca de la cantidad de ndices, el tipo y las columnas en las que crearlos debe basarse en el conocimiento completo de los datos y las necesidades de los usuarios. Para asegurar que los ndices que se crean son tiles para el optimizador de consultas, tenga en cuenta las instrucciones siguientes:

Determine las prioridades de todas las consultas. Examine y conozca totalmente los datos y cmo se utilizarn. Determine las transacciones de prioridad para la base de datos. Determine la selectividad de cada parte de la clusula WHERE de cada consulta. Determine si es conveniente crear un ndice. Hay situaciones en las que no se debe crear un ndice. Algunas son las siguientes: Si el optimizador de consultas nunca utiliza el ndice. Si los valores de las columnas son de baja selectividad. Si la columna que se va a indizar es demasiado ancha. Identifique las columnas que se deben indizar. Cree un ndice en una columna que se utilice como clave de combinacin para mejorar el rendimiento de la combinacin. As, el optimizador de consultas tendr la opcin de utilizar un ndice en lugar de realizar un recorrido de tabla. Evale si se busca con frecuencia en la columna. Asegrese de que se indizan las columnas a las que se hace referencia en las clusulas WHERE de las consultas con prioridad ms alta.

Determine el mejor orden para las columnas de los ndices compuestos.

42

Optimizacin del Rendimiento de las Consultas

Determine los dems ndices que sean necesarios. Determine el nmero mnimo de ndices que se pueden crear para cada tabla. Compare el beneficio de rendimiento del ndice con el mantenimiento de actualizacin. Si una consulta se ejecuta con poca frecuencia, puede ser conveniente crear un ndice para una actividad determinada (cuando puede proporcionar un beneficio de rendimiento significativo) y, despus, eliminarlo.

Pruebe el rendimiento de las consultas. Despus de crear los ndices, pruebe el rendimiento de las consultas con prioridad ms alta mediante la ejecucin de las instrucciones siguientes para cada consulta: SET SHOWPLAN ON SET STATISTICS IO ON SET STATISTICS TIME ON

Optimizacin del Rendimiento de las Consultas

43

Suplantacin del optimizador de consultas


Objetivo del tema
Presentar los temas de esta seccin.

Explicacin previa

Esta seccin describe las formas de suplantar el optimizador de consultas.

Determinacin de cundo se debe suplantar el optimizador de consultas Uso de las sugerencias y la instruccin SET FORCEPLAN Comprobacin del rendimiento de las consultas despus de suplantar el optimizador de consultas

En esta seccin se describen las formas de suplantar el optimizador de consultas y cmo determinar cundo se debe hacer. Cuando se suplanta el optimizador de consultas, es importante probar y asegurar el rendimiento de las consultas.

44

Optimizacin del Rendimiento de las Consultas

Determinacin de cundo se debe suplantar el optimizador de consultas


Objetivo del tema
Sealar alternativas para suplantar el optimizador de consultas.

Limitar las sugerencias de optimizador Antes de suplantar el optimizador de consultas debe explorar las dems alternativas mediante:

Explicacin previa

En general, no es aconsejable suplantar el optimizador de consultas.

Actualizacin de estadsticas Recompilacin de procedimientos almacenados Revisin de las consultas o argumentos de bsqueda Evaluacin de la posibilidad de crear ndices diferentes

Si las consultas no se ejecutan con eficacia, tiene la posibilidad de suplantar el optimizador de consultas mediante sugerencias de optimizador. Las sugerencias de optimizador son palabras clave que se incluyen en la consulta para forzar una operacin de optimizacin especfica. Se debe limitar el uso de sugerencias de optimizador porque convierten la optimizacin en esttica. Las sugerencias de optimizador evitan que el optimizador de consultas se ajuste a un entorno dinmico. Despus de utilizar las sugerencias de optimizador debe supervisar constantemente el rendimiento de las consultas para comprobar que la consulta se ejecuta de forma ptima. Antes de considerar la suplantacin del optimizador de consultas debe explorar las dems alternativas mediante:

Actualizacin de estadsticas. Recompilacin de procedimientos almacenados. Revisin de las consultas o argumentos de bsqueda para determinar si se deben volver a escribir. Evaluacin de la posibilidad de crear ndices diferentes.

Optimizacin del Rendimiento de las Consultas

45

Uso de las sugerencias y la instruccin SET FORCEPLAN


Objetivo del tema
Tratar la suplantacin del optimizador de consultas.

Explicacin previa

Sugerencias de tabla Sugerencias de combinacin Sugerencias de consulta Instruccin SET FORCEPLAN

Se puede suplantar el optimizador de consultas mediante las sugerencias de optimizador o la instruccin SET FORCEPLAN.

Se puede suplantar el optimizador de consultas mediante las sugerencias o la instruccin SET FORCEPLAN. Se puede especificar una sugerencia de optimizador de consultas en las instrucciones SELECT, INSERT, UPDATE o DELETE. Se pueden utilizar tres tipos de sugerencias para suplantar el optimizador de consultas.

Sugerencias de tabla
Una sugerencia de tabla especifica un recorrido de tabla, uno o varios ndices que debe utilizar el optimizador de consultas, o bien un mtodo de bloqueo que debe utilizar el optimizador de consultas con esta tabla y para una instruccin. Al utilizar las sugerencias de tabla, tenga en cuenta lo siguiente:

Cada sugerencia de tabla slo se puede especificar una vez, aunque se pueden tener varias sugerencias de tabla La clusula WITH se debe especificar junto al nombre de la tabla

46

Optimizacin del Rendimiento de las Consultas

Sintaxis

nombreTabla [ [ AS ] aliasTabla ] [ WITH ( < sugerenciaTabla > [ ,...n ] ) ] WITH ( < sugerenciaTabla > ) ::= { INDEX ( valorndice [ ,...n ] ) | FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITTED | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK | XLOCK }

Sugerencias de combinacin
Las sugerencias de combinacin exigen una estrategia de combinacin entre dos tablas. Se especifican en la clusula FROM de una consulta. Cuando se especifica una sugerencia de combinacin, el optimizador de consultas exige automticamente el orden de combinacin para todas las tablas combinadas en la consulta, en funcin de la posicin de las palabras clave ON. Sintaxis < sugerenciaCombinacin > ::= { LOOP | HASH | MERGE | REMOTE }

Sugerencias de consulta
Recuerde a los alumnos que el operador UNION aumenta el nmero de filas, mientras que las operaciones de combinacin aumentan el nmero de columnas.

Sugerencia

Las sugerencias de consulta controlan una amplia variedad de acciones. Se puede especificar que el optimizador de consultas utilice una sugerencia determinada para una consulta mediante la clusula OPTION. Al utilizar la clusula OPTION, tenga en cuenta los hechos siguientes:

Cada sugerencia de consulta slo se puede especificar una vez, aunque se pueden tener varias sugerencias de consulta. La clusula OPTION se debe especificar con la consulta ms externa de la instruccin. La sugerencia de consulta afecta a todos los operadores de la instruccin. Si se incluye el operador UNION en la consulta principal, slo la ltima consulta que incluya el operador UNION puede tener la clusula OPTION.

Optimizacin del Rendimiento de las Consultas

47

Sintaxis

[ OPTION ( < sugerenciaConsulta > [ ,...n ) ] < sugerenciaConsulta > ::= { { HASH | ORDER } GROUP | { CONCAT | HASH | MERGE } UNION | { LOOP | MERGE | HASH } JOIN | FAST nmeroFilas | FORCE ORDER | MAXDOP nmero | ROBUST PLAN | KEEP PLAN | KEEPFIXED PLAN | EXPAND VIEWS }

Instruccin SET FORCEPLAN


Mediante la clusula FROM puede hacer que el optimizador de consultas combine las tablas en el orden en que se enumeran. Al utilizar la instruccin SET FORCEPLAN, el optimizador de consultas slo utiliza combinaciones de bucle anidado. La instruccin SET FORCEPLAN es una opcin de sesin. Sintaxis SET FORCEPLAN {ON | OFF} Nota Si una o varias sugerencias de consulta causan que el optimizador de consultas no genere un plan de ejecucin vlido, SQL Server cancela la ejecucin y emite el mensaje de error 8622. Debe volver a emitir la consulta sin especificar ninguna sugerencia de optimizador ni utilizar la instruccin SET FORCEPLAN.

48

Optimizacin del Rendimiento de las Consultas

Comprobacin del rendimiento de las consultas despus de suplantar el optimizador de consultas


Objetivo del tema
Describir la importancia de probar y volver a evaluar el rendimiento de las consultas despus de suplantar el optimizador de consultas.

Compruebe que mejora el rendimiento Documente las razones para utilizar sugerencias de optimizador Vuelva a probar las consultas regularmente

Explicacin previa

Si determina la necesidad de suplantar el optimizador de consultas, pruebe y vuelva a evaluar el rendimiento de las consultas.

Si determina que la suplantacin del optimizador de consultas es necesaria, compruebe que el rendimiento ha mejorado, documente las razones para suplantar el optimizador de consultas y vuelva a probar las consultas peridicamente.

Compruebe que mejora el rendimiento


Para comprobar que las sugerencias del optimizador de consultas mejorarn el rendimiento, especifique la opcin ON para las instrucciones STATISTICS IO y STATISTICS TIME y seleccione Mostrar plan de ejecucin en el analizador de consultas. En la mayor parte de los casos, suplantar el optimizador de consultas no mejora el rendimiento. Si pasa valores de entrada en un procedimiento almacenado, compruebe que no se compromete el rendimiento para ninguno de los valores de entrada. Las sugerencias de optimizador pueden mejorar el rendimiento para ciertos valores de entrada, pero pueden comprometerlo para otros.

Documente las razones para utilizar sugerencias de optimizador


Si la suplantacin del optimizador de consultas mejora el rendimiento, asegrese de documentar las razones. Esto le permite volver a evaluar peridicamente la validez de las sugerencias de optimizador. Si las circunstancias cambian, es posible que las sugerencias de optimizador ya no sean necesarias y puedan comprometer el rendimiento.

Vuelva a probar las consultas regularmente


El optimizador de consultas es dinmico y evala constantemente el mejor plan de ejecucin cuando los datos cambian. Si utiliza sugerencias de optimizador, el plan de ejecucin se vuelve esttico. Por este motivo, debe volver a probar, de forma peridica, las consultas para las que suplanta el optimizador de consultas.

Potrebbero piacerti anche