Treinamento para SQL Server, tem o seguinte cenário:
SQL Server na VM do Azure, máquina da série DS, possui 32 GB de RAM
O servidor possui as condições de desempenho abaixo:
- very high PAGELATCH_IO waits
- average Page Life Expectancy is 30
- nothing else is known
O que deve ser feito para diminuir as esperas de PAGELATCH_IO?
Escolha a resposta correta (precisa escolher apenas uma):
- Adicionar mais arquivos tempdb
- Ativar suporte a páginas grandes
- Ativar páginas de bloqueio na memória
- Configurar extensões do pool de buffers
O treinamento diz que a resposta correta é1) add more tempdb files
Eu acho que a resposta correta é 4) Configure buffer pool extensions
, com base em:
- PLE is a number of seconds a page will stay in the buffer pool without removing
- PLE = 30 is too low, means high turnover in the buffer pool
- DS-series support Premium SSD drives, can place buffer pool extension on Premium SSD
Mas também pode ser isso 3) Enable lock pages in memory
com base neste
https://sqlperformance.com/2014/06/io-subsystem/knee-jerk-waits-pageiolatch-sh
Quem está certo - eu, material de treinamento ou você (sua opção)?
A propósito, não tenho certeza do que eles significam em PAGELATCH_IO, que poderia ser PAGEIOLATCH ou PAGELATCH, acho que a resposta depende exatamente de qual tipo temos
Parece que você não reproduziu a pergunta dos materiais de treinamento aqui com total precisão.
Supondo que a pergunta era sobre esperas PAGELATCH_** e que as páginas travadas estão no banco de dados tempdb, essas esperas podem ser um sinal comum de contenção de alocação de tempdb. E a solução mais comum para isso é aumentar o número de arquivos tempdb.
Consulte este artigo de suporte da Microsoft:
Recomendações para reduzir a contenção de alocação no banco de dados tempdb do SQL Server
Se já suspeitarmos de contenção de tempdb (por causa das esperas de trava), então PLE = 30 pode ser causado pelo uso intenso de tempdb (se você pensar em muitas páginas de tempdb sendo carregadas na memória e liberadas repetidamente, reduzindo o PLE).
Assim, a opção 1 provavelmente seria a resposta correta, embora sejam necessárias mais informações para confirmar (por exemplo, saber que as esperas de trava estão de fato em tempdb).
O problema com perguntas hipotéticas é que não podemos pedir mais informações. Também não podemos pedir esclarecimentos (você quis dizer PAGELATCH_IO, PAGEIOLATCH ou PAGELATCH?).
Ver apenas PAGEIOLATCH e PLE baixo não significa necessariamente que é tempdb. 32 GB de RAM não é muito hoje em dia, mas não sabemos mais nada sobre esse ambiente. Estamos esperando por E/S, isso é tudo que sabemos. Talvez nós apenas "precisamos" de mais RAM?
Lançar arquivos no tempdb não significa que fazemos menos IO. OTOH, se fosse PAGELATCH (em contraste com PAGEIOLATCH) que estávamos esperando, em tempdb, então mais arquivos poderiam ser "it".
No final, eu diria para jogar mais RAM ou ajustar as consultas. Nenhuma das alternativas sugeridas é razoável.
Perguntas de baixa qualidade como essas tendem a nos confundir, se estiverem tentando levá-las a sério. :-)