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

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)nãoBanco de Dados SQL do Microsoft AzurenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Exibe informações de fragmentação para os dados e índices da tabela ou exibição especificada.Displays fragmentation information for the data and indexes of the specified table or view.

Importante

Esse recurso será removido em uma versão futura do Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam.Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible. Use db_index_physical_stats nesse caso. Use sys.dm_db_index_physical_stats instead.

Aplica-se a: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 até a versão atual)Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through current version)

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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
É a tabela ou exibição de verificação das informações de fragmentação.Is the table or view to check for fragmentation information. Se não for especificado, serão verificadas todas as tabelas e exibições indexadas no banco de dados atual.If not specified, all tables and indexed views in the current database are checked. Para obter a tabela ou exibir a ID, use a função OBJECT_ID.To obtain the table or view ID, use the OBJECT_ID function.

index_name | index_idindex_name | index_id
É o índice de verificação das informações de fragmentação.Is the index to check for fragmentation information. Se não for especificado, a instrução processará o índice base da tabela ou exibição especificada.If not specified, the statement processes the base index for the specified table or view. Para obter a ID de índice, use a exibição de catálogo sys.indexes.To obtain the index ID, use the sys.indexes catalog view.

comWITH
Especifica opções para o tipo de informações retornado pela instrução DBCC.Specifies options for the type of information returned by the DBCC statement.

FASTFAST
Especifica se deve ser executada uma verificação rápida das informações mínimas de índice e de saída.Specifies whether to perform a fast scan of the index and output minimal information. Uma verificação rápida não lê as páginas em nível de dados ou folha do índice.A fast scan does not read the leaf or data level pages of the index.

ALL_INDEXESALL_INDEXES
Exibe resultados para todos os índices das tabelas e exibições especificadas, até mesmo se um índice particular for especificado.Displays results for all the indexes for the specified tables and views, even if a particular index is specified.

TABLERESULTSTABLERESULTS
Exibe resultados como um conjunto de linhas, com informações adicionais.Displays results as a rowset, with additional information.

ALL_LEVELSALL_LEVELS
Mantido somente para compatibilidade com versões anteriores.Maintained for backward compatibility only. Mesmo se ALL_LEVELS for especificado, só o nível folha de índice ou o nível de dados de tabela será processado.Even if ALL_LEVELS is specified, only the index leaf level or table data level is processed.

NO_INFOMSGSNO_INFOMSGS
Suprime todas as mensagens informativas com níveis de severidade de 0 a 10.Suppresses all informational messages that have severity levels from 0 through 10.

Conjuntos de resultadosResult Sets

A tabela a seguir descreve as informações do conjunto de resultados.The following table describes the information in the result set.

EstatísticaStatistic DescriçãoDescription
Páginas verificadasPages Scanned Número de páginas na tabela ou no índice.Number of pages in the table or index.
Extensões verificadasExtents Scanned Número de extensões na tabela ou no índice.Number of extents in the table or index.
Opções de extensãoExtent Switches O número de vezes que a instrução DBCC foi movida de uma extensão para outra enquanto atravessava as páginas da tabela ou do índice.Number of times the DBCC statement moved from one extent to another while the statement traversed the pages of the table or index.
Méd. de Páginas por extensãoAvg. Pages per Extent Número de páginas por extensão na cadeia de páginas.Number of pages per extent in the page chain.
Densidade da verificação [melhor contagem: contagem real]Scan Density [Best Count: Actual Count] É uma porcentagem.Is a percentage. É a taxa de Melhor Contagem para Contagem Real.It is the ratio Best Count to Actual Count. Esse valor será 100 se tudo for contíguo; se ele for menor que 100, isso indicará que existe alguma fragmentação.This value is 100 if everything is contiguous; if this value is less than 100, some fragmentation exists.

Melhor Contagem será o número ideal de alterações de extensão se tudo estiver vinculado de forma contígua.Best Count is the ideal number of extent changes if everything is contiguously linked. Contagem Real é o número real de alterações de extensão.Actual Count is the actual number of extent changes.
Fragmentação da verificação lógicaLogical Scan Fragmentation Porcentagem de páginas com problema retornadas da verificação de páginas de folha de um índice.Percentage of out-of-order pages returned from scanning the leaf pages of an index. Esse número não é relevante para heaps.This number is not relevant to heaps. Uma página fora de ordem é aquela cuja próxima página física alocada ao índice não é a página apontada pelo ponteiro de próxima página na página de folha atual.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.
Fragmentação da verificação de extensãoExtent Scan Fragmentation Porcentagem de extensões com problemas na verificação de páginas de folha de um índice.Percentage of out-of-order extents in scanning the leaf pages of an index. Esse número não é relevante para heaps.This number is not relevant to heaps. Uma extensão com problema é aquela para a qual a extensão que contém a página atual de um índice não é fisicamente a próxima extensão depois da extensão que contém a página anterior de um í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.

Observação: esse número é insignificante quando o índice abrange vários arquivos.Note: This number is meaningless when the index spans multiple files.
Méd. de Bytes livres por páginaAvg. Bytes Free per Page Número médio de bytes livres em páginas verificadas.Average number of free bytes on the pages scanned. Quanto maior o número, mais vazias ficarão as páginas.The larger the number, the less full the pages are. Números inferiores serão melhores se o índice não tiver muitas inserções aleatórias.Lower numbers are better if the index will not have many random inserts. Esse número também é afetado pelo tamanho da linha; uma linha grande pode gerar um número maior.This number is also affected by row size; a large row size can cause a larger number.
Méd. de Densidade de página (completa)Avg. Page density (full) Densidade média da página, como uma porcentagem.Average page density, as a percentage. Esse valor leva em consideração o tamanho de linha.This value takes into account row size. Por isso, o valor é uma indicação mais precisa de quão cheias estão as páginas.Therefore, the value is a more accurate indication of how full your pages are. Quanto maior a porcentagem, melhor.The larger the percentage, the better.

Quando table_id e FAST forem especificados, DBCC SHOWCONTIG retornará um conjunto de resultados apenas com as próximas colunas.When table_id and FAST are specified, DBCC SHOWCONTIG returns a result set with only the following columns.

  • Páginas verificadasPages Scanned
  • Opções de extensãoExtent Switches
  • Densidade da verificação [melhor contagem : contagem real]Scan Density [Best Count:Actual Count]
  • Fragmentação da verificação de extensãoExtent Scan Fragmentation
  • Fragmentação da verificação lógicaLogical Scan Fragmentation

Quando TABLERESULTS é especificado, DBCC SHOWCONTIG retorna as seguintes colunas e também as nove colunas descritas na tabela anterior.When TABLERESULTS is specified, DBCC SHOWCONTIG returns the following columns and also the nine columns described in the previous table.

EstatísticaStatistic DescriçãoDescription
Object NameObject Name Nome da tabela ou exibição processada.Name of the table or view processed.
ObjectIdObjectId ID do nome do objeto.ID of the object name.
IndexNameIndexName Nome do índice processado.Name of the index processed. É NULL para um heap.Is NULL for a heap.
IndexIdIndexId ID do índice.ID of the index. É 0 para um heap.Is 0 for a heap.
LevelLevel Nível do índice.Level of the index. Nível 0 é o nível folha ou dados do índice.Level 0 is the leaf, or data, level of the index.

Nível é 0 para um heap.Level is 0 for a heap.
PáginasPages Número de páginas que compõem o nível do índice ou de todo o heap.Number of pages that make up that level of the index or whole heap.
LinhasRows Número de dados ou registros de índice no nível do índice.Number of data or index records at that level of the index. Para um heap, esse valor é o número de registros de dados em todo o heap.For a heap, this value is the number of data records in the whole heap.

Para um heap, o número de registros retornados de sua função pode não corresponder ao número de linhas retornadas devido à execução de SELECT COUNT(*) relacionada ao heap.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. Isso porque uma linha pode conter vários registros.This is because a row may contain multiple records. Por exemplo, em algumas situações de atualização, uma única linha de heap pode ter um registro de encaminhamento e um registro encaminhado como resultado de uma operação de atualização.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. Da mesma forma, a maior parte das linhas de LOB grandes é dividida em vários registros no armazenamento LOB_DATA.Also, most large LOB rows are split into multiple records in LOB_DATA storage.
MinimumRecordSizeMinimumRecordSize Tamanho mínimo do registro no nível do índice ou de todo o heap.Minimum record size in that level of the index or whole heap.
MaximumRecordSizeMaximumRecordSize Tamanho máximo do registro no nível do índice ou de todo o heap.Maximum record size in that level of the index or whole heap.
AverageRecordSizeAverageRecordSize Tamanho médio do registro no nível do índice ou de todo o heap.Average record size in that level of the index or whole heap.
ForwardedRecordsForwardedRecords Número de registros encaminhados no nível do índice ou de todo o heap.Number of forwarded records in that level of the index or whole heap.
ExtensõesExtents Número de extensões no nível do índice ou de todo o heap.Number of extents in that level of the index or whole heap.
ExtentSwitchesExtentSwitches O número de vezes que a instrução DBCC foi movida de uma extensão para outra enquanto atravessava as páginas da tabela ou do í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 Número médio de bytes livres em páginas verificadas.Average number of free bytes on the pages scanned. Quanto maior o número, mais vazias ficarão as páginas.The larger the number, the less full the pages are. Números inferiores serão melhores se o índice não tiver muitas inserções aleatórias.Lower numbers are better if the index will not have many random inserts. Esse número também é afetado pelo tamanho da linha; uma linha grande pode gerar um número maior.This number is also affected by row size; a large row size can cause a larger number.
AveragePageDensityAveragePageDensity Densidade média da página, como uma porcentagem.Average page density, as a percentage. Esse valor leva em consideração o tamanho de linha.This value takes into account row size. Por isso, o valor é uma indicação mais precisa de quão cheias estão as páginas.Therefore, the value is a more accurate indication of how full your pages are. Quanto maior a porcentagem, melhor.The larger the percentage, the better.
ScanDensityScanDensity É uma porcentagem.Is a percentage. É a taxa de BestCount para ActualCount.It is the ratio BestCount to ActualCount. Esse valor será 100 se tudo for contíguo; se ele for menor que 100, isso indicará que existe alguma fragmentação.This value is 100 if everything is contiguous; if this value is less than 100, some fragmentation exists.
BestCountBestCount Será o número ideal de alterações de extensão se tudo for vinculado contiguamente.Is the ideal number of extent changes if everything is contiguously linked.
ActualCountActualCount É o número real de alterações de extensão.Is the actual number of extent changes.
LogicalFragmentationLogicalFragmentation Porcentagem de páginas com problema retornadas da verificação de páginas de folha de um índice.Percentage of out-of-order pages returned from scanning the leaf pages of an index. Esse número não é relevante para heaps.This number is not relevant to heaps. Uma página fora de ordem é aquela cuja próxima página física alocada ao índice não é a página apontada pelo ponteiro de próxima página na página de folha atual.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 Porcentagem de extensões com problemas na verificação de páginas de folha de um índice.Percentage of out-of-order extents in scanning the leaf pages of an index. Esse número não é relevante para heaps.This number is not relevant to heaps. Uma extensão com problema é aquela para a qual a extensão que contém a página atual de um índice não é fisicamente a próxima extensão depois da extensão que contém a página anterior de um í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.

Observação: esse número é insignificante quando o índice abrange vários arquivos.Note: This number is meaningless when the index spans multiple files.

Quando WITH TABLERESULTS e FAST forem especificados, o conjunto de resultados será o mesmo de quando WITH TABLERESULTS for especificado, exceto que as seguintes colunas terão valores nulos: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:

LinhasRows ExtensõesExtents
MinimumRecordSizeMinimumRecordSize AverageFreeBytesAverageFreeBytes
MaximumRecordSizeMaximumRecordSize AveragePageDensityAveragePageDensity
AverageRecordSizeAverageRecordSize ExtentFragmentationExtentFragmentation
ForwardedRecordsForwardedRecords

RemarksRemarks

A instrução DBCC SHOWCONTIG atravessa a cadeia de páginas no nível da folha do índice especificado quando index_id é especificado.The DBCC SHOWCONTIG statement traverses the page chain at the leaf level of the specified index when index_id is specified. Se apenas table_id for especificado ou se index_id for 0, as páginas de dados da tabela especificada serão verificadas.If only table_id is specified or if index_id is 0, the data pages of the specified table are scanned. A operação somente requer um bloqueio de tabela de tentativa compartilhada (IS).The operation only requires an intent-shared (IS) table lock. Desse modo, podem ser executadas todas as atualizações e inserções, exceto as que exigirem um bloqueio de tabela exclusivo (X).This way all updates and inserts can be performed, except those that require an exclusive (X) table lock. Isso permite um equilíbrio entre a velocidade da execução e nenhuma redução da simultaneidade em relação ao número de estatísticas retornadas.This allows for a tradeoff between speed of execution and no reduction in concurrency against the number of statistics returned. Entretanto, se o comando estiver sendo usado apenas para medir a fragmentação, recomendamos o uso da opção WITH FAST para obter um desempenho melhor.However, if the command is being used only to gauge fragmentation, we recommend that you use the WITH FAST option for optimal performance. Uma verificação rápida não lê as páginas em nível de dados ou folha do índice.A fast scan does not read the leaf or data level pages of the index. A opção WITH FAST não se aplica a um heap.The WITH FAST option does not apply to a heap.

RestrictionsRestrictions

DBCC SHOWCONTIG não exibe dados com os tipos de dados ntext, text e image.DBCC SHOWCONTIG does not display data with ntext, text, and image data types. Isso ocorre porque os índices de texto que armazenam dados de texto e imagem já não existem mais.This is because text indexes that store text and image data no longer exist.

Da mesma forma, DBCC SHOWCONTIG não oferece suporte a alguns recursos novos.Also, DBCC SHOWCONTIG does not support some new features. Por exemplo:For example:

  • Se a tabela ou o índice especificado for particionado, DBCC SHOWCONTIG exibirá apenas a primeira partição da tabela ou índice especificado.If the specified table or index is partitioned, DBCC SHOWCONTIG only displays the first partition of the specified table or index.
  • DBCC SHOWCONTIG não exibe informações de armazenamento de estouro de linha e de outros novos tipos de dados fora da linha, como nvarchar(max), varchar(max), varbinary(max) e 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.
  • Não há suporte para índices de espaço pelo DBCC SHOWCONTIG.Spatial indexes are not supported by DBCC SHOWCONTIG.

Todos os novos recursos são totalmente compatíveis com a exibição de gerenciamento dinâmico 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.

Fragmentação de tabelaTable Fragmentation

DBCC SHOWCONTIG determina se a tabela está muito fragmentada.DBCC SHOWCONTIG determines whether the table is heavily fragmented. A fragmentação da tabela ocorre pelo processo de modificações de dados (instruções INSERT, UPDATE e DELETE) efetuado na tabela.Table fragmentation occurs through the process of data modifications (INSERT, UPDATE, and DELETE statements) made against the table. Como essas modificações não são distribuídas uniformemente entre as linhas da tabela, o preenchimento de cada página pode variar com o tempo.Because these modifications are not ordinarily distributed equally among the rows of the table, the fullness of each page can vary over time. Para consultas que verificam parte de uma tabela ou toda ela, tal fragmentação de tabela pode causar leituras de página adicionais.For queries that scan part or all of a table, such table fragmentation can cause additional page reads. Isso impede o exame paralelo de dados.This hinders parallel scanning of data.

Quando um índice está bastante fragmentado, as opções a seguir são disponibilizadas para reduzir a fragmentação:When an index is heavily fragmented, the following choices are available for reducing fragmentation:

  • Descartar e recriar um índice clusterizado.Drop and re-create a clustered index.
    Recriar um índice clusterizado reorganiza os dados e gera páginas de dados cheias.Re-creating a clustered index reorganizes the data, and causes full data pages. O nível de preenchimento pode ser configurado usando a opção FILLFACTOR em CREATE INDEX.The level of fullness can be configured by using the FILLFACTOR option in CREATE INDEX. As desvantagens desse método são que o índice fica offline durante o ciclo de descarte ou recriação e que a operação é 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. Se a criação de índice for suspensa, o índice não será recriado.If the index creation is interrupted, the index is not re-created.
  • Reordenar as páginas de nível folha do índice em uma ordem lógica.Reorder the leaf-level pages of the index in a logical order.
    Use ALTER INDEX.REORGANIZE para reordenar as páginas de nível folha do índice em uma ordem lógica.Use ALTER INDEX…REORGANIZE to reorder the leaf-level pages of the index in a logical order. Por essa operação ser online, o índice estará disponível quando a instrução estiver em execução.Because this operation is an online operation, the index is available when the statement is running. A operação também pode ser interrompida sem perda de trabalho concluído.The operation is also interruptible without loss of completed work. A desvantagem desse método é que ele não reorganiza muito bem os dados como uma operação de recriação ou descarte de índice clusterizado.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.
  • Reconstruir o índice.Rebuild the index.
    Use ALTER INDEX com REBUILD para reconstruir o índice.Use ALTER INDEX with REBUILD to rebuild the index. Para obter mais informações, consulte ALTER INDEX (Transact-SQL).For more information, see ALTER INDEX (Transact-SQL).

O número da Média de bytes livres por página e Média de densidade de página (completa) no conjunto de resultados indicam o preenchimento de 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. O número da Média de bytes livres por página deve ser baixo e o número da Média de densidade de página (completa) deve ser alto para um índice sem muitas inserções aleatórias.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. Descartar e recriar um índice com a opção de FILLFACTOR especificada pode melhorar as estatísticas.Dropping and re-creating an index with the FILLFACTOR option specified can improve the statistics. Da mesma forma, ALTER INDEX com REORGANIZE compactará um índice, levando em conta seu FILLFACTOR e melhorará as estatísticas.Also, ALTER INDEX with REORGANIZE will compact an index, taking into account its FILLFACTOR, and will improve the statistics.

Observação

Um índice que tem muitas inserções aleatórias e páginas muito cheias terá um número maior de separações de página.An index that has many random inserts and very full pages will have an increased number of page splits. Isso causa mais fragmentação.This causes more fragmentation.

O nível de fragmentação de um índice pode ser determinado dos seguintes modos:The fragmentation level of an index can be determined in the following ways:

  • Comparando os valores de Opções de extensão e Extensões verificadas.By comparing the values of Extent Switches and Extents Scanned.
    O valor de Opções de extensão deve ser o mais próximo possível do valor de Extensões verificadas.The value of Extent Switches should be as close as possible to that of Extents Scanned. Essa taxa é calculada como o valor de Densidade da Verificação.This ratio is calculated as the Scan Density value. Esse valor deve ser o mais alto possível e pode ser melhorado reduzindo-se a fragmentação de índice.This value should be as high as possible, and can be improved by reducing index fragmentation.

    Observação

    Esse método não funcionará se o índice se estender a vários arquivos.This method does not work if the index spans multiple files.

  • Entendendo os valores de Fragmentação da Verificação Lógica e de Fragmentação da Verificação de Extensão.By understanding Logical Scan Fragmentation and Extent Scan Fragmentation values.
    Os valores de Fragmentação da Verificação Lógica e, em um âmbito menor, Fragmentação da Verificação de Extensão são os melhores indicadores do nível de fragmentação de uma tabela.Logical Scan Fragmentation and, to a lesser extent, Extent Scan Fragmentation values are the best indicators of the fragmentation level of a table. Esses dois valores devem ser o mais próximo possível de zero, embora um valor de 0 a 10% possa ser aceito.Both these values should be as close to zero as possible, although a value from 0 through 10 percent may be acceptable.

    Observação

    O valor de Fragmentação da Verificação de Extensão será alto se o índice abranger vários arquivos.The Extent Scan Fragmentation value will be high if the index spans multiple files. Para reduzir esses valores, você deve reduzir a fragmentação de índice.To reduce these values, you must reduce the index fragmentation.

PermissõesPermissions

O usuário precisa ser o proprietário da tabela ou ser membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa 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.

ExemplosExamples

A.A. Exibindo informações de fragmentação de uma tabelaDisplaying fragmentation information for a table

O exemplo a seguir exibe informações de fragmentação da tabela Employee.The following example displays fragmentation information for the Employee table.

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

B.B. Usando OBJECT_ID para obter a ID de tabela e sys.indexes para obter a ID de índiceUsing OBJECT_ID to obtain the table ID and sys.indexes to obtain the index ID

O exemplo a seguir usa OBJECT_ID e a exibição de catálogo sys.indexes para obter a ID da tabela e a ID do índice para o índice AK_Product_Name da tabela Production.Product no banco de dados 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. Exibindo um conjunto de resultados abreviado para uma tabelaDisplaying an abbreviated result set for a table

O exemplo a seguir retorna um conjunto de resultados abreviado para a tabela Product no banco de dados 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. Exibindo o conjunto de resultados completo de todos os índices de todas as tabelas em um banco de dadosDisplaying the full result set for every index on every table in a database

O exemplo a seguir retorna um conjunto de resultados de tabela completo de todos os índices em todas as tabelas no banco de dados 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. Usando DBCC SHOWCONTIG e DBCC INDEXDEFRAG para desfragmentar os índices em um banco de dadosUsing DBCC SHOWCONTIG and DBCC INDEXDEFRAG to defragment the indexes in a database

O exemplo a seguir mostra uma maneira simples de desfragmentar todos os índices em um banco de dados que estão fragmentados acima de um limite 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 TambémSee 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)