Uma fragmentação ocorre quando o banco de dados de ordem lógica do índice de base de dados não corresponde a alocação física dos dados no disco. Como as alterações de dados no banco de dados, as tabelas de índice de banco de dados tornam-se espalhados por todo o disco. Ele aumenta o tempo necessário para acessar os dados, resultando em diminuição do desempenho de aplicações. Os comandos do console do banco de dados MSSQL lhe permitem reconstruir ou índices de desfragmentação. Você precisa usar a instrução DBCC DBEREINDEX para desfragmentar um índice de banco de dados MSSQL.
Clique no "Começar" botão do Windows e selecione "Todos os programas." Clique para abrir o "Console de Gerenciamento de SQL."
Digite as seguintes instruções SQL na janela do console:
NOCOUNT SET ON-
DECLARE @TableName varchar (255) -
DECLARE @execstr varchar (400) -
DECLARE @objectid INT
DECLARE @indexid INT
DECLARE @frag decimal-
DECLARE @maxfrag decimal;SELECIONAR @maxfrag = 30,0;
DECLARE tabelas do cursor para
TABLE_SCHEMA Select + `.` + TABLE_NAME
de information_schema.tables
ONDE TABLE_TYPE = `tabela base`;CRIAR #fraglist TABLE (
ObjectName char (255),
ObjectId int,
IndexName char (255),
IndexId int,
int lvl,
CountPages int,
CountRows int,
MinRecSize int,
MAXRECSIZE int,
AvgRecSize int,
ForRecCount int,
Extensões int,
ExtentSwitches int,
AvgFreeBytes int,
AvgPageDensity int,
ScanDensity decimal,
BestCount int,
ActualCount int,
LogicalFrag decimal,
ExtentFrag decimal);mesas abertas;
BUSQUE PRÓXIMA
a partir de tabelas
INTO @TableName;ENQUANTO @@ FETCH_STATUS = 0
INÍCIO
INSERT INTO #fraglist
EXEC ( `DBCC SHOWCONTIG (` `` + + @TableName `` `)Com rapidez, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS `) -
BUSQUE PRÓXIMA
a partir de tabelas
INTO @ tablename-FIM;
mesas- FECHAR
mesas DEALLOCATE;DECLARE índices do cursor para
SELECIONAR ObjectName, ObjectId, IndexId, LogicalFrag
DE #fraglist
ONDE LogicalFrag gt; = @maxfragE INDEXPROPERTY (ObjectId, IndexName, `IndexDepth`) gt; 0-
índices aberta;
BUSQUE PRÓXIMA
DE índices
INTO @TableName, @objectid, @indexid, @frag;ENQUANTO @@ FETCH_STATUS = 0
INÍCIO
PRINT `Executar DBCC INDEXDEFRAG (0,` + RTRIM (@TableName) + `,`+ RTRIM (@indexid) +`) - fragmentação atualmente `
+ RTRIM (CONVERT (varchar (15), @ frag)) + `%` -SELECIONAR @execstr = `DBCC INDEXDEFRAG (0,` + RTRIM (@objectid) + `,
`+ RTRIM (@indexid) +`) `-
EXEC (@execstr);
BUSQUE PRÓXIMA
DE índices
INTO @TableName, @objectid, @indexid, @ fragmentaçãoFIM;
indexes- FECHAR
índices DEALLOCATE;DROP TABLE # fraglist-
IRClique "Arquivo" e selecione "Corre" desfragmentar o índice de banco de dados MSSQL.