Estou tentando obter informações de fragmentação em algumas tabelas com mais de 500 GB e estou usando a ...DETAILED
opção de sys.dm_db_index_physical_stats
. Estou fazendo isso em uma cópia de restauração do banco de dados de produção em nosso servidor de pré-produção, então não me importo em prejudicar o desempenho do servidor.
Eu executei e parece que está sendo executado em série e está demorando uma eternidade. Tem como rodar dm_db_index_physical_stats()
em paralelo? Ou alguma outra configuração está atrapalhando?
Eu acho DBCC TRACEON (8649)
e OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))
não estão disponíveis no SQL Server 2014.
Também tentei DBCC SETCPUWEIGHT(1000);
no blog de Paul White aqui . O blog menciona sobre inibidor de paralelismo e um dos quais são as tabelas do sistema. É dm_db_index_physical_stats()
considerada uma tabela de sistema?
é uma função com valor de tabela do sistema.
Internamente, isso executará uma chamada openrowset para uma
INDEXANALYSIS
fonte de dados do sistema interno.Mais informações sobre essas fontes de dados internas aqui .
Você pode encontrar a mesma
INDEXANALYSIS
chamada TVF no plano de execução:E você também pode ver que é uma função com valor de tabela de várias instruções.
Portanto, a consulta não poderá usar paralelismo devido ao motivo nº 1 : acesso à tabela do sistema
A chamada TVF também será serial devido ao motivo #2 : Multi statement TVF
Fonte