Khi bạn tạo cơ sở dữ liệu mới trong SQL Server, tùy chọn Thống kê Tự động Cập nhật được bật theo mặc định. Thông thường, bạn nên để tùy chọn này được kích hoạt. Lý tưởng nhất là thống kê được quản lý bởi một công việc đã lên lịch và tùy chọn tự động được sử dụng như một mạng lưới an toàn - có sẵn để cập nhật thống kê trong trường hợp cập nhật theo lịch không xảy ra hoặc vô tình không bao gồm tất cả các thống kê hiện có.
Một số DBA chỉ dựa vào cập nhật tự động để quản lý thống kê và miễn là không tồn tại vấn đề hiệu suất liên quan đến thống kê lỗi thời hoặc được lấy mẫu kém, điều này có thể chấp nhận được. Nếu bạn đang dựa vào tùy chọn này để quản lý thống kê của mình và bạn có một số bảng rất lớn, thì việc triển khai cờ theo dõi 2371. Như với bất kỳ cờ theo dõi nào, hãy đảm bảo bạn kiểm tra với khối lượng công việc đại diện trước khi triển khai nó trong sản xuất. Bạn có thể đã biết rằng đôi khi bản cập nhật tự động có thể ảnh hưởng đến hiệu suất hệ thống. Ví dụ:cập nhật thống kê có thể làm tăng đột biến CPU hoặc I / O khi dữ liệu bảng hoặc chỉ mục được đọc, cũng như trì hoãn thực thi truy vấn trong khi cập nhật xảy ra. Có một tùy chọn cơ sở dữ liệu khác mà bạn có thể bật để giải quyết độ trễ truy vấn đó và tôi sẽ đề cập đến vấn đề đó ở phần sau của bài đăng này.
Câu hỏi tôi thường hỏi là, "Làm cách nào để biết liệu các bản cập nhật tự động cho thống kê có gây ra các vấn đề về hiệu suất? "Một tùy chọn là theo dõi chúng và liên kết các cập nhật với sự thay đổi về hiệu suất. Nhiều tùy chọn tồn tại để theo dõi các cập nhật và trong bài đăng này, chúng tôi sẽ xem xét một số phương pháp có sẵn để bạn có thể chọn và sau đó triển khai tùy chọn phù hợp nhất với phương pháp giám sát các vấn đề về hiệu suất hiện có của bạn.
SQL Trace
Nếu bạn đang chạy SQL Server 2008 R2 trở xuống trong môi trường của mình, SQL Trace là một phương pháp bạn có thể sử dụng để nắm bắt các bản cập nhật tự động. Tập lệnh xác định dấu vết được sử dụng bên dưới chỉ ghi lại sự kiện Thống kê tự động, bắt khi thống kê tự động cập nhật và khi thống kê tự động tạo. Sau khi dấu vết này chạy một lúc trong môi trường của bạn, bạn có thể tải nó vào một bảng và sau đó truy vấn đầu ra để xem những cập nhật nào đã xảy ra. Tập lệnh bao gồm bên dưới xem qua một ví dụ bằng cách sử dụng cơ sở dữ liệu mẫu về số liệu thống kê bóng chày.
Sự kiện mở rộng
Nếu bạn đang chạy SQL Server 2012 trở lên, tôi khuyên bạn nên sử dụng Sự kiện mở rộng để nắm bắt các bản cập nhật tự động. Giống như tập lệnh SQL Trace, tập lệnh định nghĩa phiên được bao gồm chỉ nắm bắt các sự kiện Thống kê Tự động - một lần nữa, cả tự động cập nhật và tự động tạo. Sau khi phiên XE đã chạy được một lúc, bạn có thể tải đầu ra vào một bảng thông qua giao diện người dùng và sau đó truy vấn nó để xem những cập nhật nào đã xảy ra. Tập lệnh bao gồm sẽ xem qua cùng một ví dụ như trước, nhưng lần này sử dụng Sự kiện mở rộng để thu thập dữ liệu.
sys.dm_db_stats_properties
Tùy chọn thứ ba mà bạn có thể xem xét để theo dõi cập nhật thống kê là sys.dm_db_stats_properties
DMF, chỉ khả dụng trong SQL Server 2008 R2 SP2 trở lên và SQL Server 2012 SP1 trở lên. Tôi yêu thích DMF này nhiều như vậy, giải pháp này phức tạp hơn về mặt đảm bảo bạn đã nắm bắt được tất cả dữ liệu và việc xem xét kết quả đầu ra sẽ mất nhiều công sức hơn. Với DMF, mọi cập nhật tự động không được theo dõi, chúng tôi chỉ cập nhật thông tin thống kê xu hướng để biết khi nào cập nhật xảy ra.
Đó là một nhiệm vụ đơn giản:bạn tạo một bảng để chứa thông tin thống kê và sau đó chụp nhanh thông tin từ DMF vào bảng một cách thường xuyên. Chìa khóa ở đây là tìm ra tần suất thu thập dữ liệu. Mỗi giờ có thể là quá mức cần thiết, một lần một ngày có thể không đủ thường xuyên. Tôi khuyên bạn nên bắt đầu với công việc SQL Agent sẽ chụp nhanh dữ liệu DMF bốn giờ một lần. Hãy để điều đó chạy trong vài ngày, sau đó kiểm tra dữ liệu của bạn. Nếu số liệu thống kê được cập nhật tối đa một lần mỗi ngày, thì bạn có thể tăng khoảng thời gian này lên cứ sau 8 hoặc 12 giờ một lần. Nếu số liệu thống kê dễ dàng cập nhật bốn giờ một lần, thì hãy giảm khoảng thời gian của bạn xuống hai giờ một lần - bạn muốn đảm bảo rằng mình đang nắm bắt từng bản cập nhật. Vì lý do này, đối với một số hệ thống, sys.dm_db_stats_properties
có thể không đáng để nỗ lực; một phiên XE hoặc Trace có thể đơn giản hơn.
Tập lệnh mẫu cuối cùng sẽ giới thiệu qua ví dụ về cách bạn sẽ sử dụng sys.dm_db_stats_properties
để cập nhật xu hướng cho số liệu thống kê. Lưu ý rằng tập lệnh này chỉ nắm bắt thông tin thống kê cho một bảng. Nếu bạn thay đổi tập lệnh để nắm bắt mọi bảng trong cơ sở dữ liệu, sẽ có nhiều dữ liệu hơn để phân tích.
Các bước tiếp theo
Tải xuống các tập lệnh mẫu và quyết định phương pháp bạn nên sử dụng để theo dõi cập nhật thống kê.
Sau khi bạn có dữ liệu hiển thị khi cập nhật tự động xảy ra, bạn cần liên kết dữ liệu đó trở lại các vấn đề hiệu suất đã biết. Do đó, nếu bạn không theo dõi bất kỳ số liệu hiệu suất nào, thì dữ liệu cập nhật thống kê tự động sẽ không giúp ích cho bất kỳ loại tương quan nào. Giả sử bạn có dấu thời gian cho bất kỳ vấn đề hiệu suất nào, bạn có thể so sánh nó với StartTime
và EndTime
từ Trace, timestamp
từ XE hoặc last_updated
từ sys.dm_db_stats_properties
DMF, để xác định xem bản cập nhật tự động có ảnh hưởng đến hiệu suất hệ thống hay không.
Nếu bạn không thể thực hiện bất kỳ mối tương quan nào giữa các bản cập nhật và các vấn đề về hiệu suất, thì bạn có thể loại trừ các bản cập nhật là nguyên nhân của sự cố và tập trung vào một lĩnh vực khác. Nếu các bản cập nhật là nguyên nhân gốc rễ, thì bạn có hai tùy chọn:tắt tùy chọn Thống kê Tự động Cập nhật hoặc bật tùy chọn Tự động Cập nhật Thống kê Không đồng bộ. Cả hai đều có ưu và nhược điểm mà bạn, với tư cách là DBA, phải xem xét.
Tắt Thống kê Tự động Cập nhật
Nếu bạn chọn tắt tùy chọn thống kê tự động cập nhật, hai điều quan trọng nhất cần biết là:
- Bạn hoàn toàn phải quản lý số liệu thống kê của mình thông qua nhiệm vụ bảo trì hoặc công việc tùy chỉnh.
- Các truy vấn sẽ không biên dịch lại khi bạn cập nhật thống kê trong SQL Server 2008 R2 trở xuống.
Tôi xem mục thứ hai là một thách thức lớn hơn - tôi là người ủng hộ lớn cho việc quản lý số liệu thống kê và mong rằng đó là điều mà các DBA đang làm. Vấn đề lớn hơn là, ngay cả khi cập nhật thống kê bình thường khiến các truy vấn phải biên dịch lại (để tận dụng các số liệu thống kê được cập nhật), điều này không xảy ra khi bạn tắt tùy chọn thống kê tự động cập nhật. Tôi đã viết về điều này trước đây và khuyên bạn nên xem lại thông tin này nếu bạn không quen với hành vi này. Ngoài ra, hãy xem một bài đăng tiếp theo để biết các tùy chọn để giải quyết vấn đề đó.
Nói chung, đây không phải là con đường mà tôi đề xuất. Có những trường hợp cạnh rất cụ thể trong đó điều này có thể phù hợp, nhưng tôi muốn thấy một DBA thực hiện cập nhật thủ công (thông qua các công việc đã lên lịch) để tránh cập nhật tự động và để tùy chọn được bật như một biện pháp an toàn.
Bật tự động cập nhật thống kê không đồng bộ
Khi bạn bật tùy chọn Tự động cập nhật thống kê không đồng bộ, nếu thống kê đã bị vô hiệu và truy vấn sử dụng thống kê đó được chạy, thống kê sẽ không được cập nhật cho đến khi truy vấn hoàn tất - cập nhật không đồng bộ. Lợi ích ở đây là bản cập nhật sẽ không ảnh hưởng đến truy vấn đã được chạy; hạn chế là truy vấn sẽ sử dụng kế hoạch hiện có, có thể không còn là kế hoạch tối ưu. Kế hoạch có còn tối ưu hay không sẽ phụ thuộc vào khối lượng công việc của bạn (ví dụ:khối lượng công việc báo cáo với các truy vấn chạy dài). Là một DBA, bạn phải cân nhắc những ưu và nhược điểm của việc bật tùy chọn này và xác định điều gì tốt nhất cho cơ sở dữ liệu của bạn. Lưu ý rằng nếu bạn đang chạy SQL Server 2008 đến 2012, có một rò rỉ bộ nhớ liên quan đến cài đặt này. Microsoft có sẵn Bản cập nhật tích lũy cung cấp bản sửa lỗi, nhưng nếu bạn chưa áp dụng chúng, bạn sẽ phải đối mặt với một quyết định khác:áp dụng CU để bạn có thể bật tùy chọn hoặc không áp dụng CU và không bật tùy chọn.
Tóm tắt
Cách duy nhất để biết liệu các bản cập nhật tự động cho thống kê có ảnh hưởng đến hiệu suất truy vấn hay không là xem bản cập nhật xảy ra cùng lúc với sự cố hoặc nắm bắt thời điểm các bản cập nhật xảy ra và tương quan dữ liệu với thông tin bổ sung mà bạn đang nắm bắt về các sự cố hiệu suất. Tùy chọn thứ hai cho phép bạn chủ động - ngay cả khi bạn không gặp vấn đề về hiệu suất, bạn nên biết tần suất cập nhật tự động xảy ra. Cập nhật thường xuyên có thể có nghĩa là bạn cần phải truy cập lại công việc Đại lý quản lý số liệu thống kê theo cách thủ công. Nói chung, hãy để tùy chọn tự động cập nhật thống kê được bật, nhưng có một phương pháp để quản lý số liệu thống kê và sử dụng tùy chọn này như một mạng lưới an toàn.