• 理解统计信息(5/6):如何检测过期的统计信息


    理解统计信息(4/6):自动更新统计信息的阀值——人为更新统计信息的重要性 里,我们讨论了自动更新统计信息的阀值,这个阀值在某些情况下,基于自动更新的统计信息还是可以获得最优的执行计划的。在大多数情况下,人为更新统计信息可以获得更好的性能。这个文章,我们可以来看下如何检测过期的统计信息。

    在SQL Server 2005以后的版本里,SQL Server使用ColModCtr 对统计的主要列对象进行跟踪。但在 SQL server 2005或SQL server 2008里没有对应的DMV进行查询,直到SQL server 2008 R2 (SP2) 开始的版本,才有sys.dm_db_stats_properties 对统计的主要列对象改变有详细的统计信息。

    对于老版本的SQL Server用户来说,我们需要基于sys.sysindexes的可用rowmodctr。自SQL Server 2005开始的版本,rowmodctr已经与老版本不再兼容。在SQL Server早期版本里,数据库引擎维护行级别的计数器修改(row-level modification counters)。这些计数器现在在列级别维护。因此,rowmodctr用来计算和生成的结果与早期版本的计数器类似,但不完全等同。

    下面的查询可以列出在统计信息里的预估改变: 

     1 SELECT 
     2      TableName=OBJECT_NAME(i.OBJECT_ID)
     3     ,ObjectType=o.type_desc
     4     ,StatisticsName=i.[name]
     5     ,statisticsUpdateDate = STATS_DATE(i.OBJECT_ID, i.index_id)
     6     ,RecordModified=si.rowmodctr
     7     ,NumberofRecords=si.rowcnt
     8 FROM sys.indexes i 
     9 JOIN sys.objects o ON    i.OBJECT_ID=o.OBJECT_ID
    10 JOIN sys.sysindexes si ON    i.OBJECT_ID=si.id
    11     AND i.index_id=si.indid 
    12 WHERE  o.TYPE <> 'S' AND STATS_DATE(i.OBJECT_ID, i.index_id) IS NOT NULL
    13 UNION ALL
    14 SELECT 
    15      TableName=OBJECT_NAME(o.OBJECT_ID)
    16     ,ObjectType=o.type_desc
    17     ,StatisticsName=s.name
    18     ,statisticsUpdateDate= STATS_DATE(o.OBJECT_ID, s.stats_id)
    19     ,RecordModified=si.rowmodctr
    20     ,NumberofRecords=ir.rowcnt
    21 FROM sys.stats s INNER JOIN sys.objects o ON s.OBJECT_ID=o.OBJECT_ID
    22 JOIN sys.sysindexes si ON s.OBJECT_ID=si.id AND s.stats_id= si.indid
    23 INNER JOIN (SELECT id,rowcnt FROM sys.sysindexes WHERE indid IN (0,1)) IR
    24 ON IR.id=o.OBJECT_ID  WHERE  o.TYPE <> 'S'  
    25 AND (s.auto_created=1 OR s.user_created=1)AND STATS_DATE(o.OBJECT_ID, s.stats_id) IS NOT NULL

    根据这个查询结果,加上我们系统中现运行查询的工作量/类别,我们就可以在合适的时间用计划任务定期对统计信息进行更新,不用盲目的更新所有统计信息。继续围观统计信息总结 

    参考文章:

    http://www.sqlservercentral.com/blogs/practicalsqldba/2013/07/08/sql-server-part-5-all-about-sql-server-statistics-how-to-detect-outdated-statistics-/

  • 相关阅读:
    mplayer编程模式控制命令
    设置开发板启动后自启动Qt
    Linux下制作logo并显示到开发板上 .
    启动开发板,提示:can't access tty,job control turned off
    BellmanFord贝尔曼福特算法
    阿拉伯数字转中文数字
    webService
    http请求全过程
    (转)MongoDB设置访问权限、设置用户
    YTC, YTM, YTW
  • 原文地址:https://www.cnblogs.com/woodytu/p/4522318.html
Copyright © 2020-2023  润新知