Tư vấn sử dụng STATISTICS_NORECOMPUTE


9

Gần đây tôi đã tham gia vào việc duy trì một bộ cơ sở dữ liệu với một số vấn đề về chỉ số thú vị. Một trong những điều làm tôi khó chịu nhất là sự khác biệt về chỉ số giữa các máy phát triển, thử nghiệm, mô hình và sản xuất. Vì sự khác biệt làm cho các truy vấn điều chỉnh khá khó khăn khi đồng bộ hóa chúng là một trong những dự án đầu tiên của tôi.

Như tôi đã so sánh các môi trường thử nghiệm và mô hình, tôi nhận thấy rằng hầu hết các chỉ mục trong môi trường mô hình đã STATISTICS_NORECOMPUTEđược đặt ONtrong khi các môi trường thử nghiệm thì không. Trong tất cả các môi trường có một công việc hàng đêm cập nhật số liệu thống kê của tất cả các cơ sở dữ liệu.

Tôi chưa bao giờ giải quyết STATISTICS_NORECOMPUTEtrước đây nên đây là câu hỏi của tôi. Có thực hành tốt nhất khi xử lý cài đặt này không? Nếu tôi đang thực hiện cập nhật thống kê vào cuối ngày thì tốt nhất nên bật STATISTICS_NORECOMPUTEtất cả các môi trường trên tất cả các chỉ mục? Hoặc có một lý do tốt để không?

EDIT: Tôi đã tìm thấy một trong những blog của Kimberly Tripp về chủ đề ở đây dường như gợi ý rằng STATISTICS_NORECOMPUTEnên sử dụng một cách tiết kiệm nhất. Nhưng tôi vẫn lo lắng về việc tắt nó trên toàn cầu. Có ai đã thử điều này và những gì họ đã trải nghiệm?


Bạn sẽ phải xem ứng dụng này để tin nó. Một số bảng có hàng tá chỉ mục một số không có, một số có nhiều bản sao. Đó là một mớ hỗn độn thực sự. Bất kỳ hướng dẫn chung để đi qua? Bất cứ nơi nào tôi có thể làm một số đọc?
Kenneth Fisher

1
Một trường hợp tốt là sử dụng STATISTICS_NORECOMPUTE = ON và FILLFACTOR = 100 cho các bảng tra cứu chỉ đọc được DBA thay đổi bằng cách sử dụng tập lệnh INDEX REBUILD với FULLSCAN sau khi thay đổi; sau đó bảng có hình dạng tối ưu với số liệu thống kê tối ưu và không có thay đổi nào khác, không có lý do gì để xem xét tính toán lại số liệu thống kê hoặc để lại không gian để giảm phân chia trang về các thay đổi trong tương lai.
Mật khẩu chống yếu

Câu trả lời:


4

Đây thực sự là một điều tình huống mà bạn muốn xem xét trên mỗi bảng hoặc mỗi chỉ số và bạn thực sự cần tìm hiểu những gì trong sản xuất trước khi thực hiện bất kỳ hành động nào. Khi nghi ngờ, hãy sử dụng những gì đang sản xuất trong các môi trường khác, ngay cả khi điều đó có nghĩa là sử dụng một loạt các cài đặt điên rồ. Bạn không thể có được cảm giác tốt về cách sản xuất sẽ hoạt động nếu mọi thứ khác nhau trong thử nghiệm hoặc dev.

Dù sao, khuyến nghị chung để bật thống kê tự động cập nhật ( STATISTICS_NORECOMPUTE = OFFlà mặc định) là vì lý do an toàn, vì nếu điều này bị tắt và không có gì cập nhật thủ công, kết quả có thể là các kế hoạch thực hiện khủng khiếp không bao giờ thay đổi sau khi chúng được tạo lần đầu (và không bị vô hiệu vì những lý do khác sau này).

Bạn nói rằng các số liệu thống kê tự động cập nhật bị tắt cho hầu hết các chỉ mục (tôi nghĩ ban đầu tôi đã đọc sai tất cả , không phải hầu hết ). Đối với các chỉ mục có thống kê cập nhật tự động vẫn được bật, cài đặt này có hợp lý với hoạt động trên các bảng đó không? Tôi hy vọng rằng đây là những bảng hoạt động cao hơn. Có thể rất nhiều công việc đã tìm ra điều đó và có thể đáng để giữ (hoặc xem xét mạnh mẽ) các cài đặt đó. Ít nhất, hãy ghi lại những chỉ số này, bởi vì thông tin đó có thể có ích trong quá trình sử dụng.

Nghĩ về nó nhiều hơn, tôi sẽ nói rằng chiến lược hiện tại có ý nghĩa. Có tốt hơn so với để lại số liệu thống kê tự động cập nhật cho tất cả mọi thứ? Có vẻ như ai đó đã nghĩ như vậy, đến mức đáng để đánh đổi sự dễ quản lý khi có một công việc SQL Agent liên quan.

Nếu ý tưởng là có sẵn các số liệu thống kê mới mà không chặn các truy vấn (như thế này ), bạn có thể xem xét bật lại tự động cập nhật cho mọi thứ, và sau đó cũng bật AUTO_UPDATE_STATISTICS_ASYNC. Sau đó, có thể thay đổi lịch trình công việc để chạy một lần / tuần thay vì hàng ngày, vì bạn vẫn muốn số liệu thống kê được cập nhật WITH FULLSCANđịnh kỳ.

Tuy nhiên, tôi có thể bỏ nó đi, vì bạn có thể có những con cá lớn hơn để chiên nếu bản thân các chỉ số khác nhau giữa các môi trường và các chỉ số được xây dựng lại không quá đau đớn. Những gì ở đó bây giờ có ý nghĩa; bạn chỉ cần làm cho mọi thứ nhất quán trên các môi trường. Nó có thể tốt hơn một chút so với các cài đặt đơn giản hơn mà tôi đề xuất, với chi phí cho nhiều công việc được thực hiện. Nhưng tìm hiểu những gì trong sản xuất, có xu hướng sử dụng điều đó, và chuyển sang những thứ quan trọng hơn; xem lại điều này khi bạn đang ở thời điểm cần điều chỉnh hiệu suất cao hơn - các số liệu thống kê tốt nhất trên thế giới sẽ không lưu một truy vấn thiếu chỉ số quan trọng.


Rất tiếc ... tôi nghĩ rằng tôi đã chọn không gửi bình luận này.
swasheck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.