日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何检测过期的统计信息(转)

發布時間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何检测过期的统计信息(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在大多數情況下,人為更新統計信息可以獲得更好的性能。這個文章,我們可以來看下如何檢測過期的統計信息。

在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用來計算和生成的結果與早期版本的計數器類似,但不完全等同。

下面的查詢可以列出在統計信息里的預估改變:?

SELECT
TableName=OBJECT_NAME(i.OBJECT_ID)
,ObjectType=o.type_desc
,StatisticsName=i.[name]
,statisticsUpdateDate = STATS_DATE(i.OBJECT_ID, i.index_id)
,RecordModified=si.rowmodctr
,NumberofRecords=si.rowcnt
FROM sys.indexes i
JOIN sys.objects o ON i.OBJECT_ID=o.OBJECT_ID
JOIN sys.sysindexes si ON i.OBJECT_ID=si.id
AND i.index_id=si.indid
WHERE o.TYPE <> 'S' AND STATS_DATE(i.OBJECT_ID, i.index_id) IS NOT NULL
UNION ALL
SELECT
TableName=OBJECT_NAME(o.OBJECT_ID)
,ObjectType=o.type_desc
,StatisticsName=s.name
,statisticsUpdateDate= STATS_DATE(o.OBJECT_ID, s.stats_id)
,RecordModified=si.rowmodctr
,NumberofRecords=ir.rowcnt
FROM sys.stats s INNER JOIN sys.objects o ON s.OBJECT_ID=o.OBJECT_ID
JOIN sys.sysindexes si ON s.OBJECT_ID=si.id AND s.stats_id= si.indid
INNER JOIN (SELECT id,rowcnt FROM sys.sysindexes WHERE indid IN (0,1)) IR
ON IR.id=o.OBJECT_ID WHERE o.TYPE <> 'S'
AND (s.auto_created=1 OR s.user_created=1)AND STATS_DATE(o.OBJECT_ID, s.stats_id) IS NOT NULL

根據這個查詢結果,加上我們系統中現運行查詢的工作量/類別,我們就可以在合適的時間用計劃任務定期對統計信息進行更新,不用盲目的更新所有統計信息。

總結

以上是生活随笔為你收集整理的如何检测过期的统计信息(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。