Phân mảnh chỉ mục SQL Server là một nguyên nhân phổ biến làm giảm hiệu suất cơ sở dữ liệu. Phân mảnh xảy ra khi có nhiều không gian trống trên trang dữ liệu (phân mảnh bên trong) hoặc khi thứ tự lôgic của các trang trong chỉ mục không khớp với thứ tự vật lý của các trang trong tệp dữ liệu (phân mảnh bên ngoài).
Các vấn đề hiệu suất liên quan đến phân mảnh thường được quan sát thấy nhiều nhất khi thực hiện các truy vấn thực hiện quét chỉ mục. Các truy vấn thực hiện tìm kiếm chỉ mục có thể không bị ảnh hưởng bởi sự phân mảnh chỉ mục cao.
Hiểu các kiểu phân mảnh chỉ mục của SQL Server
Phân mảnh chỉ mục nội bộ
Phân mảnh nội bộ xảy ra khi các trang dữ liệu có quá nhiều dung lượng trống. Không gian bổ sung này được giới thiệu thông qua một số con đường khác nhau:
- SQL Server lưu trữ dữ liệu trên các trang 8KB. Vì vậy, khi bạn chèn ít hơn 8KB dữ liệu vào bảng, bạn sẽ để lại khoảng trống trên trang.
- Ngược lại, nếu bạn chèn nhiều dữ liệu hơn trang có không gian, phần dư thừa sẽ được chuyển đến một trang khác. Dữ liệu bổ sung không chắc sẽ lấp đầy các trang tiếp theo một cách hoàn hảo, vì vậy bạn lại để trống khoảng trống trên một trang.
- Khoảng trống trên trang dữ liệu cũng xảy ra khi dữ liệu bị xóa khỏi bảng.
Phân mảnh nội bộ chủ yếu gây ra các vấn đề về hiệu suất khi SQL Server thực hiện quét chỉ mục. Hiệu suất chậm lại khi SQL Server phải quét nhiều trang được lấp đầy một phần để tìm dữ liệu mà nó đang tìm kiếm.
Phân mảnh chỉ mục bên ngoài
Phân mảnh bên ngoài là kết quả của các trang dữ liệu không theo thứ tự. Điều này là do chèn hoặc cập nhật dữ liệu vào các trang đầy đủ. Khi dữ liệu được thêm vào một trang đầy đủ, SQL Server sẽ tạo một phần tách trang để chứa dữ liệu bổ sung và trang mới được tách khỏi trang gốc.
Phân mảnh bên ngoài gây ra các vấn đề về hiệu suất bằng cách tăng I / O ngẫu nhiên. Khi các trang không tuần tự, SQL Server phải đọc dữ liệu từ nhiều vị trí, điều này tốn nhiều thời gian hơn so với đọc theo thứ tự.
Cách tránh phân mảnh chỉ mục máy chủ SQL
Không thể ngăn chặn hoàn toàn việc phân mảnh chỉ mục, nhưng có nhiều cách để giảm thiểu sự xuất hiện của nó và giảm bớt ảnh hưởng của phân mảnh lên hiệu suất cơ sở dữ liệu. Dưới đây là một số điều nên làm và không nên để tránh phân mảnh chỉ mục SQL Server:
LÀM: Chọn các khóa cụm có giá trị ngày càng tăng hoặc giá trị ngày càng giảm. Điều này sẽ làm giảm sự chia tách trang bởi vì khi bạn chèn các bản ghi, chúng sẽ được đặt ở đầu hoặc cuối của chuỗi trang logic.
KHÔNG NÊN: Chèn các bản ghi với các giá trị khóa ngẫu nhiên. Chọn các giá trị khóa tĩnh để một khi bản ghi được đặt, nó sẽ không bao giờ phải di chuyển và không bị trật tự.
KHÔNG NÊN: Cập nhật hồ sơ để làm cho chúng dài hơn. Việc thêm bản ghi vào chỉ mục trong quá trình cập nhật có thể yêu cầu SQL Server đẩy một số dữ liệu sang trang mới. Điều này có thể dẫn đến các trang lá không tuần tự và cuối cùng là các vấn đề về hiệu suất.
KHÔNG NÊN: Cập nhật các cột chính của chỉ mục. Cập nhật cột chính yêu cầu xóa toàn bộ hàng, sau đó chèn toàn bộ hàng bằng giá trị khóa mới. Nếu hàng mới được chèn trên một trang mà không có đủ dung lượng, bạn sẽ bị tách trang.
LÀM: Hãy lưu ý các tính năng có thể gây chia tách trang. Hãy ghi nhớ kết quả cuối cùng tiềm năng của việc sửa đổi bất kỳ tính năng nào liên quan đến chỉ mục. Ví dụ:cập nhật các cột có độ rộng thay đổi (ngay cả trong các cột không phải là khóa) trong một chỉ mục được phân nhóm có thể gây ra hiện tượng tách trang.
LÀM: Thực hiện các yếu tố điền chỉ số thích hợp. Phân tích sự phân mảnh ở cài đặt hệ số lấp đầy mặc định và điều chỉnh khi cần thiết để giảm thiểu sự phân mảnh quá mức ở tải bình thường.
Cách khắc phục phân mảnh chỉ mục máy chủ SQL
Bởi vì ngăn chặn phân mảnh 100% thời gian là không thể, điều quan trọng là phải biết cách khắc phục phân mảnh chỉ mục SQL Server nếu hiệu suất đang bị ảnh hưởng.
Trước khi bạn có thể quyết định cách tiếp cận vấn đề phân mảnh chỉ mục SQL Server của mình, trước tiên bạn phải xác định mức độ sâu rộng của vấn đề mà bạn đang giải quyết.
Nơi tốt nhất để bắt đầu là sử dụng DMF sys.dm_db_index_physical_stats để phân tích mức độ phân mảnh của các chỉ mục của bạn. Khi bạn biết mức độ lan rộng của phân mảnh chỉ mục, bạn có thể lập kế hoạch tấn công của mình bằng một trong ba giải pháp:xây dựng lại chỉ mục, tổ chức lại chỉ mục hoặc không làm gì cả.
Tạo lại: Tạo lại chỉ mục khi phân mảnh đạt đến hơn 30 phần trăm.
Tổ chức lại: Tổ chức lại các chỉ mục với độ phân mảnh từ 11-30 phần trăm.
Bỏ qua: Mức độ phân mảnh từ 10 phần trăm trở xuống không gây ra vấn đề về hiệu suất, vì vậy bạn không cần phải làm gì cả.
Phân mảnh chỉ mục SQL Server là không thể tránh khỏi, nhưng bạn có thể giảm thiểu tác động tiêu cực của phân mảnh lên hiệu suất cơ sở dữ liệu. Thực hiện theo một số phương pháp hay nhất đơn giản và luôn cập nhật việc bảo trì theo lịch trình để giảm thiểu mọi vấn đề về hiệu suất liên quan đến phân mảnh lớn.