O documento apresenta uma palestra sobre o SQLOS, a camada de software do SQL Server que faz a interface entre o banco de dados e o sistema operacional Windows. A palestra discute tópicos como a arquitetura do SQLOS, o agendamento de tarefas, gerenciamento de memória e E/S no SQLOS.
5. SQL Internal Ops
Conference
Visão geral do Windows
Processos
Conjuntos de recursos necessários para executar um programa
Threads
Thread é a unidade básica de execução dentro do sistema
operacional e pode executar qualquer parte do código da
aplicação
Escalonamento preemptivo
Uma thread não pode monopolizar o processador
Quando o quantum acaba o SO escalona a próxima thread e faz
uma troca de contexto
Proc01
P20T45 P20T13 P20T06 P20T03 P29T01 P05T01 P11T03 P20T01
6. SQL Internal Ops
Conference
Visão geral do Windows
Processos
Conjuntos de recursos necessários para executar um programa
Threads
Thread é a unidade básica de execução dentro do sistema
operacional e pode executar qualquer parte do código da
aplicação
Escalonamento preemptivo
Uma thread não pode monopolizar o processador
Quando o quantum acaba o SO escalona a próxima thread e faz
uma troca de contexto
Proc01
P20T45 P20T13 P20T06 P20T03 P29T01 P05T01 P11T03 P20T01
7. SQL Internal Ops
Conference
Visão geral do Windows
Processos
Conjuntos de recursos necessários para executar um programa
Threads
Thread é a unidade básica de execução dentro do sistema
operacional e pode executar qualquer parte do código da
aplicação
Escalonamento preemptivo
Uma thread não pode monopolizar o processador
Quando o quantum acaba o SO escalona aQuantum
próxima thread e faz
uma troca de contexto
Proc01
P20T45 P20T13 P20T06 P20T03 P29T01 P05T01 P11T03 P20T01
8. SQL Internal Ops
Conference
Visão geral do Windows
Processos
Conjuntos de recursos necessários para executar um programa
Threads
Thread é a unidade básica de execução dentro do sistema
operacional e pode executar qualquer parte do código da
aplicação
Escalonamento preemptivo
Uma thread não pode monopolizar o processador
Quando o quantum acaba o SO escalona a próxima thread e faz
uma troca de contexto
Proc01
P20T01 P20T45 P20T13 P20T06 P20T03 P29T01 P05T01 P11T03
9. SQL Internal Ops
Conference
Visão geral do Windows
Processos
Conjuntos de recursos necessários para executar um programa
Threads
Thread é a unidade básica de execução dentro do sistema
operacional e pode executar qualquer parte do código da
aplicação
Escalonamento preemptivo
Uma thread não pode monopolizar o processador
Quando o quantum acaba o SO escalona a próxima thread e faz
uma troca de contexto
Proc01
P20T01 P20T45 P20T13 P20T06 P20T03 P29T01 P05T01 P11T03
18. SQL Internal Ops
Conference
Visão geral do Windows
Subsistema de I/O
Black box para o Windows
Executa uma requisição de I/O e espera o retorno
Operações
Síncronas e assíncronas
WriteFile*
ReadFile*
WriteFileGather
ReadFileScatter
Indicadores
Disk queue length
Avg disk sec/read
Avg disk sec/write
Alinhamento de partição, RAIDs, SSDs, etc.
20. SQL Internal Ops
Conference
SQLOS
Mito: É uma camada de software que substitui o sistema
operacional!
É uma camada de abstração para desenvolvedor utilizar que
faz interface com o SQL Server.
Desenvolvedor é igual em qualquer lugar do mundo...
NUMA aware desde sua concepção
Pequeno, otimizado e independente do banco de dados
Tarefas
Serviços de multi-thread, worker pool e tarefas
Serviços para gerenciamento de memória
Serviços de monitoramento, hosting, tracing e debugging
21. SQL Internal Ops
Conference
SQLOS
The key observation here is that dbms and OS must
cooperate. As such OS must have built in support for
dbms or dbms must have a special scheduling layer. -- Slava Oks
< 2012 = 60MB QP Execution Checkpoint, lazywriter,
LockMonitor
SQLServr.exe SQLLang.dll sqlmin.dll
2012 = 190 KB 30MB 30MB
Scheduling SQLDK.dll NUMA Monitors SQLOS.dll
xEvent Memory 2 MB I/O Comp Port 25KB
Windows
22. SQL Internal Ops
Conference
SQLOS - Scheduling
Se for modelo preemptivo do Windows, como seria o processo
do SQL Server com muitas threads...
Proc01
Todas as threads tem trabalho para fazer?
Esse modelo é eficiente?
24. SQL Internal Ops
Conference
SQLOS - Scheduling
A maioria das threads no SQL Server passam a maior parte do
tempo bloqueadas
Internamente são organizados em listas
Worker: lista os worker disponíveis
Runnable: workers prontos para executar uma tarefa
Waiter: lista os workers que estão esperando por um
recurso
I/O: lista as requisições de I/O que estão pendentes
Timer: registra lista com workers que são ativados em
intervalos regulares
Suspended
Runnable Running
25. SQL Internal Ops
Conference
SQLOS - Scheduling
Wait types
Todo bloqueio possui um wait type associado que é
contabiliado
Tarefas de housekeeping
Workers de monitoramento e tarefas internas
Modelo de código do SQL Server
void SchedulerManager::ThreadEntryPoint()
{
// get worker
// run worker
// get task
// run task
// Pontos de yield e housekeeping
// GOTO “get task”
}
26. SQL Internal Ops
Conference
SQLOS - Scheduling
CPU 0 CPU 1 CPU 2 CPU n
Sched 0 Sched 1 Sched 2 Sched n
Tasks Tasks Tasks Tasks
SOS
Schedules
Tasks
Scheduler Scheduler Scheduler Scheduler
Work Work Work Work
Dispatcher Dispatcher Dispatcher Dispatcher
Tasks – Load balanced across schedulers
27. SQL Internal Ops
Conference
SQLOS - Memory
A maioria da memória do SQL Server é consumida pelo buffer
pool
Bpool consiste de buffers de 8KB (páginas)
Bpool não é somente para cache de dados
Controlado por min server memory e max server memory
SQL Server 2000-
Memory managers
SQL Server 2005+
Memory clerks
Alocações single-page utilizam o Bpool
Mudança importante entre SQL Server 2008 e 2012
Somente parte de DWA fica fora do BPool
28. SQL Internal Ops
Conference
SQLOS - Memory
Buffer Pool = Max Server Memory
Plan Cache Query Workspace
Lock Manager Query Compile
Token Perm
Data Cache
Xevent, SQLOS,
Metadata, outros…
29. SQL Internal Ops
Conference
SQLOS - Memory
Buffer Pool
Pressão
interna
Pressão Plan cache
externa
W
Pressão
I
global
N
(Bpool)
D
O
W
S
Data cache
30. SQL Internal Ops
Conference
SQLOS – I/O
Arquivos: dados e log
Sparse file, backup,
Cada arquivo possui padrões de acesso diferenciados
Diferentes mecanismos dentro do SQL Server disparam
requisições de I/O
Log buffer flush (ex.: commit)
Checkpoint
Lazy writer
Eager write
Read ahead
Chamadas assíncronas: permitem o modelo cooperativo do
SQL Server funcionar (maioria das chamadas)
31. SQL Internal Ops
Conference
SQLOS – I/O
(1) BEGIN TRANSACTION
(2) UPDATE dbo.PessoaFisica SET Nome = A WHERE ID = 10
(3) COMMIT TRANSACTION
Log Buffer
(1) (2) (3)
(memória)
LSN – Log Sequence Number
WriteFile Flush
Estrutura OVERLAPPED (1) 0000006d:00000078:0001
Completo
HasOverlappedIoCompleted (2) 0000006d:00000078:0002
(3) 0000006d:00000078:0003
Log Flush
… Arquivo de
… (1) (2) (3) Log (disco)
32. SQL Internal Ops
Conference
Conclusão
“thin layer” entre SQL Server e sistema operacional
Modelo controlado de uso dos recursos (CPU, memória, I/O)
Escrito pelos melhores programadores do time do SQL Server
(e possivelmente da Microsoft)
Usualmente você não fica explorando threads e stacks a todo
momento, muito menos com windbg
É um excelente mecanismo de estudo, não de
troubleshooting
Problemas mais complexos exigem um conhecimento do
funcionamento do SQL Server