Problema: Como podemos controlar o número de processadores atribuídos ao comando DBCC CHECKDB do SQL Server para que não consuma todos os recursos do servidor durante a execução do CHECKDB?
Solução: O grau de paralelismo é o número de processadores atribuídos para executar uma única instrução SQL. O SQL Server consegue detectar o melhor grau de paralelismo para cada consulta a fim de gerar o melhor plano de execução. O Máximo Grau de Paralelismo (MAXDOP) é uma configuração de nível de instância que é usada para restringir o número de processadores usados para planos de execução paralela por motivos de desempenho.
O SQL Server 2016 introduz uma nova opção para limitar o número de processadores atribuídos ao comando DBCC CHECKDB, substituindo a configuração de nível de instância do MAXDOP.
Por exemplo, vamos supor que temos uma máquina com 4 processadores. Por padrão, a opção MAXDOP de nível de instância está configurada para usar todos os processadores disponíveis. No entanto, podemos verificar e reconfigurar essa opção na guia Avançado da janela Propriedades do Servidor usando o SQL Server Management Studio.
Também podemos verificar a opção MAXDOP usando o comando sp_configure:
sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'max degree of parallelism';
Se executarmos o comando DBCC CHECKDB sem especificar a opção MAXDOP, ele usará o valor de configuração do MAXDOP de nível de instância. Esse comando é um comando pesado que usará um plano de execução paralela para ser executado (se aplicável).
SET STATISTICS TIME ON DBCC CHECKDB (AdventureWorks2012) SET STATISTICS TIME OFF
Podemos obter o ID da sessão atual na barra de status do SSMS e consultar o objeto de sistema sys.dm_os_tasks para verificar o número de agendadores usados por essa sessão durante a execução:
SELECT Session_id, scheduler_id FROM sys.dm_os_tasks WHERE session_id = 54
O resultado nos mostrará que o comando DBCC CHECKDB está usando todos os processadores disponíveis.
No entanto, podemos substituir a opção MAXDOP de nível de instância e restringir o comando DBCC CHECKDB a um número específico de processadores. Por exemplo, o seguinte comando usará apenas 3 processadores para ser executado:
SET STATISTICS TIME ON DBCC CHECKDB (AdventureWorks2012) WITH MAXDOP = 3; SET STATISTICS TIME OFF
Ao verificar novamente o número de agendadores para essa consulta, veremos que o comando DBCC CHECKDB está limitado a apenas 3 processadores.
Ao diminuir o número de processadores atribuídos ao comando, ele levará mais tempo para ser concluído, mas consumirá menos CPU. Isso nos permite evitar que o comando DBCC CHECKDB consuma todos os recursos do servidor e degrade o desempenho geral do servidor durante a execução.
Portanto, ao executar o comando DBCC CHECKDB, você precisará decidir se deseja priorizar a velocidade ou limitar os recursos da CPU utilizados.