Tôi nhận thấy một hoạt động thống kê cập nhật tự động tương đối dài (20 phút +) trong bản dựng cơ sở dữ liệu hàng ngày. Bảng liên quan là
CREATE TABLE [dbo].[factWebAnalytics](
[WebAnalyticsId] [bigint] IDENTITY(1,1) NOT NULL,
[MarketKey] [int] NOT NULL CONSTRAINT [DF_factWebAnalytics_MarketKey] DEFAULT ((-1)),
/*Other columns removed*/
CONSTRAINT [PK_factWebAnalytics] PRIMARY KEY CLUSTERED
(
[MarketKey] ASC,
[WebAnalyticsId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MarketKeyPS]([MarketKey])
) ON [MarketKeyPS]([MarketKey])
Điều này đang chạy trên Microsoft SQL Server 2012 (SP1) - 11.0.3513.0 (X64) vì vậy các chỉ mục kho lưu trữ có thể ghi không có sẵn.
Bảng chứa dữ liệu cho hai khóa Market riêng biệt. Bản dựng chuyển phân vùng cho một MarketKey cụ thể sang bảng phân tầng, vô hiệu hóa chỉ mục của cột, thực hiện ghi cần thiết, xây dựng lại kho lưu trữ cột, sau đó chuyển lại.
Kế hoạch thực hiện cho các thống kê cập nhật cho thấy rằng nó lấy ra tất cả các hàng từ bảng, sắp xếp chúng, nhận được số lượng hàng ước tính sai và tràn đến tempdb
mức tràn 2.
Đang chạy
SELECT [s].[name] AS "Statistic",
[sp].*
FROM [sys].[stats] AS [s]
OUTER APPLY sys.dm_db_stats_properties ([s].[object_id], [s].[stats_id]) AS [sp]
WHERE [s].[object_id] = OBJECT_ID(N'[dbo].[factWebAnalytics]');
trình diễn
Nếu tôi rõ ràng thử và giảm kích thước mẫu của số liệu thống kê của chỉ số đó xuống số liệu thống kê được sử dụng bởi những người khác với
UPDATE STATISTICS [dbo].[factWebAnalytics] [PK_factWebAnalytics] WITH SAMPLE 897667 ROWS
Truy vấn chạy trong 20 phút + một lần nữa và kế hoạch thực hiện cho thấy nó đang xử lý tất cả các hàng không phải là mẫu 897.667 được yêu cầu.
Các số liệu thống kê được tạo ở cuối tất cả những điều này không thú vị lắm và dường như không đảm bảo thời gian dành cho việc quét toàn bộ.
Statistics for INDEX 'PK_factWebAnalytics'.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Name Updated Rows Rows Sampled Steps Density Average Key Length String Index
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PK_factWebAnalytics Jan 22 2016 11:31AM 420072086 420072086 2 0 12 NO 420072086
All Density Average Length Columns
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0.5 4 MarketKey
2.380544E-09 12 MarketKey, WebAnalyticsId
Histogram Steps
RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 0 3.441652E+08 0 1
2 0 7.590685E+07 0 1
Bất kỳ ý tưởng tại sao tôi gặp phải hành vi này và những bước tôi có thể thực hiện ngoài việc sử dụng NORECOMPUTE
những điều này?
Một kịch bản repro ở đây . Nó chỉ đơn giản là tạo một bảng có PK cụm và chỉ mục cột và cố gắng cập nhật các số liệu thống kê PK với cỡ mẫu thấp. Điều này không sử dụng phân vùng - cho thấy khía cạnh phân vùng là không cần thiết. Tuy nhiên, việc sử dụng phân vùng được mô tả ở trên làm cho vấn đề trở nên tồi tệ hơn khi chuyển đổi phân vùng và sau đó chuyển đổi lại (thậm chí không có bất kỳ thay đổi nào khác) sẽ tăng số lần sửa đổi gấp đôi số lượng hàng trong phân vùng, do đó thực tế đảm bảo rằng số liệu thống kê sẽ xem xét cũ và tự động cập nhật.
Tôi đã thử thêm một chỉ mục không được nhóm vào bảng như được chỉ ra trong KB2986627 (cả hai được lọc không có hàng và sau đó, khi thất bại, NCI không được lọc cũng không có hiệu lực).
Bản repro không hiển thị hành vi có vấn đề trên bản dựng 11.0.6020.0 và sau khi nâng cấp lên SP3, sự cố hiện đã được khắc phục.
SELECT WebAnalyticsId, MarketKey from [dbo].[factWebAnalytics] TABLESAMPLE (897667 ROWS) ORDER BY MarketKey, WebAnalyticsId
chạy trong chưa đầy 30 giây cho tôi. Nó không sử dụng chỉ mục cột mặc dù. Nó sử dụng chỉ số cụm.