Tại sao chúng ta cần xây dựng lại và sắp xếp lại các Chỉ mục trong SQL Server


28

Sau khi tìm kiếm trên internet, tôi không thể tìm thấy lý do cho

  1. Tại sao chúng ta cần xây dựng lại và sắp xếp lại các chỉ mục trong SQL Server?

  2. Điều gì xảy ra trong nội bộ khi chúng ta xây dựng lại và tổ chức lại?

Một bài viết trên một trang web nói:

Chỉ số nên được xây dựng lại khi phân mảnh chỉ số lớn hơn 40%. Chỉ số nên được tổ chức lại khi phân mảnh chỉ số từ 10% đến 40%. Quá trình xây dựng lại chỉ mục sử dụng nhiều CPU hơn và nó khóa tài nguyên cơ sở dữ liệu. Phiên bản phát triển SQL Server và phiên bản Enterprise có tùy chọn TRỰC TUYẾN, có thể được bật khi Index được xây dựng lại. Tùy chọn TRỰC TUYẾN sẽ giữ chỉ mục có sẵn trong quá trình xây dựng lại.

Tôi không thể hiểu điều này, mặc dù nó nói rằng WHENđể làm điều này, nhưng tôi muốn biết WHYliệu chúng ta có cần xây dựng lại và sắp xếp lại các chỉ mục không?


1
Đây là câu hỏi về lý do tại sao, và đây là câu hỏi về khi nào .
Nick Chammas

Câu trả lời:


28

Khi bạn thực hiện chèn cập nhật và xóa, các chỉ mục của bạn sẽ bị phân mảnh cả bên trong và bên ngoài.

Phân mảnh nội bộ là bạn có tỷ lệ không gian trống cao trên các trang chỉ mục của mình, nghĩa là SQL Server cần đọc nhiều trang hơn khi quét chỉ mục.

Phân mảnh bên ngoài là khi các trang của chỉ mục không còn theo thứ tự nữa, vì vậy SQL Server phải thực hiện nhiều công việc hơn, đặc biệt là trong các thuật ngữ IO để đọc chỉ mục.

Nếu các chỉ mục của bạn trở nên quá phân mảnh, tốt nhất, các truy vấn của bạn sẽ kém hiệu quả hơn nhưng tệ nhất, SQL Server sẽ ngừng sử dụng tất cả các chỉ mục cùng nhau, nghĩa là hầu như tất cả các truy vấn sẽ phải thực hiện quét bảng hoặc quét chỉ mục theo cụm. Điều này sẽ làm tổn thương hiệu suất của bạn rất nhiều!

Khi bạn sắp xếp lại một chỉ mục, thì SQL Server sẽ sử dụng các trang chỉ mục hiện có và chỉ xáo trộn dữ liệu xung quanh các độ tuổi đó. Điều này sẽ làm giảm bớt sự phân mảnh bên trong và cũng có thể loại bỏ một lượng nhỏ phân mảnh bên ngoài. Đây là một hoạt động trọng lượng nhẹ hơn so với xây dựng lại và luôn luôn trực tuyến.

Khi bạn xây dựng lại một chỉ mục, SQL Server thực sự sử dụng dữ liệu của chỉ mục và sử dụng một bộ trang chỉ mục mới. Điều này rõ ràng sẽ làm giảm bớt sự phân mảnh bên trong và bên ngoài nhưng là một hoạt động có trọng lượng nặng hơn và theo mặc định làm cho chỉ mục ngoại tuyến, mặc dù nó có thể được thực hiện như một hoạt động trực tuyến, tùy thuộc vào phiên bản và cài đặt SQL Server của bạn.

Tuy nhiên, đừng mong đợi có 0 phân mảnh sau khi xây dựng lại. Trừ khi bạn sử dụng gợi ý truy vấn MAXDOP, SQL Server sẽ song song hóa hoạt động xây dựng lại và càng có nhiều bộ xử lý, thì càng có nhiều phân mảnh, bởi vì mỗi bộ xử lý hoặc lõi, sẽ xây dựng lại phần hoặc phân đoạn của riêng chúng, mà không quan tâm đến lẫn nhau. Đây là một sự đánh đổi giữa các mức phân mảnh tốt nhất và thời gian để xây dựng lại chỉ số. Để phân mảnh gần 0, sử dụng MAXDOP 1 và sắp xếp kết quả trong TempDB.


Tuyệt quá...! Đơn giản là giải thích ...!
DineshDB

0

Để loại bỏ phân mảnh gây ra các vấn đề như mức độ chậm của cơ sở dữ liệu / truy vấn chạy dài, v.v.

Để hiểu chi tiết về phân mảnh và cách xây dựng lại và sắp xếp lại các chỉ mục (hoặc sắp xếp lại các trang chỉ mục) hoạt động cho liên kết này dưới đây: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fraginating


1
Thông tin này đã trở nên (một phần) lỗi thời sau khi xem Tại sao phân mảnh chỉ mục không thành vấn đề
John aka hot2use
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.