Có một mối liên hệ quan trọng giữa Index và Statistics trong SQL Server, ta nên nhận biết điều này..
Nếu ta có một index, SQL Server sẽ sử dụng index này để lấy những records. Nếu ta tạo ra một index trên một column tên là City có < 90% giá trị là 'Vancouver', SQL Server sẽ hầu như thực hiện một table scan thay vì sử dụng index nếu nó biết những thông tin thống kê này.
Khi nào Statistics tự động Update trong SQL Server:
http://www.sqlskills.com/blogs/erin/understanding-when-statistics-will-automatically-update/
http://technet.microsoft.com/en-us/library/jj553546.aspx
Những vấn đề gây ra bởi out-up-date Statistics trong SQL Server
http://www.mssqltips.com/sqlservertip/2723/issues-caused-by-outdated-statistics-in-sql-server/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=20130916
Đoạn script kiểm tra Statistics last update cho tất cả Index
SELECT o.name, i.name AS [Index Name],STATS_DATE(i.[object_id], i.index_id) AS [Statistics Date], s.auto_created, s.no_recompute, s.user_created, st.row_count FROM sys.objects AS o WITH (NOLOCK) INNER JOIN sys.indexes AS i WITH (NOLOCK) ON o.[object_id] = i.[object_id] INNER JOIN sys.stats AS s WITH (NOLOCK) ON i.[object_id] = s.[object_id] AND i.index_id = s.stats_id INNER JOIN sys.dm_db_partition_stats AS st WITH (NOLOCK) ON o.[object_id] = st.[object_id] AND i.[index_id] = st.[index_id] WHERE o.[type] = 'U' ORDER BY STATS_DATE(i.[object_id], i.index_id) ASC OPTION (RECOMPILE);
Có 1 lệnh để kiểm tra Statistics của các object trong table hay View
DBCC SHOW_STATISTICS ( table_or_indexed_view_name, target ) [ WITH [ < options > ] --ví dụ: DBCC SHOW_STATISTICS ( 'Sales.SalesOrderDetail’ , PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID )
Có 4 tùy chọn trong phần option là: NO_INFOMSGS, STAT_HEADER, DENSITY_VECTOR, và HISTOGRAM
Nếu ta muốn update Statistics cho một table hay cho một Statistics cụ thể thì dùng lệnh sau:
UPDATE STATISTICS --hoặc UPDATE STATISTICS
Liệt kê ngày update Statistic cho tất cả các object trong SQL Server
SELECT OBJECT_NAME(object_id) AS [ObjectName] ,[name] AS [StatisticName] ,STATS_DATE([object_id], [stats_id]) AS [StatisticUpdateDate] FROM sys.stats
And here is the result. This proves that my statistics are out up date.
And another example, I want to check statistics for a specific table:
SELECT OBJECT_NAME(object_id) AS [ObjectName] ,[name] AS [StatisticName] ,STATS_DATE([object_id], [stats_id]) AS [StatisticUpdateDate] FROM sys.stats where OBJECT_NAME(object_id) like '%AQT_INVENTORY_SNAPSHOT_SALE_DIS%'
Refer: http://basitaalishan.com/2013/04/15/determining-when-statistics-were-last-updated-in-sql-server/
0 comments:
Post a Comment