2009-07-28 48 views
7

Trong DMV sys.dm_db_missing_index_group_stats, có một trường có tên avg_user_impact. Trên mỗi BOL, điều này hiển thị số điện thoạimáy chủ sql avg_user_impact

Lợi ích phần trăm trung bình mà truy vấn người dùng có thể gặp phải nếu nhóm chỉ mục bị thiếu này được triển khai. Giá trị có nghĩa là chi phí truy vấn sẽ giảm trung bình theo tỷ lệ phần trăm này nếu nhóm chỉ mục bị thiếu này được triển khai.

Khi tôi chạy truy vấn để tìm các chỉ mục bị thiếu có ảnh hưởng lớn nhất đến hiệu suất, tôi thấy một số xác nhận rằng avg_user_impact sẽ nằm trong hàng nghìn.

Tôi đã xây dựng chỉ mục bằng một trong các đề xuất này và không bao giờ được sử dụng theo DMV sys.dm_db_index_usage_stats. Ngay sau khi tôi vô hiệu hóa chỉ mục, nó ngay lập tức xuất hiện trở lại như là một chỉ mục còn thiếu.

Có thể khi trường avg_user_impact hiển thị trên 100, trường hợp đó có lỗi? Hoặc đây có phải là ví dụ về cách một chỉ mục được đề xuất vẫn phải được kiểm tra tính hữu dụng không? Tôi đang làm gì sai hoặc hiểu lầm?

Trả lời

7

Các chỉ mục được đề xuất và tác động của người dùng là cả ước tính từ trình tối ưu hóa chi phí và, như bạn thấy không có gì đảm bảo rằng chúng luôn chính xác. Tôi nghĩ rằng cột tác động của người dùng có thể lên đến 100 bằng thiết kế (mặc dù chúng tôi phải hy vọng một nhà phát triển MS từ nhóm SQL Server đang phản hồi ở đây để có câu trả lời thực). DMV sẽ hoạt động hay không. Tôi đã có cùng trải nghiệm khi chỉ mục được hiển thị ở đó, nhưng khi được tạo không thực sự được sử dụng, có thể do chi tiết của truy vấn hoặc phân phối dữ liệu trong các bảng, v.v. Chế độ xem là phần lớn thời gian, đặc biệt là đối với các trường hợp đơn giản, nhưng không phải lúc nào.

Ngoài ra, hãy cẩn thận khi tạo các chỉ mục thực sự rộng, vì chúng có thể làm giảm hiệu suất chèn/cập nhật nhiều hơn chúng giúp chọn hiệu suất, tùy thuộc vào mức độ bận của máy chủ.

+2

Một điều khác - có một truy vấn thực sự thông minh để tương quan các kế hoạch truy vấn với các chỉ mục được đề xuất tại đây: http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/71814032-cd8d-4802-80de -7fb2bee80f41 cũng: http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/07/27/digging-into-the-sql-plan-cache-finding-missing-indexes.aspx – onupdatecascade

0

Thống kê bảng cũng phải được cập nhật để đảm bảo SQL Engine sử dụng các chỉ mục mới được tạo.

Sau khi tạo chỉ mục RUN

USE AdventureWorks2012; GO EXEC sp_updatestats; GO

Cập nhật lệnh STATISTICS sẽ đảm bảo rằng tất cả các kế hoạch SQL được lưu trữ bị vô hiệu và kế hoạch thực thi sql mới được tạo bằng cách sử dụng các chỉ mục mới được tạo.

+0

Xin chào, Mayank. Tuyên bố của bạn có thể không hoàn toàn chính xác. Đây là một bài đăng stackoverflow khác sẽ giúp: http://stackoverflow.com/questions/1930726/are-statistics-automatically-updated-when-a-new-index-is-created – Oliver