As estatísticas do SQL Server são armazenadas no banco de dados ou no buffer pool?

10

Apenas imaginando, as estatísticas são mantidas no banco de dados, mas não na memória? Se eu fizer backup / restaurar o banco de dados de um servidor prod para um servidor de desenvolvimento, ele manterá as mesmas estatísticas para que os planos de execução não sejam muito diferentes se eu fizer no servidor de desenvolvimento?

Joy Walker
fonte

Respostas:

15

O buffer pool é um cache do banco de dados. Nunca há um 'ou', as coisas que estão no buffer pool também estão no banco de dados, sempre. E qualquer coisa lida no banco de dados deve estar, mesmo que temporariamente, presente no buffer pool.

Quanto à pergunta: as estatísticas estão no banco de dados, portanto, um backup / restauração preservará as estatísticas.

Observe que preservar as estatísticas não é uma garantia para planejar a reprodutibilidade. Outros fatores influenciam a geração do plano, como número de CPUs e quantidade de RAM.

Remus Rusanu
fonte
ok, faz sentido. obrigado pelo esclarecimento!
Joy Walker
3

Como Remus disse , as estatísticas da tabela são armazenadas no banco de dados semelhante a outros objetos, como tabelas e índices. Eles desempenham um papel importante na seleção do plano de execução, mas existem outros fatores.

Dito isto, o SQL Server conhece outro tipo de estatística, estatística que nos fornece informações sobre comportamentos recentes.

Por exemplo, os DMVs s ys.dm_db_index_usage_statse sys.dm_db_index_operational_statsestatísticas de retorno sobre como o índice é usado.

Essas estatísticas são armazenadas apenas na memória. A perda no reinício do servidor e não viaja com o backup.

No entanto, o otimizador também não os utiliza para gerar um plano.

Sebastian Meine
fonte
Sim, é por isso que eu tive a pergunta / confusão em primeiro lugar. Eu estava pensando que as estatísticas são semelhantes às DMVs. Eles poderiam desaparecer quando o servidor reiniciar ou o db restaurado em outro servidor. Obrigado por fazer o ponto.
Joy Walker