46
UD05. Monitorización y optimización del rendimiento del sistema. 1. MONITORIZACIÓN DE SQL SERVER. a. Objetivos y elementos a supervisar. Los servidores de base de datos actúan proporcionando servicio de datos a las diferentes aplicaciones. La supervisión de las bases de datos permite evaluar el rendimiento del servidor, para poder detectar los procesos que causan problemas y, en su caso, determinar los ajustes que son necesarios realizar para optimizar dicho servicio. La supervisión y optimización de un sistema puede ser una tarea compleja debido al gran número de variables implicadas y debe ser desarrollado de forma continuada durante todo su ciclo de vida ya que el servicio que ofrece se desarrolla en un entorno dinámico -los datos de la aplicación cambian, el tipo de acceso que requieren los usuarios cambia, la forma de conexión de los usuarios cambia e incluso pueden cambiar los tipos de aplicaciones que tienen acceso- y las condiciones cambiantes se traducen en cambios en el rendimiento. La evaluación continua del rendimiento de la base de datos ayuda a minimizar los tiempos de respuesta y a maximizar el rendimiento, obteniendo como resultado un rendimiento óptimo. El tiempo de respuesta se mide como el tiempo necesario para devolver la primera fila del conjunto de resultados al usuario, en forma de confirmación visual de que se está procesando una consulta. El rendimiento puede ser medido como el número total de consultas controladas por el servidor durante un periodo determinado y puede ser calculado a partir del número de operaciones de entrada y salida necesarias para procesar una transacción, la cantidad de tiempo de CPU empleado y el tiempo de respuesta. ¡Recuerde! Que a medida que aumenta el número de usuarios, aumenta la competencia para obtener recursos de un servidor, y esto hace que el tiempo de respuesta aumente y el rendimiento global disminuya. Una vez configurado 1 correctamente, la supervisión del servidor de base de datos debe centrarse en aquellos factores que peden tener impacto sobre el rendimiento: Realizar un seguimiento y cuantificación del uso de aquellos recursos del sistema relacionados directamente con su rendimiento como el tráfico de red, la E/S de disco, la gestión de memoria y el uso de la CPU. Así como los procesos simultáneos que se desarrollan en el sistema operativo. Evaluar la actividad de los usuarios. Controlando sus accesos y requisitos, verificando sus consultas/transacciones y los recursos que utilizan, etc. 1 Una mala configuración del servidor puede afectar negativamente a su rendimiento.

ASGBD UD05-Teoria

Embed Size (px)

Citation preview

  • UD05. Monitorizacin y optimizacin del rendimiento del sistema. 1. MONITORIZACIN DE SQL SERVER.

    a. Objetivos y elementos a supervisar.

    Los servidores de base de datos actan proporcionando servicio de datos a las diferentes aplicaciones. La supervisin de las bases de datos permite evaluar el rendimiento del servidor, para poder detectar los procesos que causan problemas y, en su caso, determinar los ajustes que son necesarios realizar para optimizar dicho servicio. La supervisin y optimizacin de un sistema puede ser una tarea compleja debido al gran nmero de variables implicadas y debe ser desarrollado de forma continuada durante todo su ciclo de vida ya que el servicio que ofrece se desarrolla en un entorno dinmico -los datos de la aplicacin cambian, el tipo de acceso que requieren los usuarios cambia, la forma de conexin de los usuarios cambia e incluso pueden cambiar los tipos de aplicaciones que tienen acceso- y las condiciones cambiantes se traducen en cambios en el rendimiento. La evaluacin continua del rendimiento de la base de datos ayuda a minimizar los tiempos de respuesta y a maximizar el rendimiento, obteniendo como resultado un rendimiento ptimo. El tiempo de respuesta se mide como el tiempo necesario para devolver la primera fila del conjunto de resultados al usuario, en forma de confirmacin visual de que se est procesando una consulta. El rendimiento puede ser medido como el nmero total de consultas controladas por el servidor durante un periodo determinado y puede ser calculado a partir del nmero de operaciones de entrada y salida necesarias para procesar una transaccin, la cantidad de tiempo de CPU empleado y el tiempo de respuesta. Recuerde! Que a medida que aumenta el nmero de usuarios, aumenta la competencia para obtener recursos de un servidor, y esto hace que el tiempo de respuesta aumente y el rendimiento global disminuya. Una vez configurado1 correctamente, la supervisin del servidor de base de datos debe centrarse en aquellos factores que peden tener impacto sobre el rendimiento:

    Realizar un seguimiento y cuantificacin del uso de aquellos recursos del sistema relacionados directamente con su rendimiento como el trfico de red, la E/S de disco, la gestin de memoria y el uso de la CPU. As como los procesos simultneos que se desarrollan en el sistema operativo.

    Evaluar la actividad de los usuarios.

    Controlando sus accesos y requisitos, verificando sus consultas/transacciones y los recursos que utilizan, etc.

    1 Una mala configuracin del servidor puede afectar negativamente a su rendimiento.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Vg. al supervisar usuarios que intentan conectarse a una instancia de SQL Server, puede determinar si la seguridad est configurada correctamente y probar las aplicaciones o sistemas de desarrollo. Al supervisar las consultas SQL mientras se ejecutan, puede determinar si estn escritas correctamente y si producen los resultados esperados. Hay diversas formas de disear y manipular cursores y cada una de ellas tiene un impacto diferente sobre el rendimiento.

    Detectar problemas de las aplicaciones de base de datos que pueden tener su origen en el

    diseo fsico y lgico, los interbloqueos y, por supuesto, en las consultas aunque estas estn incluidas en procedimientos almacenados.

    Recuerde! Que SQL Server administra automticamente los recursos en el nivel del sistema, como la memoria y el espacio en disco, por lo que se minimiza la necesidad de optimizar manualmente el sistema. Aun as, la supervisin permite a los administradores identificar las tendencias de rendimiento para determinar si es necesario realizar cambios.

    b. Herramientas y tcnicas de monitorizacin.

    Una sencilla estrategia de monitoreo y evaluacin de SQL Server puede implicar la realizacin de los siguientes pasos:

    Definir los objetivos de supervisin estableciendo una lnea base de rendimiento.

    Es muy importante determinar los valores de los parmetros que miden la actividad del sistema y que son considerados representativos de un rendimiento ptimo. Existen diversos mtodos para determinar una lnea de base para el rendimiento del servidor. El ms habitual, consiste en establecer el comportamiento de referencia a partir de medidas peridicas de rendimientos ptimos anteriores.

    Identificar los componentes que desea supervisar

    Determinando que eventos generados por el motor de base de datos y relacionados con los componentes a supervisar son necesarios registrar para ser supervisados. Recuerde! Un evento es una accin generada dentro de una instancia del motor de la base de datos de SQL Server. Vg. conexiones, errores y desconexiones de inicio de sesin, instrucciones SELECT, INSERT, UPDATE y DELETE de Transact-SQL, inicio o finalizacin de procedimientos almacenados, bloqueos adquiridos o liberados en objetos de base de datos, comprobaciones de permisos de seguridad, etc.

    Seleccionar las herramientas apropiadas. Windows y SQL Server disponen de un amplio conjunto de herramientas que se pueden utilizar para supervisar el servidor. La eleccin de la herramienta depende de la actividad o de los eventos particulares que se van a supervisar.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Supervisar el servidor. Ejecutando la herramienta seleccionada para la supervisin se deben ver que sucedi exactamente en el servidor. Para ello, se deben recopilar todos los datos sobre los eventos de aplicacin, instancia de SQL Server o del sistema operativo que, previamente, fueron considerados objetos de la supervisin.

    Es conveniente medir el rendimiento en distintos momentos y en distintas condiciones, lo que permitir comparaciones para detectar posibles problemas -conocer qu est sucediendo en cada momento en el sistema, permitir detectar anomalas del mismo-.

    Analizar los datos.

    El anlisis de los datos de eventos conlleva determinar qu sucede y por qu. Una vez haya finalizado la supervisin del servidor, se analizan los datos para ver si ha alcanzado su objetivo de supervisin, comparando las estadsticas de la lnea base con el rendimiento actual del servidor. Unas cifras demasiado elevadas o demasiado reducidas con respecto a la lnea base indican que hay que realizar una investigacin ms detallada. Pueden indicar reas que hay que optimizar o volver a configurar. -Vg. puede ser necesario agregar memoria, cambiar ndices, corregir problemas de cdigos con procedimientos almacenados o instrucciones Transact-SQL, etc.-.

    Tanto el sistema operativo como SQL Server, disponen de un variado conjunto de herramientas que pueden ser utilizadas en la supervisin de una instancia de SQL Server, a continuacin se enumeran algunas de ellas. De sistema operativo: Monitor de sistema.

    La funcin principal del Monitor de sistema es hacer un seguimiento del uso de los recursos del sistema que permite supervisar el rendimiento y actividad del servidor

    Administrador de tareas.

    El Administrador de tareas muestra los programas, procesos y servicios que se estn ejecutando en el equipo en este momento. Puede usarse para supervisar el rendimiento del equipo o para cerrar un programa que no responde. Tambin es prctico para comprobar el estado de la red y ver cmo est funcionando.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Registro de sucesos.

    Mantiene registros de todos los eventos del sistema operativo relacionados con las aplicaciones, seguridad y sistema en el equipo -incluidos aquellos eventos de SQL Server que no pueden ser encontrados en ningn otro lugar-. Consultar esta informacin puede resulta til en el diagnstico de problemas de hardware o software -Vg. la determinacin de los sucesos que pueden estar causando cuellos de botella en el rendimiento-.

    De SQL Server: SQL Server Profiler.

    El Analizador de SQL Server realiza un seguimiento de los eventos de procesos del motor de base de datos, como el inicio de un lote o una transaccin, que permite supervisar la actividad del servidor y de la base de datos -Vg. interbloqueos, errores irrecuperables o actividad de inicio de sesin-. La diferencia clave entre el SQL Server Profiler y el Monitor de sistema es que el SQL Server Profiler supervisa los eventos del motor de base de datos, mientras que el Monitor de sistema supervisa el uso de los recursos asociado con los procesos del servidor.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Monitor de Actividad de SSMS.

    El Monitor de actividad de SQL Server Management Studio permite realizar una supervisin "ad hoc" de una instancia de SQL Server. As, podremos determinar de forma grfica, el volumen y los tipos generales de actividad en el sistema, como por ejemplo:

    Los procesos que se ejecutan en la instancia de SQL Server. Las Transacciones que fueron bloqueadas. Los bloqueos activos. Los usuarios que estn conectados actualmente y la actividad que estn realizando -

    comandos que estn ejecutando-.

    SQL Server Audit.

    Con SQL Server Audit., disponible a partir de SQL Server 2008 Enterprise, puede realizarse el seguimiento y registro automtico de las acciones que se producen a nivel de instancia de servidor o de base de datos. SQL Server Audit proporciona las herramientas y los procesos necesarios para habilitar, almacenar y ver auditoras en varios objetos de servidor y de base de datos.

    Funciones y vistas de administracin dinmica (Dynamic Management Views [DMV]).

    Las funciones y vistas de administracin dinmica devuelven informacin sobre el estado del servidor que se puede utilizar para controlar el estado de una instancia del servidor, para diagnosticar problemas y para optimizar el rendimiento. Se dispone de funciones y vistas de administracin con mbito en el servidor y en la base de datos.

    Herramientas de Transact-SQL.

    Diferentes funciones, procedimientos almacenados del sistema e instrucciones DBCC (comandos de consola de base de datos) suponen una alternativa muy eficaz para realizar muchas tareas de supervisin.

    Registros de SQL Server.

    SQL Server dispone de diferentes registros donde se guarda la informacin sobre los eventos definidos por los usuarios o del sistema, as como los errores producidos, y que pueden ser consultados para detectar y solucionar posibles errores generados en la instancia del servidor.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • A nivel de consultas: Analizador de consultas de SSMS.

    SQL Server Management Studio dispone de la posibilidad de mostrar, de forma grfica, a un administrador o a un programador de bases de datos el plan de ejecucin de cada consulta, analizndolo y prestando asistencia para mejorar su rendimiento.

    c. Supervisin del uso de recursos.

    Se recomienda utilizar el Monitor de sistema de Windows para recopilar, presentar y analizar, en tiempo real si es preciso, los datos de rendimiento en forma de contadores para recursos fsicos del sistema -Vg. el uso del procesador y la memoria- y para otros recursos de las aplicaciones -Vg. SQL Server- que se estn ejecutando en el equipo. Cada recurso est representado por un objeto distinto, que contiene uno o ms contadores que determinan diversos aspectos de los objetos que se van a supervisar. Los contadores de rendimiento son mediciones del estado o de la actividad del sistema. Como se han mencionado anteriormente, se pueden incluir en el sistema operativo o formar parte de aplicaciones individuales. Por tanto, adems de los objetos propios del sistema operativo -proceso, memoria, etc.-, SQL Server incluye objetos y contadores que el Monitor de sistema puede utilizar para supervisar la actividad de los equipos en los que se ejecute una instancia de SQL Server. -Vg. el objeto Bloqueos de SQL Server contiene los contadores Nmero de interbloqueos/seg y Tiempos de espera de bloqueo (ms)-. La informacin recopilada sobre la instancia de SQL Server -este es nuestro principal objetivo- puede ser presentada en forma de grfico, reflejada en registros o dispuesta en informes. La informacin capturada permite configurar alertas de rendimiento para enviar mensajes cuando suceden ciertos eventos o se alcanzan determinados umbrales. Recuerde! La supervisin de un equipo en el que se ejecuta el Monitor de sistema puede afectar un poco al rendimiento del equipo. Por tanto, registre los datos del Monitor de sistema en otro disco o en otro equipo para reducir as el efecto en el equipo que est supervisando, o bien ejecute el Monitor de sistema desde un equipo remoto. Supervise slo los contadores en los que est interesado. Si supervisa demasiados contadores, la sobrecarga de uso de los recursos se agrega al proceso de supervisin y afecta al rendimiento del equipo que se est supervisando Al supervisar SQL Server y el sistema operativo Microsoft Windows para investigar problemas relacionados con el rendimiento, hay tres reas principales en las que debe concentrarse inicialmente: actividad del disco, uso del procesador y uso de la memoria. Puede resultar til supervisar el sistema operativo Windows y los contadores de SQL Server al mismo tiempo para determinar las posibles correlaciones entre el rendimiento de SQL Server y el de Windows -Vg. la supervisin simultnea de los contadores de E/S de disco de Windows y los contadores del Administrador de bfer de SQL Server puede mostrar el comportamiento del sistema en su totalidad-.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Lecturas recomendadas:

    Supervisar la actividad del disco [1]. Localizador (ndice): supervisar [SQL Server], actividad de disco

    Supervisar el uso de la CPU [1]. Localizador (ndice): supervisar [SQL Server], uso de la CPU

    Supervisar el uso de la memoria [1]. Localizador (ndice): supervisar [SQL Server], uso de la memoria

    Recuerde! Para iniciar el Monitor de sistema en Windows ... en el men Inicio, haga clic en Ejecutar, escriba perfmon.exe en el cuadro de texto y haga clic en Aceptar. En Windows 2008 Server puede encontrarlo en Inicio Herramientas administrativas Monitor de confiabilidad y rendimiento.

    El monitor del sistema incluye las siguientes herramientas de trabajo: Herramientas de supervisin (Monitor de rendimiento y Monitor de confiabilidad), Conjuntos de recopiladores de datos (Registros y alertas de rendimiento) e Informes. Adems, como puede comprobar en la imagen, tambin proporciona acceso al Monitor de recursos de Windows desde donde se puede obtener informacin sobre el uso de los recursos de hardware (CPU, disco, red y memoria) y los recursos del sistema (incluidos identificadores y mdulos) usados por el sistema operativo, los servicios y las aplicaciones en ejecucin. Podemos usar el Monitor de recursos para detener procesos, iniciar y detener servicios, analizar interbloqueos de procesos, ver cadenas de espera de subprocesos e identificar los procesos que estn bloqueando archivos.

  • La tarea de monitorizacin de una determinada instancia del motor de base de datos de SQL Server, debe comenzar por la determinacin de los objetivos de supervisin y, por consiguiente, de la eleccin de aquellos objetos y contadores que son necesarios controlar. Existe una abundante coleccin de objetos, tanto de sistema operativo como de SQL Server, que pueden ser explorados y cada uno de ellos dispone de los suficientes contadores como para hacer que su adecuada eleccin, en funcin de los objetivos, sea tediosa y complicada. Tambin, es difcil detectar si existen o no problemas en funcin de los valores recogidos en los diferentes contadores. Puesto que no existe una regla fija de actuacin, lo ms recomendable es capturar los valores de ciertos contadores significativos cuando el sistema se encuentra en un funcionamiento ptimo y crear con ellos una lnea base de rendimiento. A continuacin, se muestra en una tabla resumen de aquellos contadores considerados de mayor utilidad.

    OBJETO CONTADOR VALORES PTIMOS

    DESCRIPCIN.

    CONTADORES DE SISTEMA Sistema El objeto de rendimiento Sistema incluye los contadores aplicables a ms de una instancia de procesador de

    componentes en el equipo. Longitud de la cola del

    procesador Entre 4 y 10 por CPU.

    Nmero de subprocesos listos para ejecutarse en la cola del procesador

    Memoria El objeto de rendimiento Memoria incluye los contadores que describen el comportamiento de la memoria fsica y virtual en el equipo

    Mbytes disponibles > 100MB Cantidad de memoria fsica, en Megabytes, disponible inmediatamente para su asignacin a un proceso o para uso del sistema

    Errores de pgina/s Nmero promedio de pginas con errores por segundo -normalmente requiere acceso al disco-.

    Pginas/s Velocidad a la que las pginas se leen o se escriben en disco para resolver errores severos de pgina.

    Disco Fsico El objeto de rendimiento Disco lgico incluye los contadores que supervisan las particiones lgicas de unidades de disco duro o fijo.

    Promedio de segundos de disco/escritura

  • Index searches/sec - Bsquedas en ndices/seg

    Nmero de bsquedas en ndices por segundo.

    Buffer Manager

    El acceso fsico a las pginas de base de datos en disco se supervisa mediante los contadores de Buffer Manager

    Buffer cache hit ratio - Frecuencia de aciertos de cach del bfer

    > 90 % Porcentaje de pginas encontradas en la cach del bfer sin necesidad de leer el disco

    Page reads/sec - Lecturas de pgina/seg

    < 90 Nmero de lecturas de pgina fsicas emitidas por segundo.

    Page wirtes/sec - Escrituras de pgina/seg

    < 90 Nmero de escrituras de pgina fsicas emitidas por segundo.

    Total pages - Pginas totales

    Nmero de pginas en el grupo de bferes, incluidas las pginas de base de datos, disponibles y descartadas.

    Databases Proporciona informacin acerca de una base de datos de SQL Server, como la cantidad de espacio de registro disponible o el nmero de transacciones activas en la base de datos.

    Active transactions -Transacciones activas

    Nmero de transacciones activas de la base de datos.

    Data file size - Tamao de los archivos de datos (KB)

    Tamao acumulado (en kilobytes) de todos los archivos de datos de la base de datos, incluido el crecimiento automtico. La supervisin de este contador resulta til, por ejemplo, para determinar el tamao correcto de tempdb.

    Log growths -Crecimiento del registro

    0 Nmero total de veces que se ha ampliado el registro de transacciones de la base de datos. En cada ampliacin se detiene toda la actividad, por lo que es preferible realizarlo en horas de mantenimiento y no de trabajo.

    Percent log used - Porcentaje utilizado del registro

    < 80% Porcentaje de espacio en el registro que est en uso.

    Transactions/sec - Transacciones/seg

    Nmero de transacciones iniciadas para la base de datos por segundo.

    General Statistics

    Proporciona informacin acerca de la actividad general de todo el servidor, como el nmero de usuarios conectados a una instancia de SQL Server.

    Logins/sec - Inicios de sesin/seg

    Logouts/sec - Cierres de sesin/seg

  • Lock blocks - Bloqueos de cierre

    Nmero actual de bloqueos de cierre en uso en el servidor (actualizado peridicamente). Un bloqueo de cierre representa un recurso individual bloqueado, como una tabla, pgina o fila.

    SQL Statitics Proporciona informacin acerca de aspectos de consultas de Transact-SQL, como el nmero de lotes de instrucciones Transact-SQL que recibe SQL Server.

    Batch requests/sec - Solicitudes de lotes/seg

    Nmero de lotes de comandos de Transact-SQL recibidos por segundo. Un nmero alto de solicitudes de lotes significa un buen rendimiento, aunque depende de la carga de trabajo. Por tanto, debe ser consultado junto con las conexiones de usuario o utilizacin del procesador.

    SQL compilations/sec - Compilaciones SQL/seg

    < 10% del nmero de solicitudes de lotes/seg

    Nmero de compilaciones SQL por segundo. Indica el nmero de veces que se ha especificado la ruta de acceso al cdigo de compilacin. Incluye compilaciones causadas por recompilaciones de instrucciones en SQL Server. Cuando la actividad de usuarios de SQL Server es estable, este valor permanece fijo.

    Lectura recomendada:

    Usar objetos de SQL Server [1]. Localizador (ndice): Monitor de sistema de Windows [SQL Server], objetos

    Los contadores que utilizaremos para supervisar uno o ms objetos del sistema, o de SQL Server, deben agruparse creando un Conjunto de recopiladores de datos. Es posible utilizar una de las plantillas disponibles, aunque en nuestro caso nos resultar ms til crear manualmente la lista de los contadores de rendimiento que se desean registrar.

    lvaroHighlight

    lvaroHighlight

  • El siguiente paso consistir en agregar todos los contadores necesarios. Determinado el contenido del Conjunto recopilador de datos y establecido el periodo de muestra. Si se desea, se puede programar las condiciones de su activacin. Recuerde! En cualquier momento puede cambiar las condiciones sobre programacin, detencin o asignacin de tareas a la finalizacin de la recopilacin de datos, utilizando la ficha de Propiedades del Conjunto recolector de datos.

  • Inicio de la captura de datos de forma manual. Una vez detenida la ejecucin del recopilador, puede conocer los resultados a travs de la opcin de la entrada Informes, en sus diferentes vistas.

  • Para crear una alerta de rendimiento se procede de forma similar...

    Pero, tras iniciar la creacin de un Nuevo Conjunto de recopiladores de datos, debe seleccionar la opcin Alerta del contador de rendimiento.

    Determine que contadores van a disparar la alerta y establezca sus umbrales. Una vez guardado el recolector de datos. Puede, modificando sus Propiedades, establecer las acciones asociadas al disparo de la alerta. Ha saber, una anotacin el en registro de Windows (Aplicacin), el inicio de un supervisin de datos o la ejecucin de una determinada tarea WMI -Instrumental de administracin de Windows-.

  • d. Monitorizacin de eventos.

    Un evento es cada una de las acciones generadas dentro de una instancia del motor de base de datos de SQL Server. Son ejemplos de eventos las conexiones, errores y desconexiones de inicio de sesin, la ejecucin de instrucciones Transact-SQL, el inicio o finalizacin de lotes o procedimientos almacenados, los errores generales detectados, los bloqueos adquiridos, etc. La supervisin y registros de los eventos, ayuda al administrador a identificar y solucionar problemas de rendimiento. Cada evento que se puede supervisar es de una determinada Clase de evento, que contiene toda la informacin que puede proporcionar dicho evento organizada en columnas de datos. Las clases de eventos relacionados forman Grupos de eventos. -Vg. el grupo Security Audit est compuesto, entre otros, por los eventos Audit Login, Audit Login Failes, Audit Logout, etc.-. Lectura recomendada:

    Referencia de las clases de evento de SQL Server [1]. Localizador (ndice): eventos [SQL Server], clases de eventos

    La recopilacin y supervisin de eventos en una instancia de SQL Server se realiza mediante un Seguimiento SQL2. La ejecucin de un seguimiento SQL tiene como objetivo la captura de los eventos en el motor de base de datos conforme se van generando. La coleccin de eventos y datos devueltos constituye una traza. La definicin previa de la traza permite determinar la coleccin de clases de evento, columnas de datos y filtros -criterio que limita los eventos que se recopilan en una traza- que identifican los tipos de evento que se deben recopilar durante un seguimiento. Cuando se produce un evento que pertenece a una de las clases de eventos especificadas en un seguimiento, se registra el nombre del evento y los datos relacionados. Todos los datos generados por cada repeticin de un evento se muestran en la traza en una sola fila, con sus correspondientes columnas de datos que describen el evento de forma detallada, y que pueden ser almacenadas en un archivo o tabla de traza.

    SQL Server Profiler es la interfaz grfica que los usuarios pueden utilizar para realizar el seguimiento y supervisin de una instancia de Database Engine (Motor de base de datos) de SQL Server. Permite capturar datos acerca de cada evento que ocurre en la instancia del servidor y guardarlos en un archivo o en una tabla para analizarlos posteriormente.

    2 El concepto Seguimiento SQL puede ser sustituido por el de realizar una traza. Mientras que llamaremos traza al resultado de ejecutar un seguimiento.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Recuerde! Puede utilizar SQL Server Profiler para realizar actividades como: Seguir los pasos de consultas con problemas para buscar la causa de los mismos. Buscar y diagnosticar consultas de ejecucin lenta. Capturar la serie de instrucciones Transact-SQL que ha causado un problema. La traza guardada

    se puede utilizar despus para replicar el problema en un servidor de prueba en el que se pueda diagnosticar el problema.

    Supervisar el rendimiento de SQL Server para optimizar las cargas de trabajo. Establecer correlaciones entre contadores de rendimiento para diagnosticar problemas

    Para iniciar SQL Server Profiler, en el men Inicio, elija Todos los programas, Microsoft SQL Server 2008, Herramientas de rendimiento y, a continuacin, haga clic en SQL Server Profiler.

    La definicin de una traza o seguimiento implica la especificacin de sus propiedades generales, -como el nombre, el destino de los datos del seguimiento y la fecha y hora de la finalizacin de seguimiento- y, por supuesto, la lista de eventos que se van a analizar, con sus columnas y filtros a aplicar. Esta ltima operacin puede realizarse directamente, a partir de una plantilla predefinida de SQL Server Profiler o de una plantilla de usuario. Recuerde! Si se supervisa SQL Server con frecuencia, utilice plantillas para analizar el rendimiento. Las plantillas capturan los mismos datos de eventos cada vez y utilizan la misma definicin de seguimiento para supervisar los mismos eventos. No tendr que definir las clases de eventos y las columnas de datos cada vez que cree un seguimiento Para crear una nueva plantilla ...

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Una vez que a la plantilla se haya asignado un nombre identificativo, se deber seleccionar los eventos de nuestro inters. Recuerde! Las distintas clases de eventos estn organizadas en categoras de eventos que permiten supervisar el comportamiento de distintos recursos.

    Elija la categora implicada y marque los eventos necesarios. A la vez seleccione las columnas de informacin sobre el evento que le resultan de inters para su supervisin

    Si se considera necesario, pueden organizarse las columnas e incluso agrupar los registros de los eventos por alguna de ellas

  • y establecer las condiciones de filtrado para los valores que nos interesan de algunas columnas.

    Una vez establecidas todas las condiciones, haga clic sobre el botn Guardar para almacenar la plantilla. Recuerde! Es importante distinguir entre guardar archivos de seguimiento -archivo de traza- y guardar plantillas de seguimiento. Guardar un archivo de seguimiento implica guardar los datos de eventos capturados en un lugar especificado. Guardar una plantilla de seguimiento implica guardar la definicin del seguimiento, como las columnas de datos, las clases de eventos o los filtros especificados. Para crear una traza o nuevo seguimiento ... Recuerde! El seguimiento se realiza de una instancia concreta, a la cual deberemos conectarnos y, por tanto, deberemos tener permiso para realizar esta accin.

  • Detalle de las propiedades generales y plantilla a utilizar.

    En la imagen, se muestra que los datos de la traza se almacenarn en una tabla de la base de datos master llamada db_control_acceso. Es posible modificar la lista y condiciones de los eventos que originalmente se definieron en la plantilla. En la imagen, se ha aadido un nuevo evento a los especificados en la plantilla: Audit Login Failed.

    Al hacer clic sobre el botn Ejecutar comenzar el proceso de supervisin.

  • El seguimiento finaliza bien porque se alcanza la fecha y hora programada o por decisin del usuario -clic sobre el botn Detener el seguimiento seleccionado de la barra de herramientas-. Los datos de la traza se muestran en la ventana correspondiente y pueden ser almacenados en un archivo de seguimiento -extensin *.trc- para su posterior anlisis. Recuerde! Guarde los datos de los eventos capturados en un archivo o una tabla de SQL Server cuando necesite analizar o reproducir los datos capturados ms adelante. Utilice un archivo de seguimiento para lo siguiente: Utilice un archivo de seguimiento o una tabla de seguimiento para crear una carga de trabajo a

    fin de utilizarla como entrada para el Asistente para la optimizacin de motor de base de datos. Utilice un archivo de seguimiento para capturar eventos y enviar el archivo de seguimiento a un

    proveedor de asistencia tcnica para su anlisis. Utilice las herramientas de procesamiento de consultas de SQL Server para tener acceso a los

    datos o verlos en el SQL Server Profiler. Slo pueden tener acceso directo a la tabla de seguimiento los miembros de la funcin fija de servidor sysadmin o el creador de la tabla.

    En el caso de que as se haya especificado, estos mismos datos se encuentran disponibles en formato tabla de una base de datos.

    lvaroHighlight

  • Recuerde! Utilice el SQL Server Profiler para supervisar nicamente los eventos en los que est interesado. Si las trazas son demasiado grandes, puede filtrarlas a partir de la informacin que desea, de forma que slo se recopile un subconjunto de los datos del evento. Si se supervisan demasiados eventos, aumentar la sobrecarga del servidor y el proceso de supervisin, y podra hacer que el archivo o la tabla de traza crezcan demasiado, especialmente cuando el proceso de supervisin se realiza durante un perodo prolongado de tiempo.

    e. Anlisis de consultas.

    Muchos de los problemas de rendimiento de un servidor pueden ser solucionados ajustando el comportamiento del servidor en el sistema. Sin embargo, otros problemas de rendimiento no se pueden resolver de esta forma. Se deben solucionar mediante el anlisis de las consultas y actualizaciones que las aplicaciones envan a la base de datos, y la forma en que estas consultas y actualizaciones interactan con los datos y el esquema de la base de datos. El anlisis de las consultas implica: Determinar si realmente las consultas son el origen de los problemas de rendimiento del servidor.

    Como ya sabemos, es posible que el problema de rendimiento est relacionado con un componente distinto a las consultas -Vg. lentitud de la red, deficiencias en el equipo fsico donde se ejecuta SQL Server (el Monitor de sistema de Windows puede utilizarse para supervisar el rendimiento de SQL Server y de los componentes no relacionados con SQL Server), inadecuado diseo fsico de la base de datos, etc.-.

    Si el problema est relacionado con las consultas qu consulta o conjunto de consultas estn implicado?

    Para identificar las consultas que causan problemas puede utilizarse, por ejemplo, el Analizador de SQL Server -SQL Server Profiler3- o recurrir a ciertas funciones de sistemas tiles en esta tarea. Ejemplo. La siguiente instruccin nos permite conocer qu consultas, de las ejecutadas recientemente,

    estn siendo ms costosas. La informacin deseada se extrae de la vista dm_exec_query_stats que almacena estadsticas sobre la ejecucin de consultas. SELECT TOP (20) q.text, s.total_elapsed_time, s.max_elapsed_time, s.min_elapsed_time, s.last_elapsed_time, s.execution_count, last_execution_time, * FROM sys.dm_exec_query_stats as s cross apply sys.dm_exec_sql_text(plan_handle) AS q WHERE s.last_execution_time > DateAdd(mi,-1500,GetDate()) AND text not like '%sys.%' -- eliminar esta propia consulta ORDER BY s.total_elapsed_time DESC

    3 Consulte los ejercicios prcticos de esta unidad didctica para comprender como SQL Server Profiler puede ayudarnos a identificar consultas lentas.

    lvaroHighlight

    lvaroHighlight

  • Una vez identificadas las consultas de ejecucin lenta cmo puede realizarse su anlisis?4

    El motor de base de datos de SQL Server permite obtener el Plan de Ejecucin de cada consulta, u operacin de actualizacin, en el que muestra cmo se desplaza por tablas y utiliza ndices para obtener acceso a datos o procesarlos. El examen del plan de ejecucin permite el anlisis de las consultas lentas y la determinacin de las causas del problema. El plan de ejecucin describe la secuencia de operaciones, fsicas y lgicas, que SQL Server realizar con el objeto de cumplir la consulta y producir el conjunto de resultados deseado. El plan de ejecucin lo genera un componente motor de la base de datos llamado Optimizador de consultas durante la fase de optimizacin del procesamiento de la consulta, este tiene en cuenta muchos factores diferentes, como los predicados de bsqueda en la consulta, las tablas implicadas y sus condiciones de combinacin, la lista de columnas devueltas y la presencia de ndices tiles que pueden servir como rutas de acceso eficaces a los datos. Para las consultas complejas, el nmero de todas las permutaciones posibles puede ser muy grande, por lo que el Optimizador de consultas no evala todas posibilidades, sino que en su lugar intenta encontrar un plan que sea "lo suficientemente bueno" para una consulta determinada. Esto es porque el encontrar un plan perfecto no siempre es posible; e incluso cuando es posible, el costo de la evaluacin de todas las posibilidades para encontrar que el plan perfecto podra fcilmente tener ms peso que cualquier ganancia de rendimiento. Desde el punto de vista de los administradores de bases de datos, es importante comprender el proceso y sus limitaciones.

    Recuerde! Puede visualizar los planes de ejecucin utilizando los siguientes mtodos: SQL Server Management Studio.

    Muestra un plan de ejecucin grfico estimado (las instrucciones no se ejecutan) o un plan de ejecucin grfico real (con instrucciones ejecutadas), que puede guardar y ver en SSMS.

    Opciones de la instruccin SET de Transact-SQL. El uso de opciones de la instruccin SET de Transact-SQL permite producir planes de ejecucin estimados y reales con formato XML o texto.

    Clases de evento del Analizador de SQL Server Puede seleccionar clases de evento del Analizador de SQL Server para incluirlas en trazas que producen planes de ejecucin estimados y reales con formato XML o texto en los resultados de la traza.

    Planes de ejecucin grficos con SSMS La utilizacin de SSMS para la obtencin del plan de ejecucin que permita el anlisis de una consulta o script, comienza con la escritura o apertura del archivo que contiene el cdigo, en el editor de consultas. Una vez cargado el script en el editor de consultas de Management Studio, se elegir si se muestra un plan de ejecucin estimado o el plan de ejecucin real haciendo clic en el botn Mostrar plan de ejecucin estimado o Incluir plan de ejecucin real en la barra de herramientas del editor de consultas.

    4 El anlisis de las consultas puede determinar que sea necesario un proceso de optimizacin de la base de datos, que puede implicar modificaciones en su diseo, reescritura de las consultas utilizadas o el establecimiento del adecuado conjunto de ndices. Vanse los apartados correspondientes sobre optimizacin, ms adelante en esta unidad didctica.

    lvaroHighlight

    lvaroHighlight

  • Si se hace clic en Mostrar plan de ejecucin estimado, se analiza el script y se genera un plan de ejecucin estimado. Si, por el contrario, se hace clic en Incluir plan de ejecucin real, debe ejecutarse el script antes de que se genere el plan de ejecucin. Cuando el script se haya analizado o ejecutado, en la ficha Plan de ejecucin puede verse una representacin grfica del mismo Ejemplo. La salida del plan de ejecucin grfico de SQL Server Management Studio se lee de derecha a izquierda y de arriba a abajo y est formado por un conjunto anidado de operadores que representan los pasos que tiene que realizar el motor para ejecutar la consulta. Recuerde! Debe tener en cuenta las siguientes directrices para interpretar la salida de un plan de ejecucin grfico en SSMS: Cada nodo de la estructura en rbol se representa como un icono que especifica el operador lgico

    y fsico utilizado para ejecutar esa parte de la consulta o instruccin. Cada nodo est relacionado con un nodo principal. Los nodos secundarios que tienen el mismo

    nodo principal se dibujan en la misma columna. Sin embargo, no todos los nodos de la misma columna tienen necesariamente el mismo nodo principal. Cada nodo se conecta a su nodo principal mediante reglas con puntas de flecha.

    Los operadores se muestran como smbolos relacionados con un nodo principal especfico. El ancho de la flecha es proporcional al nmero de filas. Se utiliza el nmero real de filas cuando

    est disponible. Si no, se utiliza el nmero estimado de filas. Cuando la consulta contiene varias instrucciones, se dibujan varios planes de ejecucin de la

    consulta. Las partes de las estructuras en rbol se determinan por el tipo de instruccin ejecutada. Los colores individuales se han asociado a cada uno de los tres tipos de icono: los iconos del

    iterador (operadores lgicos y fsicos) son azules, los iconos de los cursores son amarillos y los elementos del lenguaje son verdes.

  • Lectura recomendada:

    Iconos de plan de ejecucin grfico (SQL Server Management Studio) [1]. Localizador (ndice): plan de ejecucin grfico [SQL Server]

    Los operadores describen cmo SQL Server ejecuta una consulta o una instruccin DML (Lenguaje de manipulacin de datos). Los operadores se clasifican como lgicos y fsicos. Los operadores lgicos describen una operacin de procesamiento de consulta relacional a nivel conceptual. Los operadores fsicos implementan realmente la operacin definida por un operador lgico utilizando un mtodo o algoritmo concreto. -Vg. "combinacin" es una operacin lgica, mientras que "combinaciones de bucles anidados" es un operador fsico-. Una vez que el Optimizador de consultas ha creado el plan, elige el operador fsico ms eficaz para cada operador lgico. Recuerde! Normalmente, varios operadores fsicos pueden implementar una operacin lgica. Sin embargo, en pocas ocasiones un operador fsico puede implementar varias operaciones lgicas

    Lectura recomendada:

    Referencia sobre los operadores lgicos y fsicos [1]. Localizador (ndice): operadores lgicos [SQL Server], planes de ejecucin operadores fsicos [SQL Server]

    Cada nodo muestra informacin sobre herramientas cuando el cursor se coloca sobre aqul, como se describe en la siguiente tabla. No todos los nodos de un plan de ejecucin grfico contienen todos los elementos de informacin sobre herramientas descritos aqu.

    Elemento de informacin sobre

    herramientas Descripcin

    Operacin fsica

    Operador fsico utilizado, como Hash Join o Nested Loops. Los operadores fsicos presentados en color rojo indican que el Optimizador de consultas ha emitido una advertencia, por ejemplo, la falta de estadsticas de columna o de predicados de combinacin. Esto puede causar que el Optimizador de consultas elija un plan de consulta menos eficaz que el esperado Cuando el plan de ejecucin grfico sugiere la creacin o actualizacin de las estadsticas, o la creacin de un ndice, las estadsticas e ndices de columna que faltan pueden crearse o actualizarse inmediatamente mediante los mens de acceso directo del Explorador de objetos de SQL Server Management Studio.

    Operacin lgica Operador lgico que coincide con el operador fsico, como el operador Inner Join. El operador lgico se enumera despus del operador fsico en la parte superior de la informacin sobre herramientas.

    Tamao de fila estimado Tamao estimado de la fila creada por el operador (bytes).

    Costo de E/S estimado

    Costo estimado de toda la actividad de E/S para la operacin. Este valor debe ser lo ms pequeo posible.

    Costo de CPU Costo estimado de toda la actividad de la CPU para la operacin.

    lvaroHighlight

  • estimado

    Costo de operador estimado

    Costo del Optimizador de consultas para ejecutar esta operacin. El costo de esta operacin como porcentaje del costo total de la consulta se muestra entre parntesis. Debido a que el motor de consultas selecciona la operacin ms eficaz para realizar la consulta o ejecutar la instruccin, este valor debe ser el menor posible.

    Costo de subrbol estimado

    Costo total del Optimizador de consultas para ejecutar esta operacin y todas las operaciones del mismo subrbol anteriores a sta.

    Nmero de filas estimado o Nmero de filas.

    Nmero de filas que produce el operador estimado o real dependiendo del tipo del plan de ejecucin.

    El Optimizador de consultas utiliza un mtodo basado en el costo para determinar el operador fsico que implementar un operador lgico. El conocimiento del funcionamiento de los operadores fsicos junto con el estudio del costo individual de cada uno y como afecta este al costo global de la consulta, puede condicionar los cambios necesarios para su optimizacin, que por lo general, pasarn por crear las estadsticas e ndices adecuados para mejorar el rendimiento de la consulta. La optimizacin de las consultas basadas en su bajo costo puede que no siempre sea la mejor opcin. La estimacin se basa en las estadsticas de distribucin de datos que estn disponibles para el Optimizador cuando evala cada tabla implicada en la consulta. Si esas estadsticas se pierden o quedan obsoletas, el Optimizador de consultas carecer de la informacin esencial necesaria para el proceso de optimizacin de consultas y, por lo tanto, es probable que las estimaciones queden fuera de la marca. En dichos casos, el Optimizador seleccionar un plan menos ptimo tanto sobrestimando como subestimando los costos de ejecucin de los distintos planes. Por lo tanto, al comparar los planes de ejecucin de las consultas, no debe depender nicamente del costo estimado de la consulta. En su lugar, incluya el resultado de las opciones STATISTICS I/O y STATISTICS TIME en el anlisis, para entender cul es realmente el costo de la ejecucin en trminos de E/S y tiempo de la CPU.

    lvaroHighlight

  • SET STATISTICS TIME

    Muestra el nmero de milisegundos necesarios para analizar, compilar y ejecutar cada instruccin.

    SET STATISTICS IO Hace que SQL Server muestre informacin relacionada con la cantidad de actividad de disco generada por las instrucciones Transact-SQL.

    lvaroHighlight

    lvaroHighlight

  • 2. OPTIMIZACIN DE SQL SERVER. Tras la supervisin/anlisis del sistema y, una vez, confirmada la desviacin del comportamiento de este respecto a la lnea base de rendimiento deseado, se deben aislar el origen de las anomalas detectadas y aplicar las oportunas medidas correctoras que permitan alcanzar un rendimiento optimo. Entre las medidas que pueden tomarse destacamos: o Agregar ms hardware.

    Aunque a veces resulta til ampliar los recursos hardware para mejor el rendimiento, a menudo se pueden encontrar otras alternativas menos caras. Adems, las necesidades de hardware dependen de factores como el nmero de sesiones o usuarios simultneos, el rendimiento de las transacciones y el tipo de operaciones que se realicen en la base de datos. Vg. los requisitos de hardware de una base de datos que contenga datos que se actualicen con poca frecuencia (para una biblioteca escolar, por ejemplo) sern inferiores a los requisitos de un almacn de datos de 1 terabyte que contenga datos de acceso frecuente de ventas, productos y clientes de una gran compaa. Adems de los requisitos de almacenamiento en disco, se necesitar ms memoria y procesadores ms rpidos para que el almacn de datos pueda guardar en la memoria cach ms datos y para que las consultas que hacen referencia a grandes cantidades de datos se puedan procesar con ms rapidez.

    o Optimizar SQL Server.

    Microsoft SQL Server ajusta automticamente muchas de las opciones de configuracin del servidor, por lo que los administradores del sistema deben hacer pocos ajustes, o incluso ninguno. El administrador del sistema puede modificar estas opciones de configuracin, aunque se recomienda mantener los valores predeterminados. La configuracin predeterminada permite que SQL Server se optimice automticamente segn las condiciones del tiempo de ejecucin. Vg. El componente del administrador de memoria de Microsoft SQL Server elimina la necesidad de realizar la administracin manual de la memoria disponible para SQL Server. SQL Server determina dinmicamente al iniciarse la cantidad de memoria que va a asignar sobre la base de la cantidad de memoria que el sistema operativo y otras aplicaciones utilizan actualmente. Al cambiar la carga del equipo y de SQL Server, tambin cambia la memoria asignada. No obstante si se cree necesario se pueden utilizar opciones como min server memory, max server memory, min memory per query, etc. para influir en el uso y rendimiento de la memoria que utiliza SQL Server.

    o Optimizar la base de datos.

    Mejorando el diseo lgico y fsico. Escribiendo mejores consultas. Gestionando adecuadamente ndices tiles.

    o Resolver los problemas de contencin y de simultaneidad.

    Coordinar la actividad de lectura frente a la de escritura. Minimizar la contencin de bloqueos. Evitar los interbloqueos.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • o Optimizar la aplicacin cliente.

    Utilizar procedimientos almacenados en lugar de consultas "ad hoc". Analizar y establecer prioridades en la combinacin de transacciones. Descargar datos y procesos del servidor cuando sea apropiado.

    a. Revisin del diseo de la base de datos. El correcto diseo, tanto lgico como fsico, de la base de datos constituye el punto de partida en la consecucin de un rendimiento ptimo del sistema. El diseo lgico de la base de datos, que incluye las tablas y sus relaciones junto con las restricciones existentes, es la clave de una base de datos relacional optimizada. Un diseo lgico deficiente puede comprometer el rendimiento de todo el sistema. El objetivo fundamental del diseo lgico es obtener un esquema lgico normalizado en el que se encuentre los datos convenientemente separados en varias tablas relacionadas. Pero tambin debemos tener en cuenta que a medida que progresa la normalizacin, tambin aumenta el nmero y la complejidad de las combinaciones necesarias para recuperar los datos. Un nmero muy elevado de combinaciones relacionales complejas entre demasiadas tablas puede afectar al rendimiento. Vg. Se considera que un diseo lgico est razonablemente normalizado cuando existen pocas consultas, de las que se ejecutan frecuentemente, que impliquen combinaciones de ms de cuatro tablas. Lecturas recomendadas:

    Apuntes del mdulo Gestin de bases de datos del primer curso del ciclo. Normalizacin [1].

    Localizador (ndice): normalizacin [SQL Server] Recuerde! Que cuando disea una base de datos, puede que necesite realizar una estimacin del tamao que tendr la base de datos cuando est llena. Esta estimacin puede ayudarle a determinar la configuracin de hardware que necesitar para conseguir el adecuado rendimiento que necesitan las aplicaciones. Por otro lado, el rendimiento de los sistemas de bases de datos depende de una configuracin eficaz de las estructuras de diseo fsico de las bases de datos que componen dichos sistemas. Entre las estructuras de diseo fsico se incluyen ndices, ndices agrupados, vistas indexadas y particiones, cuyo objetivo es mejorar el rendimiento y la facilidad de uso de las bases de datos.

    lvaroHighlight

    lvaroHighlight

  • b. Optimizacin de consultas.

    Al optimizar el servidor de la base de datos se necesita tambin mejorar el rendimiento de las consultas individuales. Esto es igual de importante, o incluso ms, que optimizar otros aspectos de la instalacin del servidor que afectan al rendimiento, como las configuraciones de hardware y software. Incluso si el servidor de la base de datos se ejecuta en el hardware ms eficaz, su rendimiento puede verse afectado negativamente por un conjunto de consultas que se comporten incorrectamente. De hecho, incluso una sola consulta incorrecta, a veces denominada "consulta descontrolada", puede provocar serios problemas de rendimiento a la base de datos. De manera opuesta, el rendimiento general de la base de datos puede mejorarse en gran medida al optimizar el conjunto de las consultas ms costosas o que se ejecutan con mayor frecuencia. Para optimizar una consulta individual, normalmente se comienza observando el plan de ejecucin de esa consulta, generado por el Optimizador de consultas, lo que nos permite comprobar los recursos y operaciones que precisa la consulta para su ejecucin. Recuerde! Algunas consultas consumen, intrnsicamente, ms recursos que otras -Vg. las consultas que devuelven grandes conjuntos de resultados y las que contienen clusulas WHERE que no son nicas siempre consumen muchos recursos- y ningn grado de inteligencia del Optimizador de consultas puede eliminar el costo de recursos de estas construcciones en comparacin con una consulta menos compleja. SQL Server utiliza siempre el mejor plan de acceso ptimo, pero la optimizacin de consultas est limitada por lo que es posible. Aunque el tiempo de respuesta de las consultas depende muy mucho de algunos aspectos fsicos del sistema que pueden ser mejorados, como agregando ms memoria, utilizando mas de un procesador, etc. y de la existencia de un conjunto adecuado de ndices tiles -como veremos ms adelante-, en ocasiones es necesario revisar su estructura y reescribirlas.

    Al escribir una sentencia Transact-SQL deberamos tener en cuenta, entre otras, las siguientes consideraciones:

    Evitar el uso innecesario de la clusula DISTINCT.

    Esta genera una gran cantidad de trabajo extra, consumiendo muchos recursos, ya que obliga SQL Server a crear un ndice temporal para hacer cumplir la condicin de valores distintos y en muchos casos su uso es innecesario. En su lugar, si es posible, se utilizar el operador EXISTS que presenta un mayor rendimiento.

    Ejemplo. Uso de la clusula DISTINCT, para obtener el ttulo de las obras de las cuales hay existencias

    en nuestra Biblioteca.

    SELECT DISTINCT titulo FROM Obras AS O JOIN Existencias AS E ON O.isbn=E.isbn

    lvaroHighlight

  • Alternativa ms eficiente.

    SELECT titulo FROM Obras AS O WHERE EXISTS (SELECT * FROM Existencias AS E WHERE E.isbn=O.isbn)

    Calificar totalmente el nombre de cada uno de los objetos utilizados. Esto evitar una bsqueda

    en el esquema correspondiente para poder diferenciar dos objetos con el mismo nombre.

    Ejemplo.

    SELECT O.titulo FROM Biblioteca.dbo.Obras AS O WHERE EXISTS

    (SELECT * FROM Biblioteca.dbo.Existencias AS E WHERE E.isbn=O.isbn)

    No utilizar arbitrariamente ORDER BY. Los motivos son evidentes.

    La posibilidad de realizar la ordenacin en el lado del cliente siempre ser mejor que realizarla desde el lado del servidor SQL Server. En el caso que sea absolutamente necesario realizar la ordenacin en el lado del servidor SQL Server, deberemos atender a las siguientes recomendaciones: a) Mantener el nmero de filas a ordenar al mnimo, haciendo esto mediante la devolucin de

    aquellas filas que son absolutamente necesarias. b) Mantener el nmero de columnas a ordenar al mnimo. En otras palabras, no ordenar

    columnas no requeridas. c) Mantener el ancho (tamao fsico) de las columnas a ordenar al mnimo. d) Ordenar columnas con tipos de datos numricos en lugar de tipos de datos carcter.

    Limitar el conjunto resultado, devolviendo los datos que realmente se necesitan.

    Vg. especificando en un SELECT las columnas que son realmente necesarias evitando el uso de *, limitando el nmero de filas precisas utilizando TOP, etc.

    Ejemplo. Si solo es preciso acceder al isbn, titulo y autores de las cinco primeras obras, ejecutar:

    SELECT TOP 5 isbn,titulo,autores FROM Biblioteca.dbo.Obras en lugar de SELECT * FROM Biblioteca.dbo.Obras

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Configurar condiciones de bsqueda adecuadas.

    Una consulta que contiene un argumento de bsqueda aumenta las posibilidades de que el Optimizador de consultas seleccione un ndice. Para formar condiciones de bsqueda en el operador WHERE, mantendremos la informacin de la columna a un lado del operador y el criterio de bsqueda en el otro lado. Ejemplo. Utilice

    WHERE precio = 100/12 en lugar de WHERE precio * 12 = 100

    Recuerde! La preferencia de los operadores respecto al rendimiento es, de mayor a menor:

    1. = 2. >, >=, 30000 . Esta instruccin garantiza que el Optimizador no evaluar un ndice sobre precio.

    Uso del NOT IN. En el caso que se tenga que utilizar el operador NOT IN, tendremos que tener especial cuidado en su uso ya que posee un mal rendimiento ya que obliga al Optimizador de consultas a realizar una operacin de Scan. En su lugar mejor se utilizar las siguientes opciones ordenadas de mejor a peor rendimiento:

    lvaroHighlight

    lvaroHighlight

  • 1. Usar EXISTS o NOT EXISTS 2. Usar IN 3. Realizar un LEFT OUTER JOIN y chequear por una condicin NULL

    Cuando exista la posibilidad de elegir entre IN o EXISTS se usar siempre EXISTS, ya que tiene mejor rendimiento. Ejemplo. En este ejemplo las dos consultas son equivalentes, sin embargo la primera presenta un mayor

    rendimiento.

    SELECT idObra FROM Biblioteca.dbo.Existencias as E WHERE EXISTS (SELECT *

    FROM Biblioteca.dbo.Prestamos AS P WHERE P.idobra=E.idObra) SELECT idObra FROM Biblioteca.dbo.Existencias WHERE idOBra IN (SELECT idObra FROM Biblioteca.dbo.Prestamos)

    Mejores prcticas en el uso de LIKE. En el caso del operador LIKE es necesario entender que hay maneras ms ptimas que otras en el uso de dicho operador. Si la expresin que configura el patrn de bsqueda empieza con un comodn, no se puede utilizar un ndice, lo que hara ms lenta la bsqueda -igual que no sabra por dnde empezar en una gua telefnica si le dieran el apellido '%uiz' en lugar de 'Ruiz'-. Un comodn en una expresin o al final de la misma no impide la utilizacin de un ndice -igual que en una gua telefnica, sabra por dnde empezar a buscar si el nombre fuera 'Rui%', tanto si los apellidos 'Ruiz' y 'Ruiprez' estn en la gua como si no-.

    Concatenaciones del operadores AND.

    Si existe una clusula WHERE que incluye expresiones conectadas por dos o ms operadores AND, y no se usan parntesis, SQL Server evaluar desde la izquierda hacia la derecha en el orden que hayan sido escritas. Por esta razn se debe considerar lo siguiente cuando usemos el operador AND: a) Se identificar la expresin menos probable de suceder y se colocar en el primer lugar de la

    expresin AND. De este modo si una expresin AND es falsa la clusula finalizar inmediatamente ahorrando tiempo

    b) Si ambas partes de una expresin AND son iguales o tienen igual peso, y son falsas, se

    pondr la menos compleja primero. De este modo si es falsa la expresin se realizar menos trabajo para evaluar la expresin.

    lvaroHighlight

    lvaroHighlight

  • Subconsultas o Joins.

    Muchas de las instrucciones Transact-SQL que incluyen subconsultas se pueden formular tambin como combinaciones. Otras preguntas, en cambio, solo se pueden resolver como subconsultas. La ventaja de crear un operador JOIN consiste en que puede evaluar tablas en un orden distinto del definido por la consulta. La ventaja de usar una subconsulta es que normalmente no es necesario explorar todas las filas de la subconsulta para evaluar la expresin de sta. En Transact-SQL, normalmente no hay diferencias de rendimiento entre una instruccin que incluya una subconsulta y una versin semnticamente equivalente que no la incluya. Sin embargo, en algunos casos en los que se debe comprobar la existencia de un elemento, una combinacin produce mejores resultados. De lo contrario, se debe procesar la consulta anidada para cada resultado de la consulta externa con el fin de garantizar la eliminacin de los duplicados. Ejemplo. En la base de datos Biblioteca la consulta, que determina el ttulo de los libros que han sido

    prestados en alguna ocasin,

    SELECT titulo FROM Biblioteca.dbo.Obras WHERE isbn IN (SELECT isbn

    FROM Biblioteca.dbo.Existencias AS E JOIN Biblioteca.dbo.Prestamos AS P ON

    E.idObra=P.idObra) AND claseMaterial='Libro'

    presenta un mejor rendimiento que su versin diseada utilizando solo subconsultas,

    SELECT titulo FROM Biblioteca.dbo.Obras WHERE isbn IN (SELECT isbn FROM Biblioteca.dbo.Existencias WHERE idObra IN (SELECT idObra

    FROM Biblioteca.dbo.Prestamos)) AND claseMaterial='Libro'

    Utilizacin de GROUP BY.

    Solo se usar GROUP BY en el caso de que sea necesario aplicar una funcin de agregacin y siempre teniendo en cuenta que es conveniente: a) Mantener el nmero de filas, a devolver por la consulta, tan pequeo como sea posible. b) Mantener el nmero de agrupaciones tan limitado como sea posible. c) No agrupar columnas redundantes. d) Si hay un JOIN en la misma SELECT que tiene un GROUP BY, intentar reescribir la

    consulta usando una subconsulta en lugar de usar un JOIN. Si es posible hacer esto, el rendimiento ser mayor. Si se tiene que usar un JOIN, se intentar hacer el GROUP BY por columna desde la misma tabla que la columna o columnas sobre la cual la se usa la funcin de agregacin.

    lvaroHighlight

    lvaroHighlight

  • e) Si se obtiene el mismo resultado, es preferible utilizar WHERE para filtrar filas en lugar de

    filtrar grupos con HAVING.

    Ejemplo. En la base de datos Biblioteca, la consulta, que nos proporciona el ttulo de las obras para las

    que existen ms de 10 ejemplares:

    SELECT O.titulo FROM Biblioteca.dbo.Obras AS O JOIN Biblioteca.dbo.Existencias AS E

    ON O.isbn=E.isbn GROUP BY O.isbn,O.titulo HAVING COUNT(*)>=10

    mejora en su rendimiento si es rescrita de la siguiente forma:

    SELECT titulo FROM Biblioteca.dbo.Obras WHERE isbn IN (SELECT isbn FROM Biblioteca.dbo.Existencias GROUP BY isbn HAVING COUNT(*)>=10)

    Sugerencias de consulta.

    Se deben utilizar las sugerencias de consultas slo si es necesario. Las consultas que utilizan sugerencias pueden impedir que el Optimizador de consultas seleccione un plan de ejecucin mejor.

    En scripts, objetos de programacin o en aplicaciones, deberemos tener presente: Incluir la instruccin SET NOCOUNT ON en la parte superior de cada procedimiento

    almacenado para evitar SQL nos informe del nmero de filas afectadas despus de cada operacin. Esto proporcionar un pequeo, pero notable, aumento del rendimiento.

    Comprobar la existencia de una fila en una tabla.

    Si necesitamos verificar si una fila existe en una tabla no debe usarse SELECT COUNT (*) para identificarla ya que es muy ineficiente y utiliza recursos de servidor de forma masiva. En su lugar la debe utilizarse la sentencia Transact-SQL IF EXISTS para determinar si la fila en cuestin existe ya que es mucho ms eficiente. La razn por la cual IF EXISTS es ms rpido que SELECT COUNT (*) es porque en el momento que dicha consulta encuentra el registro finaliza inmediatamente, mientras que COUNT(*) debe contar todas las filas.

    Usar procedimientos almacenados frente a consultas "ad hoc".

    El uso de los procedimientos almacenados en las aplicaciones nos ofrece ms potencia y flexibilidad, a la vez que presentan un mejor rendimiento. Su cdigo ya se encuentra chequeado, normalizado y optimizado y su utilizacin reduce el trfico por la red.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Si una aplicacin utiliza un bucle, considere la posibilidad de colocar el bucle en la consulta.

    A menudo, una aplicacin contendr un bucle que, a su vez, contendr una consulta con parmetros que se ejecuta muchas veces y ser necesario realizar un viaje de ida y vuelta en la red entre el equipo que ejecuta la aplicacin y SQL Server. En su lugar, cree una sola consulta ms compleja con una tabla temporal. Slo necesita un viaje de ida y vuelta en la red, y el Optimizador de consultas puede optimizar mejor la consulta nica.

    No usar el prefijo 'sp_' al crear un procedimiento almacenado. Cualquier procedimientos almacenados con el prefijo 'sp_' primero se busca en la base de datos master en lugar de la que se ha creado. Esto provocar un retraso en la ejecucin del procedimiento almacenado.

    Si se utiliza cursores, determinar si se puede escribir la consulta de cursor con un tipo de cursor ms eficaz (como un cursor de slo avance rpido) o con una nica consulta.

    Parametrizar las consultas permite la reutilizacin de los planes de ejecucin de la consulta almacenados en la memoria cach.

    c. Gestin de ndices.

    Como ya se ha mencionado con anterioridad, la revisin del diseo fsico de la base de datos es uno de los primeros elementos que deben aparecer en la lista de comprobacin para la optimizacin del rendimiento de SQL Server y, en particular, aquellos aspectos que hacen referencia a los ndices utilizados. El rendimiento de las consultas est ntimamente ligado al uso de los ndices disponibles. La capacidad del Optimizador de consultas de SQL Server para hacer un buen uso de los ndices durante la ejecucin de una consulta depende no slo de la creacin de ndices eficaces sino tambin del estado de estos. Recuerde! Un ndice es una estructura de disco asociada con una tabla o una vista que acelera la recuperacin de filas de la tabla o de la vista. Un ndice contiene claves generadas a partir de una o varias columnas de la tabla o la vista. Dichas claves estn almacenadas en una estructura (rbol B) que permite que SQL Server busque de forma rpida y eficiente la fila o filas asociadas a los valores de cada clave. Los ndices se crean automticamente cuando las restricciones PRIMARY KEY y UNIQUE se definen en las columnas de tabla o bien explcitamente con la sentencia CREATE INDEX -ver posibles opciones de creacin ms adelante-. Los ndices se mantienen automticamente para una tabla o vista cuando se modifican los datos de la tabla.

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • En SQL Server, son de nuestro especial inters los siguientes tipos de ndices:

    o Agrupado -cluster-

    Los ndices agrupados ordenan y almacenan las filas de los datos de la tabla o vista de acuerdo con los valores de la clave del ndice. Slo puede haber un ndice clster por cada tabla, porque las filas de datos slo pueden estar ordenadas de una forma. La nica ocasin en la que las filas de datos de una tabla estn ordenadas es cuando la tabla contiene un ndice clster. Cuando una tabla tiene un ndice clster, la tabla se denomina tabla agrupada. Si una tabla no tiene un ndice clster, sus filas de datos estn almacenadas en una estructura sin ordenar denominada montn.

    o No agrupado -Noncluster-

    Los ndices no agrupados tienen una estructura separada de las filas de datos. Un ndice no agrupado contiene los valores de clave de ndice no agrupado y cada entrada de valor de clave tiene un puntero a la fila de datos que contiene el valor clave. El puntero de una fila de ndice no agrupado hacia una fila de datos se denomina localizador de fila. La estructura del localizador de filas depende de si las pginas de datos estn almacenadas en un montn o en una tabla agrupada. Si estn en un montn, el localizador de filas es un puntero hacia la fila. Si estn en una tabla agrupada, el localizador de fila es la clave de ndice agrupada.

    o nico

    Un ndice nico garantiza que la clave de ndice no contenga valores duplicados y, por tanto, cada fila de la tabla o vista es en cierta forma nica.

    Tanto los ndices agrupados como los no agrupados pueden ser nicos.

    Lecturas recomendadas:

    Organizacin de tablas e ndices [1]. Localizador (ndice): organizacin de tablas [SQL Server]

    Estructuras de motn [1]. Localizador (ndice): montones

    Estructuras de ndices clster [1]. Localizador (ndice): ndices clster, arquitectura

    Estructuras de ndices no agrupados [1]. Localizador (ndice): ndices no agrupados [SQL Server], arquitectura

    i. Diseo de ndices.

    Los ndices bien diseados pueden reducir las operaciones de E/S de disco y consumen menos recursos del sistema, con lo que mejoran el rendimiento de las consultas. Cuando SQL Server ejecuta una consulta el Optimizador de consultas puede acceder a los datos de dos maneras:

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • 1. Recorriendo todas las pginas de datos de las tablas, en lo que se denomina un recorrido de tabla, realizando los siguientes pasos:

    Comienza por el principio de la tabla. Recorre pgina a pgina todas las filas de la tabla. Extrae las filas que cumplen los criterios de la consulta.

    2. Si utilizan ndices, SQL Server utiliza hace lo siguiente:

    Recorre la estructura de rbol del ndice para buscar las filas que solicita la consulta. Extrae nicamente las filas necesarias que cumplen los criterios de la consulta.

    El Optimizador de consultas evala cada mtodo disponible para recuperar datos y selecciona el mtodo ms eficiente. En primer lugar, se determina si existe un ndice. Posteriormente, el Optimizador determina si para el acceso a los datos resulta ms eficiente recorrer la tabla o utilizar el ndice. Se recurre al ndice si existe una coincidencia entre las columnas de indexacin de la tabla o vista y los elementos de la consulta como predicados de condiciones de bsqueda en la clusula WHERE, operaciones de combinacin y funciones de agregado.

    Recuerde! Un recorrido de la tabla genera muchas operaciones de E/S de disco y puede consumir recursos. No obstante, puede ser el mtodo ms eficaz si, por ejemplo, el conjunto de resultados de la consulta es un porcentaje elevado de filas de la tabla.

    Generalmente, la bsqueda del ndice es mucho ms rpida que la bsqueda de la tabla porque, a diferencia de la tabla, un ndice frecuentemente contiene muy pocas columnas por fila y las filas estn ordenadas. No obstante, si no hay ndices disponibles, el Optimizador de consultas debe utilizar un recorrido de la tabla.

    Lecturas recomendada: ndices. Bsqueda de filas [2].

    OBJETIVO. Disear y crear los ndices ms apropiados para su entorno de forma que el Optimizador de consultas disponga de una seleccin de ndices eficaces entre los que elegir5.

    El diseo de ndices es una tarea crtica. El diseo de ndices incluye la determinacin de las columnas que se utilizarn, la seleccin del tipo de ndice (por ejemplo, agrupado o no agrupado), la seleccin de opciones de ndice adecuadas y la determinacin de grupos de archivos o de la ubicacin de esquemas de particin.

    Es necesario examinar las consultas ms importantes que pueden afectar al rendimiento del sistema y crear los ndices especficamente para ayudar a estas consultas. Despus de agregar un ndice, se volver a ejecutar la consulta para comprobar si el rendimiento ha mejorado. En caso negativo, se suprimir el ndice.

    5 SQL Server proporciona el Asistente para la optimizacin de motor de base de datos como ayuda en el anlisis del entorno de la base de datos y en la seleccin de los ndices adecuados.

    lvaroHighlight

  • Consideraciones generales a tener en cuenta en el diseo de ndices. Acerca de la base de datos. Todas las tablas deben disponer de ndices para sus claves principales y externas. Si se utiliza un gran nmero de ndices en una tabla, el rendimiento de las instrucciones

    INSERT, UPDATE, DELETE y MERGE se ver afectado, ya que todos los ndices deben ajustarse adecuadamente a medida que cambian los datos de la tabla.

    Evite crear demasiados ndices en tablas que se actualizan con mucha frecuencia y mantenga

    los ndices estrechos, es decir, defnalos con el menor nmero de columnas posible.

    Utilice un nmero mayor de ndices para mejorar el rendimiento de consultas en tablas con pocas necesidades de actualizacin, pero con grandes volmenes de datos. Un gran nmero de ndices contribuye a mejorar el rendimiento de las consultas que no modifican datos, como las instrucciones SELECT, ya que el Optimizador de consultas dispone de ms ndices entre los que elegir para determinar el mtodo de acceso ms rpido.

    La indexacin de tablas pequeas puede no ser una solucin ptima, porque puede provocar

    que el Optimizador de consultas tarde ms tiempo en realizar la bsqueda de los datos a travs del ndice que en realizar un simple recorrido de la tabla. De este modo, es posible que los ndices de tablas pequeas no se utilicen nunca; sin embargo, sigue siendo necesario su mantenimiento a medida que cambian los datos de la tabla.

    Los ndices en vistas pueden mejorar de forma significativa el rendimiento si la vista

    contiene agregaciones, combinaciones de tabla o una mezcla de agregaciones y combinaciones. No es necesario hacer referencia de forma explcita a la vista en la consulta para que el Optimizador de consultas la utilice.

    Utilice el Asistente para la optimizacin de motor de base de datos para analizar las bases de

    datos y crear recomendaciones de ndices. Sobre las consultas. Cree ndices no agrupados en todas las columnas que se utilizan con frecuencia en

    predicados de condiciones de bsqueda, condiciones de combinacin de las consultas, agregados y a las que se tienen acceso de forma ordenada.

    Ejemplos. Suponga que la siguiente consulta se ejecuta habitualmente, para conocer la cantidad de

    prstamos realizados en cada mes de un determinado ao. SELECT MONTH(fechaPrestamo),COUNT(*) FROM Biblioteca.dbo.Prestamos WHERE YEAR(fechaPrestamo)=2005 GROUP BY MONTH(fechaPrestamo)

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

    lvaroHighlight

  • Si se desea mejorar considerablemente su rendimiento, sera preciso crear un ndice no agrupado para la columna fechaPrestamo de la tabla Prestamos. CREATE NONCLUSTERED INDEX IX_Prestamos_fechaPrestamo ON Biblioteca.dbo.Prestamos

    Evite agregar columnas innecesarias. Si agrega demasiadas columnas de ndice, puede

    reducir el espacio en disco y el rendimiento del mantenimiento del ndice.

    La utilizacin de ndices puede mejorar el rendimiento de las consultas, ya que los datos necesarios para satisfacer las necesidades de la consulta existen en el propio ndice. Es decir, slo se necesitan las pginas de ndice y no las pginas de datos de la tabla o el ndice agrupado para recuperar los datos solicitados; por tanto, se reduce la E/S global en el disco.

    Escriba consultas que inserten o modifiquen tantas filas como sea posible en una sola

    instruccin, en lugar de utilizar varias consultas para actualizar las mismas filas. Al utilizar slo una instruccin, se puede aprovechar el mantenimiento de ndices optimizados.

    Analice el tipo de la consulta y cmo se utilizan las columnas en ella -Vg. una columna utilizada

    en una consulta de coincidencia exacta sera una buena candidata para un ndice no agrupado o agrupado-.

    Lectura recomendada: Tipos de consultas e ndices [1].

    Localizador (ndice): ndices [SQL Server], tipos de consultas Sobre las columnas.

    Utilice una longitud corta en la clave de los ndices agrupados. Los ndices agrupados

    tambin mejoran si se crean en columnas nicas o que no admitan valores NULL. Las columnas con tipos de datos ntext, text, image, varchar(max), nvarchar(max) y

    varbinary(max) no se pueden especificar como columnas de clave de ndice. Sin embargo, los tipos de datos varchar(max), nvarchar(max), varbinary(max) y xml pueden participar en un ndice no agrupado como columnas de ndice sin clave.

    Examine la unicidad de las columnas. Un ndice nico en lugar de un ndice no nico con

    la misma combinacin de columnas proporciona informacin adicional al Optimizador de consultas y, por tanto, resulta ms til.

    Examine la distribucin de los datos en la columna. A menudo, se crean consultas cuya

    ejecucin es muy larga al indexar una columna con pocos valores nicos, o bien al realizar una combinacin en dicha columna. Se trata de un problema fundamental con los datos y la consulta, y normalmente no se puede resolver sin identificar esta situacin -Vg. una agenda telefnica ordenada por apellidos no localizar rpidamente a una persona si todas las personas de la ciudad se llaman Ruiz o Garca-.

  • Tenga en cuenta el orden de las columnas si el ndice va a contener varias columnas. La columna que se utiliza en la clusula WHERE en una condicin de bsqueda igual a (=), mayor que (>), menor que ( 20 bytes). Si la sobrecarga de mantener el ndice es mayor que sus ventajas. Si la tabla es muy pequea.

    ii. Creacin de un ndice.

    Una vez determinados los ndices que son necesarios, se debe elegir el mejor mtodo para su creacin. Los ndices pueden crearse de las siguientes maneras:

    1. Definiendo una restriccin PRIMARY KEY o UNIQUE en una columna mediante CREATE TABLE o ALTER TABLE. SQL Server Database Engine (Motor de base de datos de SQL Server) crea automticamente un ndice nico para hacer cumplir los requisitos de unicidad de una restriccin PRIMARY KEY o UNIQUE Si en la tabla se declara una PK.

    Si no existe ningn ndice agrupado, y no se especifica lo contrario, el sistema crea un ndice agrupado de valores nicos por las columnas que forman parte de la PK, que tiene el mismo nombre que el asignado para la restriccin.

    lvaroHighlight

  • Ejemplos. Supongamos que la tabla Obras no dispone de ningn ndice agrupado y se le aplica la

    restriccin de clave primaria.

    ALTER TABLE Biblioteca.dbo.Obras ADD CONSTRAINT PK_Obras PRIMARY KEY (isbn)

    -se establece la clave primaria y simultaneamente se crea un ndice agrupado de valores nicos, que presentar el mismo nombre que la restriccin PK_Obras -.

    ALTER TABLE Biblioteca.dbo.Obras

    ADD CONSTRAINT PK_Obras PRIMARY KEY CLUSTERED (isbn) -opcin de trabajo similar a la anterior-.

    Es posible establecer la restriccin de clave primaria de la tabla y asociarle un ndice no

    agrupado.

    ALTER TABLE Biblioteca.dbo.Obras ADD CONSTRAINT PK_Obras PRIMARY KEY NONCLUSTERED (isbn)

    Si ya existe un ndice agrupado en la tabla y se establece la restriccin de clave primaria, el sistema le asociar un ndice no agrupado de valores nicos. ALTER TABLE Biblioteca.dbo.Obras

    ADD CONSTRAINT PK_Obras PRIMARY KEY (isbn) -creacin de un ndice no agrupado de valores nicos-.

    ALTER TABLE Biblioteca.dbo.Obras

    ADD CONSTRAINT PK_Obras PRIMARY KEY NONCLUSTERED (isbn) -opcin de trabajo similar a la anterior -.

    ALTER TABLE Biblioteca.dbo.Obras6

    ADD CONSTRAINT PK_Obras PRIMARY KEY CLUSTERED (isbn) -esta opcin no es posible -.

    Si en la tabla se declara una restriccin UNIQUE.

    Si ya existe un ndice agrupado en la tabla, el sistema crea automticamente un ndice no agrupado de valores nicos, por los valores de la columna declarada como UNIQUE.

    Ejemplos.

    Puesto que en la tabla Editoriales ya existe un ndice agrupado (asociado a su PK) el establecimiento de la restriccin UNIQUE implica la creacin de un ndice no agrupado de valores nicos por la columna telfono

    ALTER TABLE Biblioteca.dbo.Editoriales

    ADD CONSTRAINT UQ_Editoriales_telefono UNIQUE (telefono)

    6 Recuerde que ndices agrupados solo puede haber uno por tabla.

  • ALTER TABLE Biblioteca.dbo.Editoriales ADD CONSTRAINT UQ_Editoriales_telefono UNIQUE NONCLUSTERED (telefono)

    -similar a la opcin anterior -.

    ALTER TABLE Biblioteca.dbo.Editoriales ADD CONSTRAINT UQ_Editoriales_telefono UNIQUE CLUSTERED (telefono)

    -no permitido -.

    Si la tabla no posee an un ndice agrupado, es posible declarar la restriccin de tal modo que se genere un ndice agrupado o no, de valores nicos.

    ALTER TABLE Biblioteca.dbo.Editoriales

    ADD CONSTRAINT UQ_Editoriales_telefono UNIQUE CLUSTERED (telefono) -opcion posible -.

    ALTER TABLE Biblioteca.dbo.Editoriales

    ADD CONSTRAINT UQ_Editoriales_telefono UNIQUE NONCLUSTERED (telefono) -opcion posible -.

    2. ndices independientes de restricciones, utilizando la sentencia CREATE INDEX..

    Se puede crear un ndice agrupado, de valores nicos o no, si an no existe alguno asociado a la tabla.

    Ejemplos.

    CREATE UNIQUE CLUSTERED INDEX IX_Editoriales_telefono ON Biblioteca.dbo.Editoriales(telefono) -ndice agrupado de valores nicos -.

    CREATE CLUSTERED INDEX IX_Editoriales_telefono ON Biblioteca.dbo.Editoriales(telefono) -ndice agrupado de valores no nicos -.

    En caso contrario solo sera posible crear ndices no agrupados, de valores nicos o no.

    Ejemplos.

    CREATE UNIQUE INDEX IX_Editoriales_telefono ON Biblioteca.dbo.Editoriales(telefono) -ndice no agrupado de valores nicos -. CREATE INDEX IX_Editoriales_telefono ON Biblioteca.dbo.Editoriales(telefono) -ndice no agrupado de valores no nicos -.

    Observe que la opcin por defecto es NONCLUSTERED y valores no nicos.

  • Recuerde! Puede suprimir un ndice que ya no es til con la sentencia DROP INDEX o deshabilitarlo/habilitarlo temporalmente con ALTER INDEX (DISABLE/ENABLE)

    Ejemplos.

    ALTER INDEX IX_Editoriales_telefono ON Biblioteca.dbo.Editoriales DISABLE DROP INDEX Biblioteca.dbo.Editoriales.IX_Editoriales_telefono

    - Opciones de ndices - Al crear o modificar un ndice (CREATE INDEX o ALTER INDEX) debe tenerse en cuenta varias opciones que pueden afectar directamente a su rendimiento. Entre todas las posibles, destacamos: FILLFACTOR =fillfactor

    Especifica un porcentaje que indica cunto debe llenarse el nivel hoja de cada pgina de ndice cuando se crea o se vuelve a generar un ndice.

    fillfactor debe ser un valor entero comprendido entre 1 y 100. El valor predeterminado es 0. Si fillfactor es 100 0, se crean ndices con las pginas hoja rellenas al mximo de su capacidad.

    El valor de factor de relleno determina el porcentaje de espacio en cada pgina del nivel de hoja que se tiene que rellenar con datos, por lo que se reserva el resto de cada pgina como espacio disponible para seguir creciendo. -Vg. si se especifica un valor de factor de relleno de 80, significa que el 20 por ciento de cada pgina de nivel de hoja se dejar vaco para proporcionar espacio para la expansin del ndice a medida que se agreguen datos a la tabla subyacente-. El espacio vaco se reserva entre las filas de ndice en lugar de al final del ndice.

    Si el valor de factor de relleno se elige correctamente, se pueden reducir las posibles divisiones de pgina al proporcionarse espacio suficiente para la expansin del ndice a medida que se agrega a la tabla subyacente. Cuando se agrega una fila nueva a una pgina de ndice llena, Database Engine (Motor de base de datos) mueve aproximadamente la mitad de las filas a una pgina nueva para hacer espacio para la nueva fila. Esta reorganizacin se denomina divisin de pgina. Una divisin de pgina genera espacio para los nuevos registros, pero puede tardar en realizarse y es una operacin que consume muchos recursos. Adems, puede causar fragmentacin que, a su vez, causa ms operaciones de E/S. Cuando se llevan a cabo divisiones de pginas con frecuencia, el ndice se puede volver a generar utilizando un valor de factor de relleno nuevo o existente para redistribuir los datos.

    Aunque si el valor del factor de relleno es bajo y distinto de cero, se puede reducir el requisito de dividir pginas a medida que crezca el ndice, ste necesitar ms espacio de almacenamiento y puede reducir el rendimiento de la lectura. Incluso en el caso de una aplicacin pensada para realizar muchas operaciones de insercin y actualizacin, el nmero de lecturas de base de datos suele superar a las escrituras en un factor de 5 a 10. Por lo tanto, al especificar un factor de relleno distinto del predeterminado, se puede disminuir el rendimiento de las lecturas de base de datos en una cantidad inversamente proporcional al valor del factor de relleno. -Vg. un valor de factor de relleno igual a 50 puede hacer que el rendimiento de las lecturas de base de datos se reduzca a la mitad. El rendimiento de las lecturas se reduce porque el ndice contiene ms pginas, con lo que se aumentan las operaciones de E/S de disco necesarias para recuperar los datos-.

    lvaroHighlight

    lvaroHighlight

  • Recuerde! Que utilizar FILLFACTOR resulta especialmente til en las tablas en las que se insertan muchas filas o cuando los valores de clave de un ndice agrupado se modifican con frecuencia. PAD_INDEX = { ON | OFF }

    Especifica el relleno de ndice. El valor predeterminado es OFF.

    - ON

    El porcentaje de espacio disponible especificado por fillfactor se aplica a las pginas de nivel intermedio del ndice.

    - No se especifica OFF ni FILFACTOR.

    Las pginas de nivel intermedio se rellenan casi al mximo de su capacidad y dejan espacio suficiente para al menos una fila del tamao mximo que puede tener el ndice, considerando el conjunto de claves incluidas en las pginas de nivel intermedio.

    La opcin PAD_INDEX solamente resulta til si tambin se especifica FILLFACTOR, porque PAD_INDEX utiliza el mismo porcentaje especificado por fillfactor.

    Ejemplo.

    CREATE INDEX IX_Editoriales_telefono ON Biblioteca.dbo.Editoriales(telefono) WITH (PAD_INDEX = ON, FILLFACTOR = 80)

    iii. Mantenimiento de ndices.

    Tras su creacin, los ndices deben mantenerse para asegurar que su rendimiento sea ptimo.

    Recuerde! Puede utilizar las vistas de sistema sys.indexes y sys.sysindexes para conocer los detalles de los diferentes ndices de una tabla de la base de datos actual, o si lo prefiere recurra al procedimiento sp_helpindex.

    Ejemplo.

    USE Biblioteca GO EXEC sp_helpindex Obras

    lvaroHighlight

    lvaroHighlight

  • Las sucesivas operaciones de insercin, actualizacin o eliminacin sobre los datos de las tablas hacen necesario que SQL Server ajuste las pginas de los ndices para adaptarlas a los cambios, estos ajusten implican la divisin de las pginas de los ndices lo que pueden hacer que la informacin del ndice se disperse por la base de datos (se fragmente). Cuando se lleva a cabo una operacin de borrado, se libera espacio en las pginas de ndice, lo que causa que solo cierta parte de la pgina de ndice se encuentre ocupada, a diferencia de lo que normalmente contiene cuando no existe fragmentacin, a esta condicin se le conoce como fragmentacin interna. Cuando existe fragmentacin interna, las pginas de ndices no utilizan el espacio en disco de una manera eficiente y se incrementan el nmero de pginas, es decir ocupamos ms pginas de ndices de las necesarias, causando que SQL Server tenga que leer ms pginas para satisfacer una consulta. Ahora, cuando estas pginas son ledas del disco para pasarlos a la memoria, se le conoce como paging y debido a que el acceso a los discos es lo ms lento de un sistema, cualquier tipo de accin que hagamos para evitar acceder al disco se va a ver reflejado en el rendimiento, es decir entre menos paging llevemos acabo, mejor va a ser el rendimiento de nuestro SQL Server. Las inserciones y borrados de las tablas, provoca que se generen ms pginas de ndices. Cuando llevamos a cabo un insert y la pgina no puede almacenar ese registro de ndices se genera un page split, en este caso es cuando se crea una nueva pgina conservando orden lgico de las llaves de ndices pero no el orden fsico. Generalmente esta nueva pgina no se crea junto a la original, sino en otro lado del disco y cuando estas pginas no se encuentras fsicamente ordenadas se le conoce como fragmentacin externa. Cuando tenemos fragmentacin externa se incrementa el nmero de operaciones E/S al disco al igual que lecturas lgicas. Algunas veces es aceptable tener cierto grado fragmentacin interna en sistemas altamente transaccionales, para evitar los page splits, pero la fragmentacin externa siempre debe ser evitada, pues tambin evita que SQL Server lleve a cabo lecturas adelantadas. Los problemas que presenta la fragmentacin de un ndice pueden ser resueltos realizando un proceso de desfragmentacin del ndice, basado en su reorganizacin o, si es preciso, volvindolo a generar. Para detectar el grado de fragmentacin de un ndice podemos utilizar la funcin del sistema sys.dm_db_index_physical_stats. Una vez determinada la magnitud de la fragmentacin, utilizaremos la siguiente tabla para determinar el mejor mtodo para corregir la fragmentacin propiamente dicha.

    Valor de

    avg_fragmentation_in_percent Instruccin correctiva

    < 5% No realizar ninguna accin.

    > 5% y < = 30% Reorganizacin del ndice. ALTER INDEX REORGANIZE

    > 30%

    Volver a generar el ndice. ALTER INDEX REBUILD WITH (ONLINE = ON)*

    lvaroHighlight

  • Ejemplo. Determinacin del porcentaje medio de fragmentacin de los ndices de la CDUAuxilio de la

    base de datos Biblioteca.

    USE master GO SELECT a.index_id, name, avg_fragmentation_in_percent,index_type_desc FROM sys.dm_db_index_physical_stats (DB_ID(N'Biblioteca'),

    OBJECT_ID(N'Biblioteca.dbo.CDUAuxilio',U'),NULL, NULL, NULL) AS a JOIN Biblioteca.sys.indexes AS b ON a.object_id = b.object_id

    AND a.index_id = b.index_id

    Resultados obtenidos.

    1 PK_CDUAuxilio 90,9090909090909 CLUSTERED INDEX 2 UQ_CDUAuxilio_orientacion 23,3333333333333 NONCLUSTERED INDEX Recomendaciones.

    El ndice n 1 PK_CDUAuxilio debera ser generado de nuevo. La operacin puede realizarse desde SSMS a travs de las acciones del men emergente asociado al ndice en cuestin- o ejecutando las siguientes orden Transact-SQL. ALTER INDEX PK_CDUAuxilio ON Biblioteca.dbo.CDUAuxilio REBUILD WITH (FILLFACTOR =80)

    Para el ndice n 2 se recomienda su reorganizacin. Esta labor puede llevarse a cabo desde SSMS, de forma similar a la regeneracin- o, de nuevo, con la sentencia ALTER INDEX. ALTER INDEX