Đầu tiên, điều quan trọng là xem xét liệu phân mảnh có vấn đề.
Nếu truy vấn của bạn chỉ thực hiện tìm kiếm một hàng, bạn có thể không nhận thấy sự phân mảnh nào cả. Trên các SAN hiện đại, bộ nhớ đệm cấp SAN có thể tạo ra các IO thực vật đủ nhanh để phân mảnh không thành vấn đề. Trên SSD, mẫu IO ngẫu nhiên do quét chỉ mục bị phân mảnh thực sự có thể mang lại hiệu suất tốt hơn so với dữ liệu không bị phân mảnh.
Thông thường, mọi người nhận thấy rằng việc xây dựng lại một chỉ mục đã khắc phục vấn đề về hiệu năng. Xây dựng lại một chỉ số cũng xây dựng số liệu thống kê mới. Nó có thể là trường hợp sửa chữa thực sự là số liệu thống kê mới, không xây dựng lại chỉ mục. UPDATE STATISTICS...WITH FULLSCAN
có thể là một cách rẻ hơn, nhanh hơn, ít xâm phạm hơn để giải quyết vấn đề hiệu suất tương tự.
Nếu bạn không gặp vấn đề do phân mảnh, thì bạn có thể dành thời gian và công sức đáng kể để không có lợi ích thực sự.
Thứ hai, có hai loại phân mảnh:
Sự phân mảnh vật lý. Đây là những gì hầu hết mọi người nghĩ về khi họ nghĩ về sự phân mảnh. Các trang bị lỗi, và cần phải được sắp xếp lại. Khi quét một chỉ mục, loại phân mảnh này đôi khi có thể là một vấn đề. Tôi thường nhận thấy điều này có tác động lớn nhất đến hiệu suất với các lần đọc vật lý . Nếu bạn đang xem kết quả từ sys.dm_db_index_physical_stats
, con số này là avg_fragmentation_in_percent
cột.
Phân mảnh mật độ thấp. Sự phân mảnh này được gây ra bởi các trang chỉ chứa một phần dữ liệu. Bạn có mật độ dữ liệu thấp vì dữ liệu của bạn được trải rộng trên nhiều trang hơn mức cần thiết. Do đó, việc đọc dữ liệu đòi hỏi nhiều IO hơn vì dữ liệu được trải rộng trên nhiều trang hơn mức cần thiết. Điều này có thể ảnh hưởng đến cả việc đọc logic và vật lý. Nếu bạn đang xem kết quả từ sys.dm_db_index_physical_stats
, con số này là avg_page_space_used_in_percent
cột. Cột này chỉ được điền khi sử dụng SAMPLED
hoặc DETAILED
chế độ.
Vậy bạn sẽ làm gì với nó:
Phân mảnh vật lý : Nếu bạn chỉ đơn giản là theo đuổi số lượng cao avg_fragmentation_in_percent
, hãy thực sự cân nhắc nếu bạn đang lãng phí thời gian. Đảm bảo rằng bạn có một truy vấn thực tế hoạt động kém và sử dụng môi trường kiểm tra để xác nhận rằng bạn đang khắc phục sự cố bằng cách loại bỏ phân mảnh.
Bạn có thể giải quyết sự phân mảnh vật lý bằng cách làm ALTER INDEX...REORGANIZE
. Các REORGANIZE
hoạt động trực tuyến, di chuyển các trang cùng một lúc sắp xếp lại cho trở lại vào thứ tự vật lý. Nếu bạn giết một REORGANIZE
phần của câu lệnh, bất kỳ tác phẩm nào đã được thực hiện đều được duy trì - chỉ một trang hiện đang được di chuyển sẽ được khôi phục. Thực hiện REORGANIZE
trên một bảng lớn bị phân mảnh cao có thể cần nhiều không gian nhật ký giao dịch hơn và trong chế độ khôi phục hoàn toàn có thể tạo ra một số lượng đáng kể các bản sao lưu nhật ký giao dịch. Nó cũng có thể mất nhiều thời gian hơn cho REORGANIZE
một chỉ số phân mảnh cao hơn so với REBUILD
nó.
Bạn sẽ thường thấy lời khuyên để thực hiện một REBUILD
chỉ số phân mảnh cao, thay vì một REORGANIZE
- Điều này là do việc xây dựng lại từ đầu có thể hiệu quả hơn. Tuy nhiên, sắp xếp lại có thể là một hoạt động "trực tuyến hơn" và đôi khi được ưa thích, ngay cả đối với các chỉ mục bị phân mảnh cao.
Phân mảnh mật độ thấp không thể được cố định bởi REORGANIZE
. Nó chỉ có thể được sửa chữa bằng cách làm một ALTER INDEX...REBUILD
. Bằng cách thực hiện chỉ mục với ONLINE=ON
, bạn sẽ có thể giảm thiểu chặn. Tuy nhiên, REBUILD
vẫn cần phải khóa trong giây lát để trao đổi chỉ mục cũ cho chỉ mục mới. Trên một hệ thống rất bận rộn, việc đạt được khóa độc quyền này đôi khi có thể là một vấn đề. Bạn sẽ có thể xác nhận nếu bạn gặp phải vấn đề này bằng cách sử dụng một cái gì đó như sp_whoisactive để kiểm tra chặn trong quá trình xây dựng lại của bạn và xem chi tiết về các khóa và chờ đợi. Sử dụng WAIT_AT_LOW_PRIORITY
tùy chọn có thể hữu ích nếu bạn biết rằng có một giai đoạn sử dụng thấp sắp tới và việc xây dựng lại của bạn có thể "lẻn" vào trao đổi này khi hoạt động giảm xuống đủ thấp để đạt được khóa đó. Lưu ý rằng chạy dàiREBUILD
hoạt động cũng sẽ là một giao dịch mở dài hạn. Các giao dịch mở dài hạn có thể có vấn đề riêng của họ, liên quan đến việc sử dụng / tái sử dụng nhật ký giao dịch. Nếu bạn đang sử dụng phản chiếu hoặc Nhóm sẵn có, cũng có những cân nhắc cho việc làm lại nhật ký giao dịch trên bản sao thứ cấp.
REORGANIZE
sẽ làm giảm phân mảnh trang lá và không gian nhỏ gọn như thếREBUILD
, chỉ kém hiệu quả. Bạn có chắc chắn kích thước lớn là do sự phân mảnh? Các yếu tố điền là gì?