Published on

June 18, 2025

Controlando o Número de Processadores Atribuídos ao Comando DBCC CHECKDB do SQL Server

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.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.