4. Agenda
Paralelismo
Planos paralelos
Query optimizer e paralelismo
SQL Server waits e 100% de CPU
Conclusão
Referência
4 |
5. Paralelismo
Assunto que dá até briga em bar!
MAXDOP = 1 para OLTP
OLTP É OLTP!
MAXDOP = 0 e deixa o SQL Server se virar
CXPACKET é o pior wait type do SQL
Server!
Servidor com CPU em 100% é culpa do
paralelismo
5 |
6. Paralelismo
“Parallelism: Exploiting concurrency in a
program with the goal of solving a problem in
less time”
O que não significa que você vai usar menos
recursos para isso
Máquinas com cada vez mais cores
disponíveis para processamento
6 |
7. Planos paralelos
Operadores de exchange:
Gather Stream
Repartition Stream
Distribute Stream
Marca limites entre zonas do plano paralelo
Pode preservar a ordem de execução (merge
exchange)
7 |
8. Planos paralelos
Thread 0 = coordinator thread
Aguarda o fim da execução do plano
Zonas paralelas dentro de um plano
8 |
9. Planos paralelos
Produtores e consumidores executam
independentemente em threads diferentes
Produtores preenchem pacotes e enviam
para os consumidores através de CXPORT e
CXPIPE
Preenche buffers com registros
Class eXchange PACKET (CXPACKET)
“Occurs when trying to synchronize the query
processor exchange iterator. You may consider
lowering the degree of parallelism if contention on
this wait type becomes a problem.”
9 |
11. Query optimizer e paralelismo
O SQL Server trabalha com fases de
otimização para chegar a um plano bom o
suficiente
Complexidade do otimização é exponencial,
então exploração não é infinita
Árvore com custo do plano de execução
Utiliza estatísticas para fazer estimativas de
registros e custo
11 |
12. Query optimizer e paralelismo
Estatísticas são muito importantes
200 passos do histograma e densidade
podem não ser suficientes
MAX DEGREE OF PARALLELISM
COST THRESHOLD FOR PARALLELISM
“Estimated DOP is half the available logical
processors at compile time”
12 |
16. Conclusão
Paralelismo não é uma entidade do mal!
Cuidado com paralelismo em excesso
Cost threshold atual é baixo para a maioria
dos ambientes
Não recomendo MAXDOP = 1
Existem muitos outros detalhes e “edge
cases”
SQLSat #361??
16 |
17. Referências
Paul White
http://sqlblog.com/blogs/paul_white/
Adam Machanic
http://sqlblog.com/blogs/adam_machanic/
Fabiano Amorim
http://blogfabiano.com/
17 |