Dicas SQL Server

Qual a melhor forma de calcular o MAXDOP no SQL Server

Qual a melhor forma de calcular o MAXDOP no SQL Server

Saiba a melhor forma de calcular o MAXDOP na sua instância SQL Server

A melhor forma de calcular o MAXDOP no SQL Server vai depender do footprint do seu processador e do NUMA NODE configurado para sua instância.

Para facilitar melhor a sua e a nossa vida, eu vou deixar disponível aqui um script que já faz o cálculo de todas as informações necessárias para trazer o resultado que estamos querendo obter. Veja abaixo:

DECLARE @RELACAOHYPERTHREADING BIT 
DECLARE @CPULOGICOS INT 
DECLARE @HTATIVADO INT 
DECLARE @CPUFISICO INT 
DECLARE @SOCKET INT 
DECLARE @CPULOGICOPORNUMA INT 
DECLARE @NODENUMA INT 

SELECT @CPULOGICOS = CPU_COUNT -- [Contador Lógico de CPU] 
 , 
 @RELACAOHYPERTHREADING = HYPERTHREAD_RATIO -- [Hyperthread Ratio] 
 , 
 @CPUFISICO = CPU_COUNT / HYPERTHREAD_RATIO -- [Contador Físico de CPU] 
 , 
 @HTATIVADO = CASE 
 WHEN CPU_COUNT > HYPERTHREAD_RATIO THEN 1 
 ELSE 0 
 END -- HTAtivado 
FROM SYS.DM_OS_SYS_INFO 
OPTION (RECOMPILE); 

SELECT @CPULOGICOPORNUMA = Count(PARENT_NODE_ID) 
-- [NumeroDeProcessadoresPorNuma] 
FROM SYS.DM_OS_SCHEDULERS 
WHERE [STATUS] = 'VISIBLE ONLINE' 
 AND PARENT_NODE_ID < 64 
GROUP BY PARENT_NODE_ID 
OPTION (RECOMPILE); 

SELECT @NODENUMA = Count(DISTINCT PARENT_NODE_ID) 
FROM SYS.DM_OS_SCHEDULERS -- Encontrar Nº de NUMA Nodes 
WHERE [STATUS] = 'VISIBLE ONLINE' 
 AND PARENT_NODE_ID < 64 

-- Recomendações .... 
SELECT 
--- 8 or less processors and NO HT enabled 
CASE 
 WHEN @CPULOGICOS < 8 
 AND @HTATIVADO = 0 THEN 'A configuração MAXDOP deve ser : ' 
 + Cast(@CPULOGICOS AS VARCHAR(3)) 
 --- 8 ou mais processadores e NO HT habilitado 
 WHEN @CPULOGICOS >= 8 
 AND @HTATIVADO = 0 THEN 'A configuração MAXDOP deve ser : 8' 
 --- 8 ou mais processadores e HT ativado e NO NUMA 
 WHEN @CPULOGICOS >= 8 
 AND @HTATIVADO = 1 
 AND @NODENUMA = 1 THEN 'A configuração MAXDOP deve ser : ' 
 + Cast(@CPULOGICOPORNUMA / @CPUFISICO AS VARCHAR(3 
 )) 
 --- 8 ou mais processadores e HT ativado e NUMA 
 WHEN @CPULOGICOS >= 8 
 AND @HTATIVADO = 1 
 AND @NODENUMA > 1 THEN 'A configuração MAXDOP deve ser : ' 
 + Cast(@CPULOGICOPORNUMA / @CPUFISICO AS VARCHAR(3 
 )) 
 ELSE '' 
END AS Recommendations  
Qual a melhor forma de calcular o MAXDOP no SQL Server