Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1218
Assunto : SQL Server
Titulo: Identificando se as estatísticas estão sendo atualizadas

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



O auto-update statistics, quando está habilitado no banco de dados, realiza a atualização de estatísticas sempre que o total de linhas alteradas atinge 20% das linhas da tabela.

Citei em outra dica que para tabelas grandes isso não é bom, podemos usar o traceflag 2371 para tornar esse percentual mais dinâmico, pode ver detalhes em http://bufaloinfo.cloudapp.net/ConteudoTecnico/Dica.aspx?cod=1126

Porém em qualquer desses casos é importante acompanharmos a atualização das estatísticas, termos certeza de que tudo está ocorrendo como deveria.

Para checarmos se as estatísticas estão sendo atualizadas, podemos criar a seguinte função:

CREATE FUNCTION StatisticsModifications ()
RETURNS TABLE
AS
RETURN
(
SELECT
[schema], [Table],
name, [Statistic],
[last_updated], [rows],
[rows_sampled], [Modifications]
FROM
[sys].[stats] AS [s] inner join sys.stats_columns sc
on s.stats_id=sc.stats_id and s.object_id=sc.object_id
inner join sys.columns c
on c.object_id=sc.object_id and c.column_id=sc.column_id
inner join sys.objects o
on s.object_id=o.object_id
inner join sys.schemas sch
on o.schema_id=sch.schema_id
OUTER APPLY sys.dm_db_stats_properties ([s].[object_id],[s].[stats_id]) AS [sp]
where sch.name<>'sys'
)

Então fazemos uma query sobre a função para obter as estatísticas que encontram-se mais desatualizadas e decidir se precisamos atualiza-las:

select [schema], [Table],
name, [Statistic],
[last_updated], [rows],
[rows_sampled], [Modifications],
(100 * modifications)/[rows] [Percent]
from dbo.statisticsmodifications()
/* removes rows with too few modifications */
where (modifications > 1000 or (modifications * 100) > [rows])
order by [Percent] desc,last_updated desc



Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 5/1/2016 11:44:00 PM
nome: Dennes
email: dennes@bufaloinfo.com.br
comentário:

Existe um equivoco na lista de campos da query inicial e da função. A função correta fica da seguinte forma:


CREATE FUNCTION StatisticsModifications ()
RETURNS TABLE
AS
RETURN
(
SELECT
SCHEMA_NAME([o].[schema_id]) AS [schema], [o].[name] as [TABLE],
[s].[name] AS Statistic,
[sp].[last_updated],
[sp].[rows],
[sp].[rows_sampled],
[sp].[modification_counter] AS [Modifications]
FROM
[sys].[stats] AS [s] inner join sys.stats_columns sc
on s.stats_id=sc.stats_id and s.object_id=sc.object_id
inner join sys.columns c
on c.object_id=sc.object_id and c.column_id=sc.column_id
inner join sys.objects o
on s.object_id=o.object_id
inner join sys.schemas sch
on o.schema_id=sch.schema_id
OUTER APPLY sys.dm_db_stats_properties ([s].[object_id],[s].[stats_id]) AS [sp]
where sch.name<>'sys'

)


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br