É possível executar dois comandos DBCC INDEXDEFRAG simultaneamente, cada um em uma tabela diferente?

9

Atualmente, estou executando um script que executa um DBCC INDEXDEFRAG em todas as tabelas em um banco de dados SQL Server 2005, uma tabela por vez. Usar DBCC DBREINDEX em vez de INDEXDEFRAG não é uma opção, devido a restrições de espaço e requisitos de tempo de atividade.

Percebi que leva muito tempo para que certas tabelas sejam desfragmentadas. Por exemplo, se eu examinar a exibição de gerenciamento dinâmico "sys.dm_exec_requests", posso ver que o seguinte INDEXDEFRAG está atualmente agitado no índice clusterizado de uma tabela que possui um id_da_tabela de 829610394:

DBCC INDEXDEFRAG (0, 829610394, 1)

Sei que levará muito tempo até que o processo de desfragmentação seja concluído. Deixando de lado o fato de que o script atualmente em execução eventualmente desfragmentará todas as tabelas, há algum mal em executar manualmente outro DBCC INDEXDEFRAG no índice clusterizado de outra tabela enquanto o comando atual é executado? As duas tabelas serão realmente desfragmentadas ao mesmo tempo se eu fizer isso?

RelentlessMike
fonte

Respostas:

15

Sim, você pode fazer isso para várias tabelas. Você não pode fazer isso para vários índices na mesma tabela - eu inventei um novo sub-recurso de bloqueio de índice para evitá-lo. O mesmo comportamento no ALTER INDEX ... REORGANIZE com o qual eu o substituí em 2005.

obrigado

Paul S. Randal
fonte
2
Você não pode obter uma resposta mais precisa do que uma da pessoa que a escreveu! Não se esqueça da carga de E / S associada a várias reconstruções ou reorganizações ao mesmo tempo e use ALTER INDEX em vez do comando DBCC daqui para frente.
AndrewSQL 21/01
Concordo, não sei como seria possível obter uma resposta mais precisa sobre esse assunto em particular do que uma resposta direta de Paul Randal. Obrigado Paul.
precisa
6

Observe que DBCC INDEXDEFRAG & DBREINDEX foram descontinuados e substituídos por ALTER INDEX:

Importante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Não use esse recurso em novos trabalhos de desenvolvimento e modifique os aplicativos que atualmente usam esse recurso o mais rápido possível. Use ALTER INDEX. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

Quanto à execução simultânea de dois, depende do layout do arquivo. Se todos estiverem no (s) mesmo (s) disco (s), você provavelmente desacelerará cada um, pois eles lutam entre si por E / S. Seria melhor apenas REORG ou REBUILD quando necessário. Confira o script de Michelle Ufford aqui para obter uma solução automatizada: http://sqlfool.com/2010/04/index-defrag-script-v4-0/

Eric Humphrey - lotes de ajuda
fonte
Obrigado Eric. Nesse caso específico, o banco de dados está espalhado por vários arquivos de dados, em diferentes partições e em cima de uma IBM DS8300 SAN. Então, acho que ficarei bem no que diz respeito à E / S.
precisa