Atualizando as estatistica apos INDEX REBUILD
Sabe-se que as estatísticas são atualizadas durante a recriação de índice (ALTER INDEX REBUILD). Então, surge uma dúvida: se o processo noturno de manutenção realiza o rebuild de índice diariamente, ainda é necessário atualizar as estatísticas?
Com o objetivo de responder essa pergunta, vamos criar um cenário para teste com as tabelas tbUsuario e tbObjetos.
Foram criados os índices e as estatísticas nas tabelas:
CREATE INDEX idxUsuarioId ON tbObjetos(UsuarioId) CREATE INDEX idxNome ON tbUsuario(Nome) CREATE INDEX idxTipo ON tbObjetos(Tipo) CREATE STATISTICS statIdade ON tbUsuario(Idade) CREATE STATISTICS statUsuario ON tbObjetos(UsuarioId, ObjetoId)
Através do comando UPDATE STATISTICS, atualizamos todas as estatísticas manualmente:
No dia seguinte, rodamos um Rebuild das tabelas:
ALTER INDEX pkUsuario ON tbUsuario REBUILD ALTER INDEX pkObjetos ON tbObjetos REBUILD
Observamos quais estatísticas foram atualizadas:
Conclusão: Somente as estatísticas associadas aos índices foram atualizadas. As estatísticas associadas aos demais índices ou criadas manualmente (inclusive auto-create stats) não são atualizadas durante o Rebuild de índice.
Portanto, o comentário de atualizar estatística após o rebuild de índices é válido,
Comments
Anonymous
March 10, 2010
Comentário Recebido por Email: Interessante Fabrício. Só não entendi porque Paul Randal diz que não precisa atualizar as estatísticas após o rebuild: http://www.sqlskills.com/BLOGS/PAUL/post/Search-Engine-QA-10-Rebuilding-Indexes-and-Updating-Statistics.aspx Abraços Demétrio Silva MCP - MCTS - MCITP SQL SERVER 2008Anonymous
March 10, 2010
Olá Demétrio! Excelente link e comentário!!! E como você disse, o Paul Randal diz que não precisa atualizar as estatísticas após o Rebuild dos índices: "The simple answer is not to update statistics on INDEXES THAT HAVE JUST BEEN REBUILT." Revendo o que escrevi, não estou muito fora da linha de pensamento. Os índices que foram recriados (pkUsuario e pkObjetos) tiveram as estatísticas atualizadas. Entretanto, todos os demais índices e estatísticas ficaram intactos e sem atualização. Se for importante manter as estatísticas atualizadas (principalmente as estatísticas criadas automaticamente pelo Optimizer), então é importante rodar o sp_updatestats (ou algum comando similar). Abraços, FabricioAnonymous
July 07, 2010
Justamente Fabrício, Onde você fala "Portanto, o comentário de atualizar estatística após o rebuild de índices é válido, " achei meio dúbio pois você não citou que apenas as estatísticas que não são dos índices devem ser atualizadas. Foi mais interpretação do texto mesmo. Só para abrir uma discussão: Não vejo muitas razões em criar planos para atualizar as estatísticas quando temos o auto-update (claro, levando em consideração como elas são atualizadas conforme support.microsoft.com ). Sinceramente, me deparei apenas uma vez onde isso foi realmente preciso. Abraço Demétrio Silva MCP - MCTS - MCITP - MCT SQL SERVER 2008