Os status de um request no SQL Server

É essencial saber a diferença entre cada um deles.

Quando precisamos fazer uma análise de performance ou estamos com lentidão em um SQL Server é comum utilizarmos algumas views como, por exemplo, a sys.dm_exec_requests, que lista as requisições ativas no servidor naquele instante. Uma das colunas dessa DMV é a status que indica o estado atual daquele request no SQL Server. Mas você sabe o que realmente significa cada status que aparece naquela coluna?

Essa coluna pode ter um dos cinco listados abaixo:

  • RUNNING
  • RUNNABLE
  • SUSPENDED
  • SLEEPING
  • BACKGROUND

Um pouco de SQLOS

Antes de nos aprofundarmos no que cada um desses status significa, temos que aprender alguns conceitos básicos do SQLOS, que é a camada que centraliza o gerenciamento de tarefas de baixo nível para acesso dos componentes do SQL Server. É a camada mais baixa do SQL Server ficando entre o Sistema Operacional do servidor e a Storage Engine. Um dos recursos do SQLOS é o scheduler.

O scheduler é como um processador lógico no SQL Server, ele coordena a execução e administra os recursos para que uma determinada task de um request seja concluída por um worker.

Ou seja, quando você faz uma query no SQL Server, esse request é “quebrado” em tasks. Essas tasks são direcionadas para um ou mais workers, que vão executá-las no(s) scheduler(s).

Quer visualizar isso? Consulte as DMV’s sys.dm_os_tasks, sys.dm_os_workers e sys.dm_os_schedulers

Tendo isso em mente, vamos entender o que cada status significa.

Tell me what you’re doing!

RUNNING: um scheduler está processando aquele request, consumindo tempo de CPU.

RUNNABLE: o worker está na fila de um scheduler esperando tempo de CPU (quantum) para que processe o request, fazendo com que ele volte ao status ‘running’.

SUSPENDED: o request está esperando um recurso que não é CPU. Ex: locks, rede, disco, etc. Alguns waits que indicam isso: ASYNC_NETWORK_IO e IO_COMPLETION, por exemplo.

Uma sessão esperando um lock fica com o status “SUSPENDED”

SLEEPING: não há mais nenhum trabalho pendente. Algumas sessões ficam nesse status quando fazem parte de um pool, significando que estão prontas para serem reutilizadas. Dessa forma não há o custo adicional de abrir uma conexão no SQL Server. Portanto nem sempre é bom matar essas conexões sem antes verificar isso.

BACKGROUND: Um dos processos de background do SQL Server, que são essenciais para manter a instância funcionando. Ex: CHECKPOINT. Processos background têm prioridade sobre outros processos.

Conclusão

Nesse post vimos um pouco da instrumentação do SQL Server no que diz respeito aos status que os processos podem ter na engine. É muito importante entender esses conceitos para que façamos uma análise adequada quando precisarmos.

Post criado 10

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts Relacionados

Comece a digitar sua pesquisa acima e pressione Enter para pesquisar. Pressione ESC para cancelar.

De volta ao topo