Khi nào cần cập nhật số liệu thống kê?


42

Tôi đã kế thừa một Gói bảo trì thực hiện như sau:

  • Dọn dẹp dữ liệu cũ
  • Kiểm tra tính toàn vẹn DB
  • Thực hiện sao lưu cơ sở dữ liệu và nhật ký giao dịch
  • Sắp xếp lại các chỉ số của chúng tôi
  • Cập nhật thống kê
  • Xóa các bản sao lưu cũ và các tệp Kế hoạch bảo trì

Trong kế hoạch bảo trì 23 phút, việc cập nhật số liệu thống kê mất 13 phút đáng kinh ngạc. Trong khoảng thời gian 13 phút này, quyền truy cập vào cơ sở dữ liệu bị chặn (hoặc ít nhất, việc sao chép từ DB này sang DB khác bị tạm dừng).

Câu hỏi của tôi là:

Khi nào chúng ta nên cập nhật số liệu thống kê, và tại sao?

Điều này có vẻ như là điều chúng ta nên làm ít thường xuyên hơn mỗi ngày. Tôi đang cố gắng đưa chúng tôi ra khỏi tâm trí "chỉ vì" thực hiện Bảo trì không cần thiết.


2
Tần suất / cách bất kỳ hàng nào được chèn / cập nhật / xóa? Với tôi đây là yếu tố quyết định.
JNK

@JNK Chúng tôi chèn ~ 70.000 hàng mỗi ngày trên toàn bộ DB. Cập nhật ~ 100 hàng một tháng.
Onion-Knight

1 - Điều này có liên quan hơn nếu chúng ta biết BẢNG có bao nhiêu hàng và 2 - như là một tỷ lệ phần trăm. 70k hàng mỗi ngày vào một bảng 1m khác rất nhiều so với một bảng 500m
JNK

Tôi sẽ khuyên bạn sử dụng một số điều như ola.hallengren.com/... giải pháp này chỉ xây dựng lại / tổ chức lại và cập nhật những gì cần thiết bằng cách này bạn có thể shortenthe thời gian kế hoạch maintinance bạn mất và còn tiết kiệm rất nhiều lỗ không gian log ..
Peter

Câu trả lời:


28

Nếu bạn không có cửa sổ bảo trì cho nó, việc cập nhật số liệu thống kê hàng ngày có lẽ là hơi quá mức. Đặc biệt nếu bạn đã bật Tự động cập nhật thống kê cho cơ sở dữ liệu. Trong bài đăng gốc của bạn, bạn đã nói rằng người dùng đang thấy sự suy giảm hiệu suất do kế hoạch bảo trì này. Không có thời gian khác để chạy kế hoạch bảo trì này? Không có cửa sổ khác? Tôi thấy rằng kế hoạch của bạn bao gồm việc sắp xếp lại chỉ mục, khi nào bạn xây dựng lại các chỉ mục? Khi hoạt động đó xảy ra, số liệu thống kê sẽ được cập nhật tự động (miễn là không tắt cho chỉ mục).

Chính xác tần suất bạn nên cập nhật số liệu thống kê phụ thuộc rất lớn vào mức độ sửa đổi dữ liệu mà chỉ mục và dữ liệu của bạn nhận được . Nếu có rất ít thay đổi ( INSERT, UPDATE, DELETE) cho các dữ liệu, sau đó bạn có thể có một lịch trình thường xuyên hơn cho công việc cập nhật thống kê.

Một cách để tìm hiểu xem số liệu thống kê của bạn có cũ hay không là xem xét các kế hoạch thực hiện và nếu bạn ước tính các hàng khác biệt rất nhiều so với các hàng thực tế của bạn được trả về thì đó là một dấu hiệu tốt cho thấy khoảng thời gian cần được tăng lên. Trong trường hợp của bạn, bạn đang đi theo một cách khác và một chút thử nghiệm có thể phù hợp với bạn. Cập nhật số liệu thống kê hàng tuần và nếu bạn bắt đầu thấy các dấu hiệu rõ ràng về số liệu thống kê cũ thì hãy đi từ đó.

Nếu bạn đang sử dụng Thống kê cập nhật tự động cho cơ sở dữ liệu của mình, hãy xem tham chiếu này để biết ngưỡng khi thống kê được cập nhật.


Chúng tôi xây dựng lại các chỉ số một lần một tuần.
Onion-Knight

5
@ Onion-Knight Sau đó, bạn cũng đang cập nhật số liệu thống kê mỗi tuần một lần khi bạn xây dựng lại các chỉ mục của mình. Điều đó có thể là đủ nếu bạn đang thực hiện một chỉ mục chăn được xây dựng lại trên cơ sở dữ liệu.
Thomas Stringer

25

Khi nào cần cập nhật số liệu thống kê?

nếu và chỉ khi tính năng thống kê cập nhật tự động không đủ tốt cho yêu cầu của bạn. ý tôi là nếu số liệu thống kê tự động tạo và tự động cập nhật được BẬT và bạn đang nhận được một kế hoạch truy vấn xấu bởi vì số liệu thống kê không chính xác hoặc hiện tại thì có thể nên kiểm soát việc tạo và cập nhật số liệu thống kê. nhưng nếu bạn ổn với hiệu suất máy chủ sql và thời gian thực hiện Truy vấn.

sau đó tôi khuyên bạn nên dừng lệnh Cập nhật Thống kê từ Gói bảo trì của bạn

cập nhật số liệu thống kê rất quan trọng và hữu ích 1. cho phép trình tối ưu hóa truy vấn SQL Server tạo ra các kế hoạch truy vấn tốt một cách nhất quán, trong khi vẫn giữ chi phí phát triển và quản trị ở mức thấp 2. Thống kê được sử dụng bởi trình tối ưu hóa truy vấn để ước tính độ chọn lọc của biểu thức và do đó kích thước của trung gian và kết quả truy vấn cuối cùng. 3. Thống kê tốt cho phép trình tối ưu hóa đánh giá chính xác chi phí của các gói truy vấn khác nhau và sau đó chọn gói chất lượng cao


Nếu bạn muốn cập nhật Thống kê theo cách thủ công, trước tiên bạn nên biết Khi Thống kê được cập nhật tự động

Nếu trình tối ưu hóa truy vấn SQL Server yêu cầu thống kê cho một cột cụ thể trong bảng đã trải qua hoạt động cập nhật đáng kể kể từ lần cuối thống kê được tạo hoặc cập nhật, SQL Server sẽ tự động cập nhật thống kê bằng cách lấy mẫu các giá trị cột (bằng cách sử dụng thống kê cập nhật tự động) . Cập nhật tự động thống kê được kích hoạt bằng tối ưu hóa truy vấn hoặc bằng cách thực hiện kế hoạch được biên dịch và nó chỉ liên quan đến một tập hợp con của các cột được đề cập trong truy vấn. Thống kê được cập nhật trước khi biên dịch truy vấn nếu AUTO_UPDATE_STATISTCS_ASYNC bị TẮT

Dưới đây là những bài viết hay nói về khi thống kê cập nhật được kích hoạt trong máy chủ SQL

  1. từ phần nói chuyện đơn giản Phần 13. Khi nào Tự động cập nhật lên Thống kê được kích hoạt?
  2. support.microsoft Phần: Tự động xác định Autostats
  3. Phần msdn.microsoft : Duy trì số liệu thống kê trong SQL Server 2008

sau khi biết khi nào số liệu thống kê được kích hoạt, nó sẽ giúp bạn quyết định khi nào cập nhật số liệu thống kê theo cách thủ công

để biết thêm về Thống kê & ảnh hưởng của nó đến hiệu suất, tôi khuyên bạn nên sử dụng BrentOzarKimberly trong các blog và blog rất tốt.

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.