Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
No artigo anterior, comentei sobre a vantagem de usar o SET STATISTICS IO como ferramenta de análise de performance.
Terminei o artigo o mistério: por que o número de read-ahead e logical reads não bate?
O resultado esperado deveria ser:
Limpando o Buffer Bool
O comando DBCC DROPCLEANBUFFERS remove as páginas do banco de dados do cache. Entretanto, o próprio nome já diz: ele remove somente as páginas limpas e que são seguras para serem descartadas. As páginas que possuem modificação são chamadas de suja e não podem ser descartadas enquanto não forem gravadas em disco. Essa explicação está na referência do comando.
DBCC DROPCLEANBUFFERS
https://msdn.microsoft.com/en-us/library/ms187762.aspx
Podemos confirmar esse comportamento através das DMV sys.dm_os_buffer_descriptors:
Esse comportamento muda após rodar o CHECKPOINT manualmente:
Depois rodar novamente o DBCC DROPCLEANBUFFERS.
Resultado
O resultdo final foi que o número de logical reads (1257) é igual a read-ahead pages (1257).
Um fato interessante é que o tempo aumentou de 369ms para 852ms.
Parece que o banco de dados está ficando mais lento.
Sempre é possível piorar!
Vamos desligar as operações de Read-Ahead no servidor inteiro usando o Trace Flag Global 652.
Em seguida, limpamos o cache de dados e rodamos novamente a query.
Enquanto no artigo anterior a query rodava em 1ms, parece que batemos nosso recorde e chegamos a 1485ms.
Conclusão
Limpando o cache e desligando o comportamento de read-ahead afetou o desempenho da query sem mudar nenhum código. Aproveito para avisar de alguns cuidados:
- Não use DBCC DROPCLEANBUFFERS em produção.
- Evite consultar a view sys.dm_os_buffer_descriptors
- Jamais ligue o Trace Flag 652 em produção
No próximo artigo, vamos explorar melhor o mecanismo de read-ahead e tentar uma forma de piorar (?) o desempenho de forma mais acentuada.
Comments
- Anonymous
April 20, 2016
Excelente artigo Catae, aliás, como sempre!no entanto surgiu uma duvida:O traceflag 652 então desabilita a oportunidade das páginas aguardarem para ser comitadas, e são limpas de qqer forma, é isso?obs: vi sua observação de não ativar em prod. abs.Kleber.- Anonymous
April 26, 2016
Oi Kleber! O trace flag 652 desliga o Read-Ahead (Page Prefetch) e está documentado nesse artigo:https://support.microsoft.com/en-us/kb/920093O objetivo de desligar o Read-Ahead é deixar o impacto do disco mais evidente.Abraços, Fabricio
- Anonymous