Estou com um problema no desempenho do meu banco de dados SQL Server. Eu encontrei esta ferramenta sp_BlitzCache . Após a execução do comando, recebi esta declaração:
Você tem planos de 92,00% criados nas últimas 24 horas e 92,00% criados nas últimas 4 horas.
Enquanto identifiquei o problema (usando o SQL Server Profiler, verifiquei as ocorrências de eventos StmtRecompile), consegui encontrar apenas algumas consultas de pesquisa de texto completo que geralmente são reconstruídas. No entanto, as consultas de pesquisa de texto completo representam apenas cerca de 5% de todas as consultas.
Você tem alguma sugestão do que pode causar a recriação dos demais planos de 87%?
Eu tenho o SQL Server 2012 (versão 11.0.6567.0).
Editar: adicionei meus contadores de desempenho
+---------------------------+--------------------------------+--------------+
| object_name | counter_name | cntr_value |
+---------------------------+--------------------------------+--------------+
| SQLServer:Buffer Manager | Background writer pages/sec | 0 |
| SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 |
| SQLServer:Buffer Manager | Buffer cache hit ratio base | 28436 |
| SQLServer:Buffer Manager | Checkpoint pages/sec | 8259452 |
| SQLServer:Buffer Manager | Database pages | 4434337 |
| SQLServer:Buffer Manager | Free list stalls/sec | 9 |
| SQLServer:Buffer Manager | Integral Controller Slope | 0 |
| SQLServer:Buffer Manager | Lazy writes/sec | 5608 |
| SQLServer:Buffer Manager | Page life expectancy | 438901 |
| SQLServer:Buffer Manager | Page lookups/sec | 122694703703 |
| SQLServer:Buffer Manager | Page reads/sec | 60994608 |
| SQLServer:Buffer Manager | Page writes/sec | 126076564 |
| SQLServer:Buffer Manager | Readahead pages/sec | 45305420 |
| SQLServer:Buffer Manager | Target pages | 130990080 |
| SQLServer:Buffer Node | Database pages | 4434337 |
| SQLServer:Buffer Node | Page life expectancy | 438901 |
| SQLServer:Buffer Node | Local node page lookups/sec | 0 |
| SQLServer:Buffer Node | Remote node page lookups/sec | 0 |
| SQLServer:Memory Manager | External benefit of memory | 0 |
| SQLServer:Memory Manager | Connection Memory (KB) | 3304 |
| SQLServer:Memory Manager | Database Cache Memory (KB) | 35474784 |
| SQLServer:Memory Manager | Free Memory (KB) | 13229808 |
| SQLServer:Memory Manager | Granted Workspace Memory (KB) | 0 |
| SQLServer:Memory Manager | Lock Memory (KB) | 455928 |
| SQLServer:Memory Manager | Lock Blocks Allocated | 1798154 |
| SQLServer:Memory Manager | Lock Owner Blocks Allocated | 3568588 |
| SQLServer:Memory Manager | Lock Blocks | 10562 |
| SQLServer:Memory Manager | Lock Owner Blocks | 10617 |
| SQLServer:Memory Manager | Maximum Workspace Memory (KB) | 43368000 |
| SQLServer:Memory Manager | Memory Grants Outstanding | 0 |
| SQLServer:Memory Manager | Memory Grants Pending | 0 |
| SQLServer:Memory Manager | Optimizer Memory (KB) | 1400 |
| SQLServer:Memory Manager | Reserved Server Memory (KB) | 0 |
| SQLServer:Memory Manager | SQL Cache Memory (KB) | 229112 |
| SQLServer:Memory Manager | Stolen Server Memory (KB) | 8063232 |
| SQLServer:Memory Manager | Log Pool Memory (KB) | 4192 |
| SQLServer:Memory Manager | Target Server Memory (KB) | 56934400 |
| SQLServer:Memory Manager | Total Server Memory (KB) | 56767824 |
| SQLServer:Memory Node | Database Node Memory (KB) | 35474784 |
| SQLServer:Memory Node | Free Node Memory (KB) | 13229808 |
| SQLServer:Memory Node | Foreign Node Memory (KB) | 0 |
| SQLServer:Memory Node | Stolen Node Memory (KB) | 8063208 |
| SQLServer:Memory Node | Target Node Memory (KB) | 56934376 |
| SQLServer:Memory Node | Total Node Memory (KB) | 56767800 |
+---------------------------+--------------------------------+--------------+
fonte
Respostas:
A consulta usada para testar o tempo de criação do plano é esta
o SP também fornece algumas dicas sobre por onde começar sua pesquisa
Além das dicas acima, verifique se o servidor foi reiniciado.
se o seu servidor não for reiniciado, abaixo está a abordagem que eu adotaria
Primeiro, veja se as configurações de memória estão definidas da melhor maneira possível.
se você estiver enfrentando pressão de memória, poderá ver e ajustar as consultas que estão usando mais memória ou tentar adicionar mais memória
Alterações feitas em uma tabela ou exibição referenciada pela consulta (ALTER TABLE e ALTER VIEW).
Alterações feitas em um único procedimento, o que eliminaria todos os planos desse procedimento do cache (ALTER PROCEDURE).
Alterações em quaisquer índices usados pelo plano de execução
Atualizações nas estatísticas usadas pelo plano de execução, geradas explicitamente a partir de uma instrução, como UPDATE STATISTICS, ou geradas automaticamente.
Descartar um índice usado pelo plano de execução.
Você também pode ver este white paper para obter mais detalhes sobre o planejamento do cache
https://technet.microsoft.com/en-us/library/ee343986(v=sql.100).aspx
fonte
Para adicionar o que o @TheGameiswar disse, você também pode executar esta consulta para ver os detalhes dos planos que não são obtidos do cache.
fonte