You are on page 1of 21

Modulo 5 Mantenimiento de Bases de Datos e Indices Manejo de Indices Uso del Tuning Advisor de la Base de Datos

Administracin de Indices
Introduccin Una index es una estructura vital en una base de datos que provee acceso rpido a los datos. Sin embargo, los indexes se pueden deteriorar con el tiempo y requerir reorganizacin como datos en una base de datos que es modificada. Es entonces, importante para los administradores de bases de datos entender como crear, alterar, y hacer caer indexes, como as tambin saber como administrar la fragmentacin que pude resultar cuando las indexes son usadas. La administracin Index ha sido altamente mejorada en SQL Server 2005 a travs de las nuevas funcionalidades statements y de definicin de lenguaje (DDL) de index. Objetivos
! ! ! ! ! !

Describir las nuevas features index en SQL Server 2005. Crear indices. Alterar indices. Borrar indices. Detectar fragmentacin de indices y reorganizar o reconstruir un indice apropiadamente. Mantener indices en una base de datos SQL Server 2005.

Nuevas Features de indices en SQL Server 2005

Introduccin El SQL Server 2005 provee indexes clustered y nonclustered, como lo hace SQL Server 2000. El SQL Server 2005 tambin soporta indexes en columnas computadas como muestras. Sin embargo, SQL Server 2005 extiende la forma en la cual los indexes son estructurados y procesados, as como tambin son agregadas y escriben las nuevas indexes. El Statement ALTER INDEX Una nueva index feature en SQL Server 2005 es la statement Transact- SQL ALTER INDEX, que le permite reconstruir, reorganizar, deshabilitar, o modificar opciones para una index. Este comando remueve la necesidad de borrar y crear una index para defragmentarla, y reemplaza algunos de los comando Database Consistency Checker (DBCC) usados en la versin anterior de SQL Server.

Operaciones Index Online El SQL Server 2005 provee la habilidad de administrar indexes mientras que estn en uso, minimizando la ventana requerida de mantenimiento. Por ejemplo: puede construir una index clustered sobre una tabla mientras otro usuario esta consultando esa tabla. Aparte de dos periodos cortos de tiempo cuando SQL Server toma dos snapshots de un dato existente al inicio de una operacin y emergen cambios causados por actualizaciones concurrentes al final, usuarios concurrentes pueden insertar, actualizar y borrar datos en una tabla. Versiones anteriores de SQL Server adquirieron locks exclusivos en tabla e index, bloqueando efectivamente acceso a la tabla hasta que la operacin index era completada. Operaciones Index Online requieren espacio en disco adicional para soportar operacin online. Debe especificar cuando una index debera permitir operaciones online como parte de los comandos CREATE INDEX, ALTER INDEX, y DROP INDEX. Para mas informacin acerca de operaciones index online, vea How Online Index Operations Work en SQL Server 2005 Books Online. Operaciones Index en Paralelo Operaciones Index, como crear, alterar, o borrar un index, pueden aprovechar de varias CPUs para acomodar y escanear operaciones en paralelo. Esto sucede automticamente en SQL Server 2005, y las operaciones pueden usar cualquier numero de procesadores hasta llegar al especificado en la opcin de configuracin de servidor de max degree of parallelism. Sin embargo, crear, reconstruir y borrar indices puede ser una tarea que use muchos recursos. Permitir una operacin index monopolizar procesadores puede daar otros trabajos que se estn realizando en la base de datos al mismo tiempo. Por lo tanto, puede limitar el numero de procesadores usado especificando en el aviso de la consulta MAXDOP cuando ejecute los comandos CREATE INDEX, ALTER INDEX, y DROP INDEX Transact-SQL. Nota Si no especifica el parmetro MAXDOP, la configuracin en max degree of parallelism especifica el numero mximo de procesadores que una operacin utilizara. Sin embargo, el motor de la base de datos puede decidir usar menos procesadores si el servidor esta bajo mucha presin y asignar todos los procesadores a la operacin index hara sufrir mucho la performance de las tareas concurrentes.

Opciones Locking El SQL Server 2005 introduce dos nuevas opciones locking cuando se usan indicess: ! ALLOW_PAGE_LOCKS Cuando esta habilitado, esta opcin provee acceso al index using table and page-level locks. Cuando deshabilitado, los page-level locks no son usados. ! ALLOW_ROW_LOCKS Cuando esta habilitado, esta opcin provee acceso al the index using table and row-level locks. Cuando deshabilitado, row-level locks no son usados. Ambas opciones pueden ser habilitadas simultneamente. Indexes con Columnas Incluidas Indicess nonclustered ahora pueden contener datos nonkey en sus leaf nodes. Esta feature puede mejorar la performance de consultas que acceden a las columnas incluidas, al costo del almacenamiento adicional para sostener estos valores. Las indexes con columnas incluidas pueden ser usadas para reemplazar las covering indexes usadas en las versiones anteriores de SQL Server. Un beneficio adicional de las indexes con columnas incluidas tiene que ver con el limite de las indexes key. En SQL Server 2000, el tamao de la index key era limitado a 900 bytes. El leaf node dato en un index con columnas incluidas puede ser hasta 8060 bytes de tamao, que es igual al mximo de tamao de row. Indices Particionados Indices Particionados son otra nueva feature administracin de index de SQL Server 2005. Una Index Particionada es una index que se expande a travs de grupos de archivos comprimiendo la base de datos fsica. Indexes Particionadas son comnmente creadas sobre tablas particionads. Particionar puede mejorar la performance distribuyendo datos a travs de mltiples archivos, reduciendo los contenidos, y aumentando la posibilidad de realizar operaciones IO en paralelo. Para ms informacin, vea Partitioned Index Concepts en SQL Server 2005 Books Online. Indexes XML El tipo de dato xml es una nueva feature en SQL Server 2005. Puede crear una index XML sobre columnas xml usando los Transact-SQL comandos CREATE PRIMARY XML INDEX y CREATE XML INDEX. Indexes XML pueden mejorar la performance de operaciones XQuery sobre datos XML, aunque pueden incurrir algunos costos significantes cuando los datos son modificados. Indexes XML tienen un nmero de features y limitaciones. Para mas informacin acerca de indexes XML, vea Indexes on xml Type Columns en SQL Server 2005 Books Online.

Cmo crear un Index

Introduccin Usted usa el statement CREATE INDEX para hacer una index. El SQL Server 2005 ha extendido la sintaxis de este statement para soportar las nuevas index features. Adicionalmente, el cuadro de dialogo the New Index en Object Explorer in SQL Server Management Studio provee acceso completo a estas nuevas features. Uso CREATE INDEX El siguiente cdigo muestra la sintaxis completa para crear un statement CREATE INDEX:
CREATE [UNIQUE][CLUSTERED | NONCLUSTERED] INDEX index_name ON [{database_name.[schema_name]. | schema_name.}] {table_or_view_name}(column [ASC | DESC][,...n]) [INCLUDE (column_name[,...n])] [WITH(<relational_index_option>[,...n])] [ON {partition_scheme_name(column_name[,...n]) | filegroup_name | DEFAULT}] <relation_index_option> ::= { PAD_INDEX = {ON | OFF} | FILLFACTOR = fillfactor | SORT_IN_TEMPDB = {ON | OFF} | IGNORE_DUP_KEY = {ON | OFF} | STATISTICS_NO_RECOMPUTE = {ON | OFF} | DROP_EXISTING = {ON | OFF} | ONLINE = {ON | OFF} | ALLOW_ROW_LOCKS = {ON | OFF} | ALLOW_PAGE_LOCKS = {ON | OFF} | MAXDOP = number_of_processors }

Para detalles adicionales, revea el statement CREATE INDEX en Transact-SQL Reference en SQL Server 2005 Books Online. Nota Ahora puede especificar usar las opciones PAD_INDEX, SORT_IN_TEMPdb, IGNORE_DUP_KEY y ONLINE cuando usa el Maintenance Plan Wizard.

Permitir Operaciones Online

Especifique la opcin ONLINE=ON en la clusula WITH del statement CREATE INDEX para permitir otras operaciones DML ejecutarse concurrentemente. El siguiente ejemplo muestra como usar la opcin ONLINE:
CREATE INDEX IX_Employee_ManagerID ON HumanResources.Employee (ManagerID) WITH (ONLINE=ON)

Nota Las tablas con columnas xml, text, ntext, image, varchar(max), nvarchar(max), varbinary(max), o filestream no permiten operaciones online.

Especificar el Grado de Paralelismo Por defecto, el motor de la base de datos usa la configuracin del parmetro con el valor de max degree of parallelism para determinar el numero mximo de CPUs que puede usar cuando crea una index. Como esta operacin puede dejar recursos insuficientes para otras operaciones concurrente, usted puede limitar los recursos de la CUP usados especificando la opcin MAXDOP, segn muestra el siguiente ejemplo:
CREATE INDEX IX_Employee_ManagerID ON HumanResources.Employee (ManagerID) WITH (ONLINE=ON, MAXDOP = 3)

La opcin MAXDOP no acepta la opcin de configuracin max degree of parallelism. Especificando MAXDOP = 0 hace que la operacin use todas las CPUs disponibles, dependiendo en la cantidad de trabajo del motor de la base de datos.

Nota Como con la opcin ONLINE, la opcin MAXDOP solo afecta al statement que esta siendo usado para crear, alterar, o borrar el index. El optimizador de consulta usa la opcin de configuracin max degree of parallelism para determinar la mejor manera de optimizar consultas que hacen referencia al index.

Especificar Opciones Locking Puede indicar las opciones locking disponibles para acceder la index en la clusula WITH, como se muestra en el siguiente ejemplo:
CREATE INDEX IX_Employee_ManagerID ON HumanResources.Employee (ManagerID)

WITH (ALLOW_ROW_LOCKS = ON)

Agregar Columnas Incluidas Puede especificar que el index debera contener columnas en los leaf nodes. Por ejemplo, El siguiente index esta basado en la columna AddressID en la tabla Address, pero los leaf nodes incluyes las columnas adicionales AddressLine1 y AddressLine2:
CREATE INDEX IX_AddressDetails ON Person.Address (AddressID) INCLUDE (AddressLine1, AddressLine2)

Esta index es til para cubrir consultas que devuelven los valores en las columnas AddressLine1 o AddressLine2 basadas en valores en AddressID. Sin embargo, las operaciones, INSERT, UPDATE, y DELETE en la tabla incurrirn sobre todo en el mantenimiento de duplicar datos en el index. No puede incluir las columnas text, ntext, o image. Indexes Particionadas Puede especificar una index particionada especificando un grupo de archivos o particin scheme como parte del statement CREATE INDEX. El siguiente ejemplo usa la particin scheme llamada CustomerScheme para distribuir los datos para el index a travs de los archivos, basado en el valor de CustomerID:
CREATE INDEX IX_CustomerDetails ON Sales.Customer(CustomerID) ON Sales.CustomerScheme(CustomerID)

Si no especifica que una index esta perticionada, pero la tabla que esta siendo indexada esta particionada, el index es creado usando la misma particin scheme que la tabla. Crear Indexes XML Puedes crear una index XML con el statement CREATE [PRIMARY] XML INDEX que tiene la siguiente sintaxis:
CREATE [PRIMARY] XML INDEX index_name ON [{database_name.[schema_name]. | schema_name.}]table_name (xml_column_name) [ USING XML INDEX xml_index_name [ FOR { VALUE | PATH } ] [WITH(<xml_index_option>[,...n])] <xml_index_option> ::= { PAD_INDEX = {ON | OFF} | FILLFACTOR = fillfactor | SORT_IN_TEMPDB = {ON | OFF} | STATISTICS_NO_RECOMPUTE = {ON | OFF} | DROP_EXISTING = {ON | OFF}

| ALLOW_ROW_LOCKS = {ON | OFF} | ALLOW_PAGE_LOCKS = {ON | OFF} | MAXDOP = number_of_processors }

El siguiente cdigo muestra un ejemplo de cmo crear una index XML:


CREATE PRIMARY XML INDEX IXML_ContactAddContact ON Person.Contact(AdditionalContactInfo)

Una tabla debe tener un index clustered antes de crear un index XML. Un index XML primario en una columna xml debe existir antes que una index XML secundaria sea creada en la columna. No puede usar la opcin ONLINE o cuando una index XML esta siendo creada.

Cmo Alterar una Index

Introduccin Use el statement ALTER INDEX para reconstruir, reorganizar o deshabilitar una index, o para modificar opciones que usa una index. Estas features estn tambin disponibles a travs del cuadro de dialogo Index Properties en el SQL Server Management Studio Object Explorer. Usar ALTER INDEX
ALTER INDEX {index_name | ALL} ON [{database_name.[schema_name]. | schema_name.}] {table_or_view_name} { REBUILD [WITH(<rebuild_index_option>[,...n])] | REORGANIZE [ WITH( LOB_COMPACTION = {ON | OFF})] | DISABLE | SET (<set_index_option>[,...n]) } <rebuild_index_option> ::= { PAD_INDEX = {ON | OFF} | FILLFACTOR = fillfactor | SORT_IN_TEMPDB = {ON | OFF} | IGNORE_DUP_KEY = {ON | OFF} | STATISTICS_NO_RECOMPUTE = {ON | OFF} | ONLINE = {ON | OFF} | ALLOW_ROW_LOCKS = {ON | OFF} | ALLOW_PAGE_LOCKS = {ON | OFF} | MAXDOP = number_of_processors } <set_index_option> ::= { IGNORE_DUP_KEY = {ON | OFF} | STATISTICS_NO_RECOMPUTE = {ON | OFF} | ALLOW_ROW_LOCKS = {ON | OFF} | ALLOW_PAGE_LOCKS = {ON | OFF} }

La siguiente tabla describe las palabras claves para cada tarea que puede realizar usando la statement ALTER INDEX:
Palabra Clave REBUILD Descripcin Reconstruir una index, borrando efectivamente y recrear una index para compactar el espacio que usa y reordenar su estructura interna para que coincidan los datos en la tabla. Reordena las paginas leaf de una index para que coincida el orden lgico de los datos en la tabla. Deshabilita temporalmente un index, aun un index clustered para prevenir su uso. Modifica opciones de cmo una index es mantenida y accedida.

REORGANIZE DISABLE SET

No puede usar la opcin de comando ALTER INDEX para reparticionar una index, o para agregar o borrar columnas. Debe usar el comando CREATE INDEX con la opcin DROP_EXISTING para realizar estas tareas. Para mas detalles acerca del statement ALTER INDEX, vea la Transact-SQL Reference en SQL Server 2005 Books Online. Reconstruir una Index La clusula REBUILD permite modificar la forma en la cual una index es estructurada y construida usando las opciones FILLFACTOR, PAD_INDEX, SORT_IN_TEMPDB, IGNORE_DUP_KEY, y STATISTICS_NORECOMPUTE. El siguiente ejemplo muestra como usar la clusula REBUILD con la opcin FILLFACTOR:
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee REBUILD WITH (FILLFACTOR = 80)

Si reconstruye una index larga (una index con ms de 128 extents) mientras le permite operaciones online, el motor de la base de datos copia y reorganiza los datos usando almacenamiento nuevo desalojando el espacio existente usado por la index. Debe asegurarse que tiene suficiente espacio de almacenamiento antes de reconstruir. Nota Reconstruir una index clustered no reconstruye automticamente todas las indexes nonclustered. Sin embargo, puede ejecutar el comando ALTER INDEX ALL . REBUILD . para borrar y recrear todas las indexes en una tabla en una operacin

simple.

La clusula REBUILD permite realizar modificaciones online especificando la opcin ONLINE = ON e indicando el grado de paralelismo con la opcin MAXDOP. Reorganizar una Index Reorganizar una index mejora la performance de las consultas y operaciones que escanean un largo numero de rows secuenciales usando una index. Una Index reorganizada re-usar las mismas paginas previamente asignadas a esta, aunque algunas paginas pueden ser desasignadas si se vacan como resultado de compactar datos. Es mas, reorganizar una index no requiere ningn espacio adicional en tempdb, porque todas las reorganizaciones sin in situ.

La nica opcin que puede especificar con la clusula REORGANIZE es LOB_COMPACTION, la cual puede usar para especificar si las paginas que contienen largos objetos de datos (image, text, ntext, varchar(max), nvarchar(max), y varbinary(max)) son tambin compactadas. El siguiente ejemplo muestra como usar la clusula REORGANIZE con la opcin LOB_COMPACTION:
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee REORGANIZE WITH (LOB_COMPACTION = ON)

Las reorganizaciones son siempre realizadas online, y no bloquearan consultas o datos que estn siendo actualizados. No puede especificar la opcin MAXDOP, e ignorar la opcin de configuracin max degree of parallelism. Deshabilitando una Index El siguiente ejemplo muestra como usar la clusula DISABLE:
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee DISABLE

El optimizador de consultas no considera una index deshabilitada cuando evala posibles planes de ejecucin para una statement de SQL. Las consultas que hacen referencia a una index deshabilitada en un aviso de optimizacin, no se realizaran. Cualquier restriccin y primary o foreign keys asociados con una index deshabilitada tambin ser deshabilitada.

El motor de la base de datos no mantiene una index deshabilitada. Puede rehabilitar una index usando el statement ALTER INDEX . REBUILD o la statement CREATE INDEX . WITH DROP_EXISTING. Debe rehabilitar restricciones deshabilitadas usando el statement ALTER TABLE. Nota Si deshabilita una index clustered para una tabla, La tabla ser marcada OFFLINE. Todas las modificaciones a la tabla sern prohibidas hasta que el index sea rehabilitado. Tampoco podr realizar consultas SELECT.

Cambiar Opciones de Index Puede modificar las opciones ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY, y STATISTICS_NORECOMPUTE para un index usando la clusula SET. El siguiente ejemplo muestra la opcin ALLOW_PAGE_LOCKS:
ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee SET (ALLOW_PAGE_LOCKS = ON)

Cmo borrar un Indice


Introduccin Use el statement DROP INDEX para borrar un index de una tabla. Este statement aplica para todas las formas de indexes, incluyendo indexes XML. Tambin puede borrar una index usando la opcin Delete en men acceso directo en SQL Server Management Studio Object Explorer. Uso de DROP INDEX El siguiente cdigo muestra la sintaxis completa para la statement DROP INDEX:
DROP INDEX index_name ON [schema_name.]{table_or_view_name} [ WITH (<drop_index_option>[,...n]) ] <drop_index_option> ::= { ONLINE = {ON | OFF} | MAXDOP = number_of_processors | MOVETO { partition_scheme_name(column_name[,...n])] | filegroup_name | DEFAULT }

Las opciones DROP INDEX son disponibles solo cuando esta borrando una index clustered. La opcin MOVETO permite especificar donde ubicar los datos luego que una index haya sido borrada. Para mas informacin acerca del la statement DROP INDEX, vea the TransactSQL Reference en SQL Server 2005 Books Online. Borrando una Index La sintaxis de la statement DROP INDEX ha cambiado en SQL Server 2005. Especifique la tabla que sostiene la index usando una clusula ON en vez de la que usa la notacin . de las versiones anteriores de SQL Server. El siguiente ejemplo nuestra la nueva sintaxis:
DROP INDEX IX_Employee_ManagerID ON HumanResources.Employee

La vieja sintaxis es aun soportada en varios casos (pero no para indexes XML), pero no debera ser usada para nuevos desarrollos. Puede borrar una index nonclustered que esta deshabilitada. Especificar Opciones para Indexes Clustered El statement DROP INDEX soporta las opciones MAXDOP y ONLINE solo cuando se borra una index clustered. El siguiente ejemplo borra una index mientras permite a actividades concurrentes el acceso a tablas subyacentes y limitando el numero de procesadores realizando la operacin a tres:
DROP INDEX IX_Cluster ON Sales.Customer WITH (ONLINE = ON, MAXDOP = 3)

No puede borrar una index clustered que esta deshabilitada, y no puede usar la opcin ONLINE para una index clustered que contiene datos Large Object (LOB).

Relocalizar Datos Index Clustered Cuando borra una index clustered, usted puede especificar donde las rows de datos en la leaf pages deben ser almacenadas usando la opcin MOVE TO. Los datos sern reconstituidos como una tabla en el lugar especificado. Puede especificar el destino usando una particin scheme o un grupo de archivos. El siguiente ejemplo mueve los datos a una particin scheme definida por el NewCustomerScheme:
DROP INDEX IX_Cluster ON Sales.Customer WITH (MOVE TO NewCustomerScheme)

Cmo Administrar Fragmentacin

Introduccin Inicialmente, los datos en una index eran publicados y ordenados de acuerdo a las rows en la tabla subyacente. El motor de la base de datos de SQL Server 2005 automticamente actualiza las indexes a medida que las rows son insertadas, actualizadas, o borradas en una tabla. Sin embargo, mientras los datos en una tabla van cambiando, puede ser relocalizada fsicamente en los archivos de la base de datos. Estas modificaciones puede desalinear las indexes con sus datos correspondientes, haciendo decaer la performance. Este fenmeno es conocido como fragmentacin. Eventualmente, necesitara reorganizar o reconstruir sus indexes para ganar beneficio de ellas. Reorganizar versus Reconstruir Dependiendo en el grado de fragmentacin que ocurre en una index, puede elegir entre reorganizar o reconstruir la index. Reorganizar una index clustered o nonclustered defragmenta el los leaf nodes del index y compacta la informacin en los nodes internos de acuerdo al setting fill factor que afecta a la index. El resultado es una index que es mas pequea, tanto como el espacio vaci causado por borrar una row y las actualizaciones habrn sido borradas, mientras que los leaf nodes estarn en el mismo orden que la tabla. Reorganizar una index tambin puede compactar cualquier objeto grande de columna en la tabla. Si una index es altamente fragmentada, es mejor reconstruirla. Reconstruir una index la borra y recrea. Tambin puede cambiar cualquier setting de index, como el fill factor, cuando reconstruye una index; no puede cambiar estos settings cuando simplemente esta reorganizando la index. Determinar el Grado de Fragmentacin Reconstruir o reorganizar una index puede ser una tarea muy cara que utilice muchos recursos. Reconstruir es significantemente ms costoso que reorganizar. Por lo tanto, es til determinar cuanto se ha defragmentado index, y solo reconstruir la index si es absolutamente necesario. Puede usar la funcin sys.dm_db_index_physical_stats para asignar el grado de fragmentacin de una index. Nota Debe correr la funcin sys.dm_db_index_physical_stats en vez de la statement DBCC SHOWCONTIG usada con versiones anteriores de SQL Server.

El siguiente ejemplo muestra como usar la funcin sys.dm_db_index_physical_stats sobre todas las tablas en la base de datos en curso:
SELECT TableName, IndexName, AvgFragmentation FROM sys.dm_db_index_physical_stats(DEFAULT, '*', DEFAULT, 'DETAILED')

Los parmetros para funcin sys.dm_db_index_physical_stats, en orden, son: @TableName. La tabla de la cual juntar la informacin. Esta puede ser el nombre de una tabla especifica, o los valores DEFAULT o NULL. DEFAULT y NULL ambos hacen devolver al sys.dm_db_index_physical_stats informacin acerca de todas las tablas y vistas en la base de datos en curso.
!

@IndexName. La index acerca de la cual juntar informacin. Este puede ser el nombre de una index especifica, DEFAULT, NULL o '*'. Los valores DEFAULT y NULL ambos devuelven informacin solo acerca de la tabla base (o indexes clustered , so la tabla tiene una). El valor '*' devuelve informacin acerca de todas las indexes en la tabla.
!

@PartitionId. El numero de ID de la particin de la index. Los valores DEFAULT, NULL, o 0 devuelven informacin de todas las particiones.
!

@Mode. El nivel de scan a usar para obtener la informacin requerida. Los valores soportados son LIMITED, que solo leen paginas parent-level pero es muy rpido, SAMPLED, que lee solo paginas parent-level y sample leaf pages, y DETAILED, que lee pginas parent-level y todas las leaf pages.
!

Para mas informacin acerca de la funcin sys.dm_db_index_physical_stats, vea la Transact-SQL Reference en SQL Server 2005 Books Online. Tambin puede ver informacin de fragmentacin de index en la pagina Fragmentation del cuadro de dialogo Index Properties. Reorganizar una Index Use el comando ALTER INDEX con la clusula REORGANIZE para reorganizar una index. Nota Debe utilizar la clusula REORGANIZE del comando ALTER INDEX preferentemente al statement DBCC INDEXDEFRAG usado en versiones anteriores de SQL Server.

Reconstruir una Index Puede reconstruir una index de dos maneras:

Ejecute el comando CREATE INDEX con la clusula DROP_EXISTING. Esta clusula Esta clusula tambin estaba disponible en versiones anteriores de SQL Server. Use este statement si no tiene que agregar o remover columnas en una index, reparticionar una index reparticionada, o mover una index a un grupo de archivos diferente.
!

Ejecute el comando ALTER INDEX con la clusula REBUILD. (Use este comando preferentemente al statement al DBCC REINDEX.) Use el comando ALTER INDEX si no necesita reconstruir mltiples indexes, o si quiere evitar cualquier reconstruccin innecesaria de indexes nonclustered mientras que reconstruye una indexes clustered.
!

Tip Aunque puede reconstruir una index simplemente borrando y recrendola, este acercamiento no es recomendado. es altamente ineficiente y no puede hacer uso de las optimizaciones disponibles para el statement CREATE INDEX con la clusula DROP_EXISTING o el statement ALTER INDEX con la clusula REBUILD.

Uso del Tuning Advisor de la Base de Datos


Introduccin El punto de crear indexes y datos particionados en una base de datos es para producir buena performance para los usuarios. Sin embargo, crear las indexes equivocadas o particiones de datos de mala manera puede terminar en una performance pobre. El tuning requiere entendimiento de cmo los datos son usados y accedidos en la base de datos, y luego crear estructuras que soporten estas operaciones en lugar de limitarlas. El Tuning Advisor de la base de datos (DTA) es una nueva herramienta basada en el SQL Server 2000 Index Tuning Wizard para establecer que indexes son tiles y como los datos deberan ser particionados sin requerir un comprendimiento experto de la estructura de la base de datos o los internos de SQL Server. Objetivos Describir el DTA. Usar el DTA para analizar cargas de trabajos. Obtener resultados del DTA como XML. Use el DTA para asistir en el diseo de la base de datos.

! ! ! !

Qu es el Tuning Advisor de la Base de Datos?

Introduccin El DTA es una nueva herramienta tuning que extiende la funcionalidad disponible en el Index Tuning Wizard provisto con SQL Server 2000. Puede usar el DTA para analizar las cargas de trabajos de una base de datos. El anlisis puede generar una serie de recomendaciones para crear y borrar indicess, vistas indexed, y particiones, para que el motor de la base de datos pueda optimizar las operaciones mientras son realizadas. La principal ventaja del DTA es que permite a los administradores de bases de datos a Poner a punto las estructuras de la base de datos basadas directamente en los comandos realizados por una aplicacin, sin necesitar conocimiento profundo de los mecanismos de optimizacin de consultas de SQL Server.

Nuevas Features Las nuevas features de DTA que no estaban disponibles en el Index Tuning Wizard incluyen: Timebound tuning. Puede especificar durante cuanto tiempo el DTA debera estar analizando una carga de trabajo. Generalmente, cuanto ms tiempo empleado, ms alta la calidad de las recomendaciones que producir
!

Cross-database tuning. Puede poner a punto una carga de trabajo que ocupa mltiples bases de datos. El DTA generara recomendaciones para cualquiera de las bases de datos referidas.
!

XML output. El DTA puede generar reportes y resultados en XML, para anlisis usando cualquier aplicacin que pueda leer XML.
!

Carga de Trabajo DTA El DTA puede tomar sus cargas de trabajo de cualquiera de los siguientes recursos: Un script de SQL conteniendo los comandos Transact-SQL comnmente realizados por usuarios realizando sus trabajos normales. ! Un rastro de archivo capturado por el SQL Profiler mientras monitorea SQL Server 2005. ! Una tabla conteniendo informacin rastreada capturada, tambin generada cuando se monitorea SQL Server 2005.
!

Puede especificar cual o cuales bases de datos el DTA debe analizar cuando se usa la carga de trabajo, como as tambin limitar el rango a las tablas seleccionadas. Resultados de DTA Un anlisis de DTA genera recomendaciones y reportes. Las recomendaciones toman la forma de una lista que puede ser cubierta por un script XML o por una serie scripts de Transact-SQL. Puede evaluar las recomendaciones o aplicarlas. Las recomendaciones por separado, son generadas para particionamiento e indexing schemes. Los reportes resumen diferentes aspectos de la carga de trabajo y resultados. tambin puede guardar los reportes como.

Como Usar el Tuning Advisor de la Base de Datos


Cree una Nueva Sesin Cada vez que corre el DTA para realizar un anlisis, crea una nueva sesin. Una sesin contiene informacin acerca de los recursos de carga de trabajo, las opciones tuning usadas, y los resultados del anlisis. Las sesiones aparecen en la ventana Sesin Monitor del DTA. Puede retener los detalles de sesiones anteriores o borrarlas. Para crear una nueva sesin, posicinese sobre el men File y haga click en New Session. Luego puede darle un nombre a la sesin. Especificar la Carga de Trabajo Puede indicar de donde el DTA debera obtener la informacin de la carga de trabajo, y la base de datos a analizar, usando el tab Workload del DTA. La opcin File en el tab Workload le permite especificar un archivo de rastreo (.trc) generado por SQL Profiler, o un script de SQL que contenga comandos Transact-SQL, como fuente de la carga de trabajo. Los comandos en el archivo sern ejecutados contra la base de datos seleccionada, y recomendaciones sern generadas para optimizar la carga de trabajo. La opcin Table en el tab Workload le permite usar un rastro como la fuente de carga de trabajo. La tabla debe contener informacin de rastreo generado por el SQL Profiler y ser guardada usando la opcin Save As/Trace Table. Setear Opciones Tuning Antes de comenzar anlisis DTA de una carga de trabajo, debe especificar las opciones de tuning a utilizar. Esto afectara la manera en que el DTA realiza su anlisis y las recomendaciones que genera. El tab Tuning Options permite especificar: Si el anlisis debe correr hasta completarse, si debe terminar a un tiempo determinado ( por defecto, a una hora de la hora en curso). Que diseo de estructura fsica (PDSs) a usarse en la base de datos. Puede evaluar estructuras existentes y generar recomendaciones para que estructuras retener y cuales desechar. Tambin puede especificar si el DTA debe asegurar cuales nuevas vistas de indexes e indexed (en varias combinaciones) deben ser creadas, como as tambin que indexes y vistas indexed existentes deben ser borradas.
!

Si considerar implementar particionamiento, y hasta que grado. Que PDSs mantener en la base de datos. puede especificar si el DTA debe retener todas las PDSs existentes y solo recomendar tems nuevos, si considerar borrar todas las PDSs existentes, y otras combinaciones de opciones.
! !

Un cuadro de dialogo Advanced Tuning Options esta tambin disponible. En este cuadro, usted especifica si los scripts que son generados deben realizar operaciones online u offline. Realizar un Anlisis Se realiza un anlisis haciendo click en botn Start Analysis en la toolbar del DTA. Una pantalla de progreso aparecer, mostrando los pasos del anlisis a medida que van realizndose. Cualquier error o advertencias sern mostrados en esta pantalla de progreso. La informacin acerca del progreso de la operacin puede ser guardada en el Tuning log. Examinar los Resultados Cuando el anlisis esta completo, dos nuevas tabs aparecern en el. El tab Recommendations muestra una lista de objetos que deben ser creados o descartados. Puede filtrar esta lista para mostrar recomendaciones para las bases de datos y objetos seleccionados. Haciendo click en el link en la columna Definition mostrara los comandos Transact-SQL que implementaran cada recomendacin. Dependiendo de las opciones tuning elegidas, habr dos sets de recomendaciones: una para particiones y otra para indexes.

El tab Reports le permite mostrar un nmero de reportes predefinidos resumiendo el anlisis incluyendo: Statement cost report Este reporte muestra el costo estimado para cada statement SQL en la carga de trabajo. Puede usar este reporte para determinar que statements lo beneficiaran de los cambios recomendados.
!

Statement detail report Este reporte lista cada statement encontrado en la carga de trabajo, junto con el costo en curso y el costo estimando si las recomendaciones son implementadas.
!

Statement-index relations report (en curso) Este reporte muestra que consultas usan que indexes y tablas o vistas.
!

Statement-index relations report (recomendado) Este reporte muestra que consultas usaran que indexes y tablas si fueran implementadas las recomendaciones. Index usage report (en curso) Este reporte lista los indexes en curso y su uso en un ejemplo de carga de trabajo.
! !

Index usage report (recomendado)

Este reporte lista alas indexes recomendadas y su uso en un ejemplo de carga de trabajo. Index detail report (en curso) Este reporte lista alas indexes en curso y sus detalles.
!

View-Table relations report Este reporte muestra informacin acerca de las tablas de referencia por las vistas usadas en la carga de trabajo.
!

Workload analysis report Este reporte resume los resultados del anlisis, agrupado por tipo de statement (SELECT, INSERT, UPDATE, DELETE), y muestra cuantos statements habrn mejorado la performance, cuantos no tendrn cambios en performance, y cuantos habrn bajado su performance si las recomendaciones son implementadas.
!

Database access report Este reporte lista las bases de datos de referencia en una carga de trabajo y el numero de veces que cada una fue usada.
!

Table access report Este reporte lista las tablas de referencia en una carga de trabajo y el numero de veces que cada una fue usada.
!

Column access report Este reporte lista las columnas de referencia en una carga de trabajo y el nmero de veces que cada una fue usada.
!

El tab Reports tambin incluye una seccin Tuning Summary, la cual muestra todas las estadsticas y las mejoras en la performance si se implementan las recomendaciones. Implementar las Recomendaciones Puede implementar las recomendaciones hacienda click en Apply Recommendations en el men Actions. Puede realizar los cambios de inmediato, programarlos para una ejecutarse mas tarde, o guardarlos como un script de SQL.

Cmo ver los Resultados XML


Introduccin El DTA permite exportar sus recomendaciones y reportes como archivos XML. Esto permite usar otras herramientas que pueden separar XML para analizar ms profundamente los scripts si es necesario. Guardar Recomendaciones como XML Para guardar recomendaciones como XML, en el men del DTA File, haga click en Export Session Results y tipee el nombre del Nuevo archivo XML. puede usar cualquier utilidad que pueda separar XML, tal como Microsoft Internet Explorer, para ver el archive, puede usar cualquier aplicacin customizada basada en XML para procesar los resultados.

El archive XML contiene un elemento de Configuration que lista todas las recomendaciones hechas. El siguiente cuadro muestra parte de un elemento de Configuration:
<Configuration> <Server> <Name>localhost</Name> <Database> <Name>AdventureWorks</Name> <Schema> <Name>Production</Name> <View> <Name>vProductAndDescription</Name> <Recommendation> <Drop> <Index Clustered="true"> <Name> IX_vProductAndDescription </Name> </Index> </Drop> </Recommendation> </View> <Table> <Name>TransactionHistory</Name> <Recommendation> <Drop> <Index> <Name> IX_TransactionHistory_RefOrdID_RefOrdLineNumber </Name> </Index> </Drop> <Drop> <Index> <Name> IX_TransactionHistory_ProductID </Name> </Index> </Drop> </Recommendation> </Table> ... </Configuration>

Guardar Reportes como XML Para guardar reportes como XML, haga click con el botn derecho en cualquier parte del reporte, haga click en Export to file en el men de acceso directo, y luego tipee el nombre del nuevo archivo XML.

You might also like