Muitas pessoas ficam curiosas para saber o que significa o SQL Scheduler e qual o papel que ele desempenha. Por um tempo pensava que não valeria a pena ficar falando sobre esse componente, uma vez que ele é bastante interno. Por outro lado, esse é um conhecimento indispensável para àqueles que pretendem ler um Dump no SQL Server. O primeiro passo é diferenciar o modo multitarefa presente no Windows e SQL Server: Preemptive Mode e Cooperative Mode.
Relembrando os velhos tempos do Windows 3.1 e Windows 98:
Atualmente, o Windows e os Sistemas Operacionais modernos utilizam o Preemptive Mode: cada aplicação/thread recebe uma parcela de tempo (quantum) para ocupar o processamento disponível. Quando esse quantum é excedido (em torno de 10-100 milissegundos), o Sistema Operacional realiza a transição para a próxima aplicação/thread. Esse processo permite que as tarefas sejam realizadas simultaneamente, dando a impressão de paralelismo mesmo quando existe uma única unidade de CPU.
Abusando dos dons artísticos, seria como um relógio que determina qual será a tarefa executada:
Esse comportamento é diferente da versão antiga do Windows que ainda rodava no Cooperative Mode.
No tempo do Windows 3.1, as aplicações e o Sistema Operacional trabalhavam juntos para criar o multitasking das tarefas. Cada aplicação era responsável por fazer parte do seu processamento e manualmente repassar o controle de volta ao Windows. Era o processo de YIELD: na tradução literal seria algo como “dar a passagem”.
Novamente utilizando-me dos dons artísticos, o modo cooperativo seria similar a uma brincadeira de passa anel: cada tarefa vai passando o anel para o próximo do círculo.
Encerro o artigo dizendo que o SQL Server, de forma similar ao Windows 3.1, implementa o Cooperative Mode para a execução de tarefas ao invés do Preemptive Mode. Isso pode parecer que voltamos no passado.
Existem problemas e desvantagens, isso é verdade… mas existe um forte motivo pelo qual se utiliza um gerenciamento próprio de thread: “SQL knows better” - SQL Server conhece mais sobre ele mesmo do que o Windows. Ao invés de depender do gerenciamento multithread do Sistema Operacional, utilizamos uma arquitetura mais adequada para garantir a escalabilidade do produto.
No próximo artigo, falaremos sobre o Scheduler.
Esqueci de postar a referência do Windows: technet.microsoft.com/.../cc768198.aspx
Fabricio,
Muito bom post, do meu ponto de vista a única desvantagem do cooperative mode é que o dev nao tem controle da "passagem" e isso pode causar algumas tarefas bloqueadas...
Abraço,
Verdade! Ótima idéia para ser falada no post dessa semana.
Olá Fabrício. É através do Cooperative mode que o SQL Server realiza bloqueio do próprio processo, ou seja, quando vemos um processo bloqueando ele mesmo certo?
Demétrio Silva
Olá Demétrio!
Não é exatamente o Cooperative mode que força o bloqueio de si mesmo. Na verdade, esse é um comportamento relacionado com os diferentes Execution Contexts (EC) ou mesmo quando há uma operação assíncrona (Ex: PAGEIOLATCH). Entendi correto a pergunta? (senão, fique a vontade para fornecer mais detalhes)
Abraços, Fabricio
Muito conhecer sobre esses comportamentos internos...Show...