DBCC SHOWCONTIG (Transact-SQL)DBCC SHOWCONTIG (Transact-SQL)

SE APLICA A: síSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Muestra información sobre la fragmentación de los datos y los índices de la tabla o vista especificada.Displays fragmentation information for the data and indexes of the specified table or view.

Importante

Esta característica se quitará en una versión futura de Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Use sys.dm_db_index_physical_stats en su lugar.Use sys.dm_db_index_physical_stats instead.

Se aplica a: SQL ServerSQL Server (desde SQL Server 2008SQL Server 2008 hasta la versión actual)Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through current version)

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

DBCC SHOWCONTIG   
[ (   
    { table_name | table_id | view_name | view_id }   
    [ , index_name | index_id ]   
) ]   
    [ WITH   
        {   
         [ , [ ALL_INDEXES ] ]   
         [ , [ TABLERESULTS ] ]   
         [ , [ FAST ] ]  
         [ , [ ALL_LEVELS ] ]   
         [ NO_INFOMSGS ]  
         }  
    ]  

ArgumentosArguments

table_name | table_id | view_name | view_idtable_name | table_id | view_name | view_id
Es la tabla o vista cuya información de fragmentación se va a comprobar.Is the table or view to check for fragmentation information. Si no se especifica, se comprueban todas las tablas y vistas indizadas de la base de datos actual.If not specified, all tables and indexed views in the current database are checked. Para obtener el id. de la tabla o la vista, use la función OBJECT_ID.To obtain the table or view ID, use the OBJECT_ID function.

index_name | index_idindex_name | index_id
Es el índice cuya información de fragmentación se va a comprobar.Is the index to check for fragmentation information. Si no se especifica, la instrucción procesa el índice base de la tabla o la vista especificada.If not specified, the statement processes the base index for the specified table or view. Para obtener el id. del índice, use la vista de catálogo sys.indexes.To obtain the index ID, use the sys.indexes catalog view.

porWITH
Especifica las opciones del tipo de información que devuelve la instrucción DBCC.Specifies options for the type of information returned by the DBCC statement.

FASTFAST
Especifica si se realiza un examen rápido del índice y se ofrece la mínima información de salida.Specifies whether to perform a fast scan of the index and output minimal information. Un examen rápido no lee las páginas hoja o de nivel de datos del índice.A fast scan does not read the leaf or data level pages of the index.

ALL_INDEXESALL_INDEXES
Muestra el resultado de todos los índices para las tablas y vistas especificadas, aunque se haya especificado un índice determinado.Displays results for all the indexes for the specified tables and views, even if a particular index is specified.

TABLERESULTSTABLERESULTS
Muestra el resultado como un conjunto de filas, con información adicional.Displays results as a rowset, with additional information.

ALL_LEVELSALL_LEVELS
Se mantiene únicamente por compatibilidad con versiones anteriores.Maintained for backward compatibility only. Aunque se especifique ALL_LEVELS, solo se procesa el nivel hoja de índice o el nivel de datos de tabla.Even if ALL_LEVELS is specified, only the index leaf level or table data level is processed.

NO_INFOMSGSNO_INFOMSGS
Suprime todos los mensajes informativos con niveles de gravedad entre 0 y 10.Suppresses all informational messages that have severity levels from 0 through 10.

Conjuntos de resultadosResult Sets

En la tabla siguiente se describe la información del conjunto de resultados.The following table describes the information in the result set.

EstadísticaStatistic DescripciónDescription
Páginas examinadasPages Scanned Número de páginas de la tabla o el índice.Number of pages in the table or index.
Extensiones examinadasExtents Scanned Número de extensiones de la tabla o el índice.Number of extents in the table or index.
Cambios de extensiónExtent Switches Número de veces que la instrucción DBCC se ha movido de una extensión a otra al examinar las páginas de la tabla o el índice.Number of times the DBCC statement moved from one extent to another while the statement traversed the pages of the table or index.
Avg. páginas por extensiónAvg. Pages per Extent Número de páginas por extensión en la cadena de páginas.Number of pages per extent in the page chain.
Densidad de examen [Mejor recuento: Recuento real]Scan Density [Best Count: Actual Count] Es un porcentaje.Is a percentage. Es la relación entre Mejor recuento y Recuento real.It is the ratio Best Count to Actual Count. Este valor es 100 si todo es contiguo; si dicho valor es inferior a 100, existe fragmentación.This value is 100 if everything is contiguous; if this value is less than 100, some fragmentation exists.

Mejor recuento es el número ideal de cambios de extensión si todo está vinculado de forma contigua.Best Count is the ideal number of extent changes if everything is contiguously linked. Recuento real es el número real de cambios de extensión.Actual Count is the actual number of extent changes.
Fragmentación de examen lógicoLogical Scan Fragmentation Porcentaje de páginas que no funcionan resultante del examen de las páginas hoja del índice.Percentage of out-of-order pages returned from scanning the leaf pages of an index. Este número no es relevante para los montones.This number is not relevant to heaps. Una página no ordenada es aquella en la que la siguiente página física asignada al índice no es la que señala el puntero de página siguiente en la página hoja actual.An out-of-order page is a page for which the next physical page allocated to the index is not the page pointed to by the next-page pointer in the current leaf page.
Fragmentación de examen de extensiónExtent Scan Fragmentation Porcentaje de extensiones que no funcionan resultante del examen de las páginas hoja del índice.Percentage of out-of-order extents in scanning the leaf pages of an index. Este número no es relevante para los montones.This number is not relevant to heaps. Una extensión que no funciona es aquella en que la extensión que contiene la página actual de un índice no es físicamente la extensión siguiente a la que contiene la página anterior de un índice.An out-of-order extent is one for which the extent that contains the current page for an index is not physically the next extent after the extent that contains the previous page for an index.

Nota: Este número carece de significado si el índice abarca varios archivos.Note: This number is meaningless when the index spans multiple files.
Avg. bytes libres por páginaAvg. Bytes Free per Page Valor promedio de los bytes libres de las páginas exploradas.Average number of free bytes on the pages scanned. Cuanto más alto es el número, menos llenas estarán las páginas.The larger the number, the less full the pages are. Los números más bajos funcionan mejor si el índice no contiene muchas inserciones aleatorias.Lower numbers are better if the index will not have many random inserts. Este número también está influido por el tamaño de la fila; un tamaño de fila grande puede provocar un número más alto.This number is also affected by row size; a large row size can cause a larger number.
Avg. densidad de página (completa)Avg. Page density (full) Promedio de densidad de página en porcentaje.Average page density, as a percentage. Este valor tiene en cuenta el tamaño de la fila.This value takes into account row size. Por consiguiente, dicho valor es una medida más precisa del grado de llenado de las páginas.Therefore, the value is a more accurate indication of how full your pages are. Cuanto mayor sea el porcentaje, mejor.The larger the percentage, the better.

Cuando se especifica id_de_tabla y FAST, DBCC SHOWCONTIG devuelve un conjunto de resultados con solo las columnas siguientes.When table_id and FAST are specified, DBCC SHOWCONTIG returns a result set with only the following columns.

  • Páginas examinadasPages Scanned
  • Cambios de extensiónExtent Switches
  • Densidad de examen [Mejor recuento:Recuento real]Scan Density [Best Count:Actual Count]
  • Fragmentación de examen de extensiónExtent Scan Fragmentation
  • Fragmentación de examen lógicoLogical Scan Fragmentation

Si se especifica TABLERESULTS, DBCC SHOWCONTIG devuelve las siguientes columnas además de las nueve columnas descritas en la tabla anterior.When TABLERESULTS is specified, DBCC SHOWCONTIG returns the following columns and also the nine columns described in the previous table.

EstadísticaStatistic DescripciónDescription
Nombre de objetoObject Name Nombre de la tabla o la vista procesada.Name of the table or view processed.
ObjectIdObjectId Id. del nombre del objeto.ID of the object name.
IndexNameIndexName Nombre del índice procesado.Name of the index processed. Es NULL para un montón.Is NULL for a heap.
IndexIdIndexId Id. del índice.ID of the index. Es 0 para un montón.Is 0 for a heap.
LevelLevel Nivel del índice.Level of the index. El nivel 0 es el nivel hoja o datos del índice.Level 0 is the leaf, or data, level of the index.

Para un montón, Level es 0.Level is 0 for a heap.
PáginasPages Número de páginas que componen el nivel del índice o de todo el montón.Number of pages that make up that level of the index or whole heap.
FilasRows Número de registros de datos o índices en este nivel del índice.Number of data or index records at that level of the index. Para un montón, este valor es el número de registros de datos en todo el montón.For a heap, this value is the number of data records in the whole heap.

En el caso de un montón, es posible que el número de registros devueltos por esta función no coincida con el número de filas devueltas al ejecutar SELECT COUNT(*) en el montón.For a heap, the number of records returned from this function might not match the number of rows that are returned by running a SELECT COUNT(*) against the heap. Esto es debido a que una fila puede contener varios registros.This is because a row may contain multiple records. Por ejemplo, en algunas situaciones de una actualización, una única fila del montón puede tener un registro de reenvío y un registro reenviado como resultado de la actualización.For example, under some update situations, a single heap row may have a forwarding record and a forwarded record as a result of the update operation. Asimismo, la mayoría de las filas LOB de gran tamaño se dividen en varios registros en almacenamiento de LOB_DATA.Also, most large LOB rows are split into multiple records in LOB_DATA storage.
MinimumRecordSizeMinimumRecordSize Tamaño mínimo del registro en el nivel de índice o en todo el montón.Minimum record size in that level of the index or whole heap.
MaximumRecordSizeMaximumRecordSize Tamaño máximo del registro en el nivel del índice o en todo el montón.Maximum record size in that level of the index or whole heap.
AverageRecordSizeAverageRecordSize Promedio de tamaño del registro en el nivel de índice o en todo el montón.Average record size in that level of the index or whole heap.
ForwardedRecordsForwardedRecords Número de registros reenviados en el nivel de índice o en todo el montón.Number of forwarded records in that level of the index or whole heap.
ExtentsExtents Número de extensiones en el nivel de índice o en todo el montón.Number of extents in that level of the index or whole heap.
ExtentSwitchesExtentSwitches Número de veces que la instrucción DBCC se ha movido de una extensión a otra al examinar las páginas de la tabla o el índice.Number of times the DBCC statement moved from one extent to another while the statement traversed the pages of the table or index.
AverageFreeBytesAverageFreeBytes Valor promedio de los bytes libres de las páginas exploradas.Average number of free bytes on the pages scanned. Cuanto más alto es el número, menos llenas estarán las páginas.The larger the number, the less full the pages are. Los números más bajos funcionan mejor si el índice no contiene muchas inserciones aleatorias.Lower numbers are better if the index will not have many random inserts. Este número también está influido por el tamaño de la fila; un tamaño de fila grande puede provocar un número más alto.This number is also affected by row size; a large row size can cause a larger number.
AveragePageDensityAveragePageDensity Promedio de densidad de página en porcentaje.Average page density, as a percentage. Este valor tiene en cuenta el tamaño de la fila.This value takes into account row size. Por consiguiente, dicho valor es una medida más precisa del grado de llenado de las páginas.Therefore, the value is a more accurate indication of how full your pages are. Cuanto mayor sea el porcentaje, mejor.The larger the percentage, the better.
ScanDensityScanDensity Es un porcentaje.Is a percentage. Es la relación entre BestCount y ActualCount.It is the ratio BestCount to ActualCount. Este valor es 100 si todo es contiguo; si dicho valor es inferior a 100, existe fragmentación.This value is 100 if everything is contiguous; if this value is less than 100, some fragmentation exists.
BestCountBestCount Es el número idóneo de cambios de extensión si todo está vinculado de forma contigua.Is the ideal number of extent changes if everything is contiguously linked.
ActualCountActualCount Es el número real de cambios de extensión.Is the actual number of extent changes.
LogicalFragmentationLogicalFragmentation Porcentaje de páginas que no funcionan resultante del examen de las páginas hoja del índice.Percentage of out-of-order pages returned from scanning the leaf pages of an index. Este número no es relevante para los montones.This number is not relevant to heaps. Una página no ordenada es aquella en la que la siguiente página física asignada al índice no es la que señala el puntero de página siguiente en la página hoja actual.An out-of-order page is a page for which the next physical page allocated to the index is not the page pointed to by the next-page pointer in the current leaf page.
ExtentFragmentationExtentFragmentation Porcentaje de extensiones que no funcionan resultante del examen de las páginas hoja del índice.Percentage of out-of-order extents in scanning the leaf pages of an index. Este número no es relevante para los montones.This number is not relevant to heaps. Una extensión que no funciona es aquella en que la extensión que contiene la página actual de un índice no es físicamente la extensión siguiente a la que contiene la página anterior de un índice.An out-of-order extent is one for which the extent that contains the current page for an index is not physically the next extent after the extent that contains the previous page for an index.

Nota: Este número carece de significado si el índice abarca varios archivos.Note: This number is meaningless when the index spans multiple files.

Cuando se especifican WITH TABLERESULTS y FAST, el conjunto de resultados es el mismo que cuando se especifica WITH TABLERESULTS, con la diferencia de que las siguientes columnas tendrán valores NULL:When WITH TABLERESULTS and FAST are specified, the result set is the same as when WITH TABLERESULTS is specified, except the following columns will have null values:

FilasRows ExtentsExtents
MinimumRecordSizeMinimumRecordSize AverageFreeBytesAverageFreeBytes
MaximumRecordSizeMaximumRecordSize AveragePageDensityAveragePageDensity
AverageRecordSizeAverageRecordSize ExtentFragmentationExtentFragmentation
ForwardedRecordsForwardedRecords

NotasRemarks

Cuando se especifica id_de_índice, la instrucción DBCC SHOWCONTIG recorre la cadena de páginas en el nivel hoja del índice especificado.The DBCC SHOWCONTIG statement traverses the page chain at the leaf level of the specified index when index_id is specified. Si solo se especifica id_de_tabla o si id_de_índice es 0, se examinan las páginas de datos de la tabla especificada.If only table_id is specified or if index_id is 0, the data pages of the specified table are scanned. Esta operación solo requiere un bloqueo de tabla con intención compartida (IS).The operation only requires an intent-shared (IS) table lock. De este modo, se pueden realizar todas las actualizaciones e inserciones excepto las que requieren un bloqueo de tabla exclusivo (X).This way all updates and inserts can be performed, except those that require an exclusive (X) table lock. Esto permite un equilibrio entre la velocidad de ejecución y la no reducción de la simultaneidad con respecto al número de estadísticas devueltas.This allows for a tradeoff between speed of execution and no reduction in concurrency against the number of statistics returned. No obstante, si el comando se va a utilizar solo para medir la fragmentación, se recomienda utilizar la opción WITH FAST para que el rendimiento sea óptimo.However, if the command is being used only to gauge fragmentation, we recommend that you use the WITH FAST option for optimal performance. Un examen rápido no lee las páginas hoja o de nivel de datos del índice.A fast scan does not read the leaf or data level pages of the index. La opción WITH FAST no se aplica a un montón.The WITH FAST option does not apply to a heap.

RestrictionsRestrictions

DBCC SHOWCONTIG no muestra los datos con los tipos de datos ntext, text e image.DBCC SHOWCONTIG does not display data with ntext, text, and image data types. Esto se debe a que ya no existen índices de texto que almacenan datos de texto e imagen.This is because text indexes that store text and image data no longer exist.

Además, DBCC SHOWCONTIG no admite algunas características nuevas.Also, DBCC SHOWCONTIG does not support some new features. Por ejemplo:For example:

  • Si la tabla o el índice especificados tienen particiones, DBCC SHOWCONTIG solo muestra la primera partición de la tabla o el índice especificados.If the specified table or index is partitioned, DBCC SHOWCONTIG only displays the first partition of the specified table or index.
  • DBCC SHOWCONTIG no muestra la información de almacenamiento de desbordamiento de fila y otros tipos de datos no consecutivos nuevos como nvarchar(max) , varchar(max) , varbinary(max) y xml.DBCC SHOWCONTIG does not display row-overflow storage information and other new off-row data types, such as nvarchar(max), varchar(max), varbinary(max), and xml.
  • DBCC SHOWCONTIG no admite los índices espaciales.Spatial indexes are not supported by DBCC SHOWCONTIG.

Todas las características nuevas son totalmente compatibles con la vista de administración dinámica sys.dm_db_index_physical_stats (Transact-SQL).All new features are fully supported by the sys.dm_db_index_physical_stats (Transact-SQL) dynamic management view.

Fragmentación de tablasTable Fragmentation

DBCC SHOWCONTIG determina si la tabla está muy fragmentada.DBCC SHOWCONTIG determines whether the table is heavily fragmented. La fragmentación de las tablas es consecuencia de los procesos de modificación de los datos (instrucciones INSERT, UPDATE y DELETE) efectuados en las tablas.Table fragmentation occurs through the process of data modifications (INSERT, UPDATE, and DELETE statements) made against the table. Como dichas modificaciones no suelen estar distribuidas de forma equilibrada entre todas las filas de la tabla, el llenado de cada página puede variar con el paso del tiempo.Because these modifications are not ordinarily distributed equally among the rows of the table, the fullness of each page can vary over time. En las consultas que examinan la totalidad o parte de una tabla, esta fragmentación de tabla puede ocasionar lecturas de páginas adicionales.For queries that scan part or all of a table, such table fragmentation can cause additional page reads. Esto impide el examen paralelo de los datos.This hinders parallel scanning of data.

Cuando un índice está muy fragmentado, existen dos opciones para reducir la fragmentación:When an index is heavily fragmented, the following choices are available for reducing fragmentation:

  • Quite y vuelva a crear un índice clúster.Drop and re-create a clustered index.
    La reconstrucción de un índice clúster reorganiza los datos y hace que las páginas de datos se llenen.Re-creating a clustered index reorganizes the data, and causes full data pages. El grado de llenado puede configurarse con la opción FILLFACTOR de CREATE INDEX.The level of fullness can be configured by using the FILLFACTOR option in CREATE INDEX. El inconveniente de este método es que el índice está sin conexión durante el proceso de eliminación y nueva creación, y que la operación es atómica.The drawbacks of this method are that the index is offline during the drop or re-create cycle, and that the operation is atomic. Si se interrumpe la creación del índice, no vuelve a crearse.If the index creation is interrupted, the index is not re-created.
  • Reordene las páginas de nivel hoja del índice en un orden lógico.Reorder the leaf-level pages of the index in a logical order.
    Use ALTER INDEX…REORGANIZE para cambiar el orden de las páginas de nivel hoja del índice en un orden lógico.Use ALTER INDEX...REORGANIZE to reorder the leaf-level pages of the index in a logical order. Dado que esta operación se realiza en línea, el índice está disponible mientras se ejecuta la instrucción.Because this operation is an online operation, the index is available when the statement is running. También es posible interrumpir la operación sin perder todo el trabajo.The operation is also interruptible without loss of completed work. El inconveniente de este método es que no es una forma tan buena de reorganizar los datos como la operación de quitar y volver a crear el índice clúster.The drawback of this method is that the method does not do as good a job of reorganizing the data as a clustered index drop or re-create operation.
  • Vuelva a generar el índice.Rebuild the index.
    Para volver a generar el índice, utilice ALTER INDEX con REBUILD.Use ALTER INDEX with REBUILD to rebuild the index. Para obtener más información, vea ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).

Las estadísticas Avg. bytes libres por página y Promedio de densidad de página (completa) del conjunto de resultados indican el llenado de las páginas de índice.The Avg. Bytes free per page and Avg. Page density (full) statistic in the result set indicate the fullness of index pages. Las estadísticas Avg. bytes libres por página debería ser bajo y el de Promedio de densidad de página (completa) debería ser alto para un índice que no tenga muchas inserciones aleatorias.The Avg. Bytes free per page number should be low and the Avg. Page density (full) number should be high for an index that will not have many random inserts. Quitar y volver a crear un índice con la opción FILLFACTOR especificada puede mejorar estas estadísticas.Dropping and re-creating an index with the FILLFACTOR option specified can improve the statistics. Además, ALTER INDEX con REORGANIZE compactará un índice, teniendo en cuenta FILLFACTOR, lo que mejorará las estadísticas.Also, ALTER INDEX with REORGANIZE will compact an index, taking into account its FILLFACTOR, and will improve the statistics.

Nota

En un índice que contenga muchas inserciones aleatorias y páginas muy llenas se produce un aumento de las divisiones de páginas.An index that has many random inserts and very full pages will have an increased number of page splits. Esto causa más fragmentación.This causes more fragmentation.

El nivel de fragmentación de un índice puede determinarse de las siguientes formas:The fragmentation level of an index can be determined in the following ways:

  • Mediante la comparación de los valores de Cambios de extensión y Extensiones examinadas.By comparing the values of Extent Switches and Extents Scanned.
    El valor de Cambios de extensión debe ser lo más parecido posible al de Extensiones examinadas.The value of Extent Switches should be as close as possible to that of Extents Scanned. Esta relación se calcula como el valor de Densidad del examen.This ratio is calculated as the Scan Density value. Dicho valor debe ser lo más alto posible y se puede aumentar mediante la reducción de la fragmentación del índice.This value should be as high as possible, and can be improved by reducing index fragmentation.

    Nota

    Este método no funciona si el índice abarca varios archivos.This method does not work if the index spans multiple files.

  • Mediante la comprensión de los valores de Fragmentación de examen lógico y Fragmentación de examen de extensión.By understanding Logical Scan Fragmentation and Extent Scan Fragmentation values.
    Los valores de Fragmentación de examen lógico y, en menor medida, los de Fragmentación de examen de extensión, ofrecen la mejor indicación del nivel de fragmentación de una tabla.Logical Scan Fragmentation and, to a lesser extent, Extent Scan Fragmentation values are the best indicators of the fragmentation level of a table. Ambos valores deberían tender a cero tanto como fuera posible, aunque puede ser aceptable un valor entre el 0 y el 10 por ciento.Both these values should be as close to zero as possible, although a value from 0 through 10 percent may be acceptable.

    Nota

    El valor de Fragmentación de examen de extensión es alto si el índice abarca varios archivos.The Extent Scan Fragmentation value will be high if the index spans multiple files. Para reducir estos valores, debe reducir la fragmentación del índice.To reduce these values, you must reduce the index fragmentation.

PermisosPermissions

El usuario debe ser propietario de la tabla o ser un miembro del rol fijo de servidor sysadmin o de los roles fijos de base de datos db_owner o db_ddladmin.User must own the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

EjemplosExamples

A.A. Presentar la información de fragmentación de una tablaDisplaying fragmentation information for a table

En el siguiente ejemplo se muestra la información de fragmentación para la tabla Employee.The following example displays fragmentation information for the Employee table.

USE AdventureWorks2012;  
GO  
DBCC SHOWCONTIG ('HumanResources.Employee');  
GO  

B.B. Usar OBJECT_ID para obtener el Id. de la tabla y sys.indexes para obtener el Id. del índiceUsing OBJECT_ID to obtain the table ID and sys.indexes to obtain the index ID

En el siguiente ejemplo se usa OBJECT_ID y la vista de catálogo sys.indexes para obtener el id. de tabla y el id. de índice para el índice AK_Product_Name de la tabla Production.Product de la base de datos AdventureWorks2012AdventureWorks2012.The following example uses OBJECT_ID and the sys.indexes catalog view to obtain the table ID and index ID for the AK_Product_Name index of the Production.Product table in the AdventureWorks2012AdventureWorks2012 database.

USE AdventureWorks2012;  
GO  
DECLARE @id int, @indid int  
SET @id = OBJECT_ID('Production.Product')  
SELECT @indid = index_id   
FROM sys.indexes  
WHERE object_id = @id   
   AND name = 'AK_Product_Name'  
DBCC SHOWCONTIG (@id, @indid);  
GO  

C.C. Mostrar un conjunto de resultados resumido de una tablaDisplaying an abbreviated result set for a table

En el siguiente ejemplo se devuelve un conjunto de resultados resumido para la tabla Product de la base de datos AdventureWorks2012AdventureWorks2012.The following example returns an abbreviated result set for the Product table in the AdventureWorks2012AdventureWorks2012 database.

USE AdventureWorks2012;  
GO  
DBCC SHOWCONTIG ('Production.Product', 1) WITH FAST;  
GO  

D.D. Mostrar el conjunto de resultados completo para todos los índices de todas las tablas de la base de datosDisplaying the full result set for every index on every table in a database

En el siguiente ejemplo se devuelve un conjunto de resultados de tabla completo para todos los índices de todas las tablas de la base de datos AdventureWorks2012AdventureWorks2012.The following example returns a full table result set for every index on every table in the AdventureWorks2012AdventureWorks2012 database.

USE AdventureWorks2012;  
GO  
DBCC SHOWCONTIG WITH TABLERESULTS, ALL_INDEXES;  
GO  

E.E. Usar DBCC SHOWCONTIG y DBCC INDEXDEFRAG para desfragmentar los índices de una base de datosUsing DBCC SHOWCONTIG and DBCC INDEXDEFRAG to defragment the indexes in a database

En el siguiente ejemplo se muestra una forma sencilla de desfragmentar todos los índices de una base de datos que está fragmentada por encima de un umbral declarado.The following example shows a simple way to defragment all indexes in a database that is fragmented above a declared threshold.

/*Perform a 'USE <database name>' to select the database in which to run the script.*/  
-- Declare variables  
SET NOCOUNT ON;  
DECLARE @tablename varchar(255);  
DECLARE @execstr   varchar(400);  
DECLARE @objectid  int;  
DECLARE @indexid   int;  
DECLARE @frag      decimal;  
DECLARE @maxfrag   decimal;  
  
-- Decide on the maximum fragmentation to allow for.  
SELECT @maxfrag = 30.0;  
  
-- Declare a cursor.  
DECLARE tables CURSOR FOR  
   SELECT TABLE_SCHEMA + '.' + TABLE_NAME  
   FROM INFORMATION_SCHEMA.TABLES  
   WHERE TABLE_TYPE = 'BASE TABLE';  
  
-- Create the table.  
CREATE TABLE #fraglist (  
   ObjectName char(255),  
   ObjectId int,  
   IndexName char(255),  
   IndexId int,  
   Lvl int,  
   CountPages int,  
   CountRows int,  
   MinRecSize int,  
   MaxRecSize int,  
   AvgRecSize int,  
   ForRecCount int,  
   Extents int,  
   ExtentSwitches int,  
   AvgFreeBytes int,  
   AvgPageDensity int,  
   ScanDensity decimal,  
   BestCount int,  
   ActualCount int,  
   LogicalFrag decimal,  
   ExtentFrag decimal);  
  
-- Open the cursor.  
OPEN tables;  
  
-- Loop through all the tables in the database.  
FETCH NEXT  
   FROM tables  
   INTO @tablename;  
  
WHILE @@FETCH_STATUS = 0  
BEGIN  
-- Do the showcontig of all indexes of the table  
   INSERT INTO #fraglist   
   EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''')   
      WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS');  
   FETCH NEXT  
      FROM tables  
      INTO @tablename;  
END;  
  
-- Close and deallocate the cursor.  
CLOSE tables;  
DEALLOCATE tables;  
  
-- Declare the cursor for the list of indexes to be defragged.  
DECLARE indexes CURSOR FOR  
   SELECT ObjectName, ObjectId, IndexId, LogicalFrag  
   FROM #fraglist  
   WHERE LogicalFrag >= @maxfrag  
      AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0;  
  
-- Open the cursor.  
OPEN indexes;  
  
-- Loop through the indexes.  
FETCH NEXT  
   FROM indexes  
   INTO @tablename, @objectid, @indexid, @frag;  
  
WHILE @@FETCH_STATUS = 0  
BEGIN  
   PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',  
      ' + RTRIM(@indexid) + ') - fragmentation currently '  
       + RTRIM(CONVERT(varchar(15),@frag)) + '%';  
   SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',  
       ' + RTRIM(@indexid) + ')';  
   EXEC (@execstr);  
  
   FETCH NEXT  
      FROM indexes  
      INTO @tablename, @objectid, @indexid, @frag;  
END;  
  
-- Close and deallocate the cursor.  
CLOSE indexes;  
DEALLOCATE indexes;  
  
-- Delete the temporary table.  
DROP TABLE #fraglist;  
GO  

Consulte tambiénSee Also

ALTER INDEX (Transact-SQL)ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)CREATE INDEX (Transact-SQL)
DBCC (Transact-SQL)DBCC (Transact-SQL)
DROP INDEX (Transact-SQL)DROP INDEX (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)sys.dm_db_index_physical_stats (Transact-SQL)
OBJECT_ID (Transact-SQL)OBJECT_ID (Transact-SQL)
sys.indexes (Transact-SQL)sys.indexes (Transact-SQL)