Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Brent Ozar giải thích sự phân mảnh bên trong và bên ngoài của SQL Server

Theo Bậc thầy Microsoft SQL, Brent Ozar, anh ấy đã đưa ra một số quyết định điều chỉnh hiệu suất cơ sở dữ liệu khủng khiếp trong suốt sự nghiệp của mình. May mắn cho chúng tôi, chúng tôi có thể hưởng lợi từ những sai lầm của anh ấy và không phải tự mình tìm hiểu mọi thứ. Anh ấy đã chia sẻ miễn phí sự khôn ngoan kiếm được của mình trong chuỗi video trên web về Ngày đào tạo cơ sở dữ liệu của Quest.

Trong một trong các phiên của anh ấy, chúng tôi đã học được “Tại sao việc chống phân mảnh các chỉ mục của bạn lại không hữu ích”. Trên thực tế, nó có thể làm cho hiệu suất cơ sở dữ liệu của bạn tồi tệ hơn và Brent đã cho chúng tôi biết lý do tại sao. Đồng thời, anh ấy nhấn mạnh tầm quan trọng của việc biết những gì bạn đang đo lường khi nói đến việc tối ưu hóa hiệu suất SQL Server.

Phân mảnh bên trong so với bên ngoài

Brent đã hướng dẫn nhanh cho chúng tôi về cách SQL Server lưu trữ dữ liệu trong các “trang” 8 KB. Trong một chỉ mục mới hoặc được xây dựng lại, các trang đều đầy đủ và được lưu trữ theo thứ tự. Tuy nhiên, khi nhiều dữ liệu được thêm vào, các trang bị tách ra:không phải tất cả các trang đều đầy và chúng xảy ra không theo thứ tự. Đây là sự khác biệt quan trọng giữa phân mảnh bên trong và bên ngoài:

  • Phân mảnh bên ngoài - đề cập đến các trang không theo thứ tự
  • Phân mảnh nội bộ - đề cập đến không gian trống trên một trang

Tập trung ít phân tách trên trang hơn

Nhiều chuyên gia cơ sở dữ liệu tập trung vào việc phân chia trang như một thước đo phân mảnh cơ sở dữ liệu, tuy nhiên, Brent giải thích rằng con số này là vô nghĩa vì sự phân chia trang xảy ra cả khi thêm một hàng mới vào một bảng trống và khi thêm một trang mới. Vì vậy, nó không hữu ích gì cả.

Sự phân mảnh bên ngoài có thể khiến mọi thứ tồi tệ hơn như thế nào

Trong phiên này, Brent khẳng định rằng phân mảnh bên ngoài không phải là thước đo hữu ích về hiệu suất cơ sở dữ liệu vì thứ tự trang không có nhiều tác động đến tốc độ của các tác vụ bảo trì, chạy truy vấn trong RAM hoặc đọc dữ liệu từ đĩa. Vì vậy, các chuyên gia cơ sở dữ liệu cố gắng khắc phục sự phân mảnh bên ngoài bằng cách tổ chức lại và xây dựng lại các chỉ mục đang thực sự làm cho hiệu suất kém hơn bằng cách tăng cường sao lưu và sử dụng nhiều thời gian cửa sổ bảo trì hơn.

Các chuyên gia cơ sở dữ liệu cố gắng giảm sự phân mảnh bên ngoài bằng cách để lại khoảng trống trên các trang thông qua việc đặt hệ số lấp đầy cũng đang gây ra sự cố tồi tệ hơn sự cố mà họ đang cố gắng khắc phục. Điều này phần lớn là do bạn hầu như không bao giờ phải chèn dữ liệu vào một điểm giữa chừng trong chỉ mục. Vì vậy, cố gắng giữ cho các trang có thứ tự bằng cách đặt ít dữ liệu hơn trên mỗi trang riêng lẻ thực sự gây ra sự phân mảnh nội bộ.

Theo dõi thời gian chờ

Thay vào đó bạn nên làm gì? Brent khuyên bạn nên đặt hệ số lấp đầy thành mặc định là 100% (hoặc ít nhất là 80% hoặc cao hơn) và sau đó xây dựng lại các chỉ mục để đóng gói chúng lại. Tiếp theo, hãy tập trung theo dõi số điều chỉnh hiệu suất phù hợp - thời gian chờ. Một trong những cách tốt nhất để xem các khía cạnh khác nhau của thời gian chờ trên các phiên bản cơ sở dữ liệu của bạn là sử dụng công cụ giám sát hiệu suất để xác định chính xác vị trí các quy trình đang gặp lỗi.

Để biết thêm thông tin chi tiết của Brent về phân mảnh chỉ mục, thống kê thời gian chờ và những việc bạn nên làm về duy trì chỉ mục, hãy nghe webcast theo yêu cầu.

Bạn cũng có thể nhận thêm lời khuyên của chuyên gia về hiệu suất cơ sở dữ liệu thông qua Ngày đào tạo cơ sở dữ liệu của Quest.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ưu và nhược điểm của việc sử dụng SqlCommand Chuẩn bị trong C #?

  2. Cách phân tích hoạt động của một cơ sở dữ liệu trong SQL Server

  3. Cách bao gồm các kết quả gắn với vị trí cuối cùng khi sử dụng mệnh đề TOP trong SQL Server

  4. Chức năng định dạng ngày của SQL Server

  5. PARSE () so với CAST () so với CONVERT () trong SQL Server:Sự khác biệt là gì?