Bỏ chỉ số không sử dụng - Đánh giá những nguy hiểm bất ngờ


16

Chúng tôi có một cơ sở dữ liệu rất lớn với hàng trăm chỉ mục không được sử dụng theo thống kê của DMV, đã được tích lũy kể từ khi máy chủ được khởi động lại lần cuối vào tháng Bảy. Một trong những DBA của chúng tôi đã đưa ra những tuyên bố thận trọng sau đây, điều này không có ý nghĩa với tôi:

  1. Trước khi loại bỏ một chỉ mục, chúng ta cần đảm bảo nếu nó không thực thi một ràng buộc duy nhất, vì trình tối ưu hóa truy vấn có thể cần chỉ mục này tồn tại.
  2. Bất cứ khi nào một Chỉ mục được tạo, các số liệu thống kê liên quan đến chỉ mục đó cũng được tạo trong SQL Server. Một truy vấn có thể không sử dụng chỉ mục nhưng nó có thể đang sử dụng số liệu thống kê của nó. Vì vậy, chúng tôi có thể gặp phải một tình huống, sau khi bỏ chỉ mục, hiệu năng truy vấn cụ thể trở nên rất tệ. SQL Server không giữ số liệu thống kê sử dụng. Mặc dù chúng tôi đã bật tính năng Số liệu tự động tạo số liệu thống kê trên cơ sở dữ liệu của chúng tôi, tôi không biết tất cả các tham số phải được đáp ứng trong nội bộ trước khi trình tối ưu hóa truy vấn sẽ tạo ra số liệu thống kê còn thiếu.

Đối với # 1, đối với tôi, SQL Server thực sự sẽ tìm kiếm chỉ mục để xác định tính duy nhất trước khi thực hiện chèn / cập nhật và do đó, chỉ mục sẽ không hiển thị là không được sử dụng.

Về # 2, điều này thực sự có thể?

Nhân tiện, khi tôi nói một chỉ mục không được sử dụng, tôi có nghĩa là không tìm kiếm và không quét.


3
Tôi sẽ đề nghị bạn vô hiệu hóa chỉ mục khi bạn hoàn toàn chắc chắn rằng chỉ mục đó không được sử dụng ngay cả khi chạy các báo cáo cuối năm.
Kin Shah

Câu trả lời:


17

Mối quan tâm của DBA của bạn đều hợp lệ.

Đối với # 1, đối với tôi, SQL Server thực sự sẽ tìm kiếm chỉ mục để xác định tính duy nhất trước khi thực hiện chèn / cập nhật và do đó, chỉ mục sẽ không hiển thị là không được sử dụng.

Đảm bảo tính duy nhất có thể được sử dụng bởi trình tối ưu hóa trong việc quyết định các phép biến đổi logic hoặc hoạt động vật lý nào có thể được sử dụng để thu được kết quả chính xác. Ví dụ, thực tế là trình tối ưu hóa dựa trên sự bảo đảm duy nhất để chuyển đổi tập hợp hoặc chọn liên kết một-nhiều, sẽ không được phản ánh trong thống kê sử dụng chỉ mục, trừ khi chỉ mục cũng được truy cập vật lý trong kế hoạch thực hiện cuối cùng . Do đó, người ta phải rất cẩn thận về việc loại bỏ (hoặc vô hiệu hóa) bất kỳ chỉ mục hoặc ràng buộc duy nhất nào.

Về # 2, điều này thực sự có thể?

Có, trình tối ưu hóa có thể sử dụng số liệu thống kê được liên kết với một chỉ mục mà không có kế hoạch thực hiện cuối cùng có bất kỳ quyền truy cập nào sử dụng chỉ mục đó. Các quy trình tải số liệu thống kê 'thú vị', tính toán ước tính cardinality và tạo ra một kế hoạch thực hiện đã hoàn thành là các hoạt động khá độc lập.

Việc bỏ chỉ mục cũng sẽ loại bỏ các thống kê chỉ số liên quan, điều này có thể ảnh hưởng đến chất lượng kế hoạch vào lần tới khi tuyên bố được biên dịch lại. Số liệu thống kê chỉ số có thể được sử dụng trong tính toán ước tính số lượng mà kế hoạch cuối cùng dựa vào, ngay cả khi chỉ số không có mặt thực tế trong kế hoạch cuối cùng.

DBA của bạn biết công cụ của anh ấy / cô ấy.

Không nên làm điều này có nghĩa là các chỉ mục rõ ràng không được sử dụng sẽ không bao giờ bị xóa. Tôi chỉ đơn giản nói rằng mối quan tâm của DBA của bạn là hợp lệ và bạn nên lập kế hoạch thay đổi theo chúng, với thử nghiệm phù hợp và kế hoạch khôi phục. Theo kinh nghiệm của tôi, điểm # 1 có nhiều khả năng có vấn đề hơn so với # 2, nhưng tôi không có cách nào để biết liệu điều đó có áp dụng cho tình huống của bạn hay không.

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.