ARQUITETURA SQL Server Parte 5: SQL Server Workers

Olá Pessoal! Neste quinto post da série vou falar sobre as Workers! 

Uma worker pode ser tanto uma fibra quanto uma thread gerenciada por um scheduler. Cada scheduler contém um número de workers limitado baseado no parâmetro “max worker threads” ou pela arquitetura, o parâmetro “max worker threads” pode determinar o número de workers que serão criadas, desde que seja ajustado para um valor diferente de 0, o que não é recomendado. Se o valor de “max worker threads” estiver ajustado para 0, o número máximo de workers que podem ser criadas é baseado na arquitetura e no número de processadores que a instância do SQL Server está enxergando. Cada scheduler é responsável por criar e destruir as suas workers conforme seja necessário. Uma worker não se movimenta entre os schedulers, porem como são criadas e destruídas, pode parecer que elas estão migrando por entre os schedulers. 

Quando um scheduler recebe uma nova requisição e ele não encontra uma worker disponível, uma nova é criada por ele. Existem basicamente duas condições para que uma worker seja destruída: se ela ficar 15 minutos sem utilização ou se a instância do SQL Server estiver sob pressão de memória. Em sistemas 32 bits uma worker utiliza ao menos 500 KB de memória e em 64 bits pelo menos 2 MB.

Normalmente o SQL Server gerencia muito bem as workers, mesmo em sistemas extremamente carregados, o número de workers acaba ficando bem abaixo do máximo configurado através do parâmetro Max Worker Threads. O número máximo de workers para a instância do SQL Server é determinado da seguinte forma: 

Arquitetura
Processadores lógicos
Max Worker Threads
x86
Até 4
256
x86
Mais de 4
256 + ((# Procs – 4) * 8)
x64
Até 4
512
x64
Mais de 4 e até 64
512 + ((# Procs – 4) * 16)
x64
Mais que 64
512 + ((# Procs – 4) * 32)

Obs.: A linha em amarelo foi adicionada recentemente.

Para saber quantas workers podem ser criadas numa instância do SQL Server utilize a query abaixo:

SELECT max_workers_count
FROM sys.dm_os_sys_info

O parâmetro “max worker threads” você pode configurar usando o sp_configure:



Links de referência utilizados para o post:



Livro de referência utilizado para o post: 

Microsoft SQL Server 2008 Internals – Kalen Delaney 

Até a próxima galera!

Nenhum comentário:

Postar um comentário