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

Gói điều chỉnh Spotlight Cơ bản:Công cụ tối ưu hóa SQL miễn phí tốt nhất

Nó luôn được khuyến khích khi viết truy vấn hoặc mã cơ sở dữ liệu SQL Server (thủ tục và dạng xem) để lưu ý về kế hoạch thực thi. Cái này có một vài nguyên nhân. Thứ nhất - trình tối ưu hóa có thể đang chọn một kế hoạch mà bạn không mong đợi. Ví dụ:quét chỉ mục một bảng lớn trước khi khớp với một bảng nhỏ hơn. Thứ hai - cần xem xét cách truy vấn này sẽ hoạt động như thế nào trong những tháng hoặc năm tới nếu các truy vấn đang chạy trong một hệ thống mới với các bảng nhỏ sẽ phát triển. Và cuối cùng nhưng quan trọng nhất, truy vấn này nhanh như thế nào và nó sử dụng bao nhiêu tài nguyên. Điểm cuối cùng có vẻ không quan trọng lắm, bạn có thể nghĩ chỉ cần mất ít hơn 3 giây là đủ tốt, nhưng nếu nó có thể chạy trong <1 giây thì không phải là tốt hơn sao? Nếu cơ sở dữ liệu của bạn được lưu trữ trên nền tảng đám mây, việc giảm bớt tài nguyên cũng có thể giúp bạn tiết kiệm tiền.

Rất nhiều trường hợp tối ưu hóa SQL thường xuất phát từ một sự cố được phát hiện bởi người dùng cuối hoặc phần mềm giám sát của bạn. “Tại sao báo cáo này mất 30 phút để tạo?”, “Điều gì đang gây ra sự gia tăng đột biến trong thời gian chờ I / O” hoặc “Tại sao những công việc này lại mất thời gian chạy gấp đôi so với năm ngoái?”

Trong tất cả các tình huống này, nó vẫn cần một số kiến ​​thức về kế hoạch thực thi và cách tốt nhất để sửa lỗi SQL để cải thiện tình hình và điều này có thể rất tốn thời gian và không phải lúc nào cũng thành công.

Hãy lấy một ví dụ. Vì vậy, bạn đang viết một truy vấn mới, thực thi nó, và sau đó nghĩ rằng, quá trình này mất quá nhiều thời gian.

17 giây cho 730 hàng, tôi nên làm gì?

Trước tiên, hãy xem lại kế hoạch thực hiện:

Điều này không phải lúc nào cũng diễn ra thẳng thắn nếu bạn phải phóng to và thu nhỏ để hiểu nó. Vì vậy, lời khuyên đầu tiên là bạn nên có một trình xem kế hoạch tốt, chẳng hạn như trình xem này với Gói tinh chỉnh Spotlight.

Trình xem kế hoạch làm nổi bật các bit thông tin chính mà chúng tôi cần và vị trí của các hoạt động chính cũng như làm nổi bật bất kỳ cảnh báo nào.

Đây là một ví dụ:

Vì vậy, đã xảy ra sự cố với mã này, nhưng chúng tôi có thể làm gì với nó?

Chà, thực ra là khá nhiều. Chúng tôi có thể sử dụng gợi ý truy vấn, xem xét thêm một số chỉ mục (đừng quên điều này có thể ảnh hưởng đến các truy vấn khác và DML), thêm các bit mã không thay đổi tập kết quả nhưng ảnh hưởng đến trình tối ưu hóa để tạo ra một kế hoạch khác và một số thủ thuật nhỏ để dừng trình tối ưu hóa khi xem xét một chỉ mục cụ thể mà nó đang sử dụng và có thể tạo một kế hoạch mới. Nhưng đây là tất cả thử nghiệm và lỗi và rất tốn thời gian để thực hiện thủ công.

Bằng cách thêm ứng dụng Tiện ích mở rộng Spotlight vào SSMS và đăng ký Gói điều chỉnh Spotlight, chúng tôi có thể để tính năng tối ưu hóa trong Gói điều chỉnh thực hiện tất cả công việc khó khăn cho chúng tôi.

Bạn có thể nhận thấy trong ảnh chụp màn hình đầu tiên rằng khi tính năng này được bật, nó sẽ tự động phát hiện rằng có thể tối ưu hóa:

Nhấp vào Xem phân tích

Sau đó, bạn có thể nhấp vào nút Tối ưu hóa và công cụ tối ưu hóa sẽ phân tích mã và bắt đầu áp dụng các quy tắc viết lại sẽ thay đổi cú pháp của SQL đưa ra các lựa chọn thay thế cung cấp cùng một tập kết quả và sau đó kiểm tra chúng để chúng tôi có thể xem có bất kỳ thực thi thay thế nào không kế hoạch nhanh hơn và tại sao. Các quy tắc được áp dụng kết hợp để các lựa chọn thay thế khả thi có thể trên 100. Tuy nhiên, công cụ chỉ hiển thị cho bạn các lựa chọn thay thế nhanh hơn so với ban đầu.

Quá trình này chạy ở chế độ nền và giúp bạn tiết kiệm rất nhiều thời gian nếu bạn cố gắng thực hiện việc này theo cách thủ công.

Và khi kết quả được hiển thị, bạn có thể so sánh các lựa chọn thay thế, xem sự khác biệt về mã, so sánh các kế hoạch và xem xét thống kê.

Vì vậy, hãy quay lại SSMS với phiên bản truy vấn mới của tôi và kiểm tra nó.

Thành công.

Nếu đây là trong môi trường phát triển, bạn có thể muốn xem xét xóa bộ đệm đệm bằng cách sử dụng DBCC DROPCLEANBUFFERS, để kiểm tra các truy vấn của bạn với bộ đệm lạnh mà không cần tắt và khởi động lại máy chủ.

Ngoài ra, hãy xem xét thêm ĐẶT THỐNG KÊ IO ON vào truy vấn để biết thêm thông tin về lý do tại sao cú pháp truy vấn lại tạo ra sự khác biệt:

Bản gốc:

Viết lại:

Và điều này cũng có thể đạt được trong Gói điều chỉnh với tính năng so sánh thống kê:

Vì vậy, với sự thay đổi thành công và người dùng cuối hài lòng, hãy chuyển sang truy vấn tiếp theo. Bằng cách liên tục cải thiện hiệu suất của các truy vấn riêng lẻ, chúng tôi cải thiện hiệu suất của phiên bản.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đặt ngôn ngữ hiện tại trong SQL Server (T-SQL)

  2. Làm cách nào để phát hiện và ràng buộc các thay đổi giữa các giá trị hàng trong bảng SQL?

  3. Tạo CHẾ ĐỘ XEM được tham số hóa trong SQL Server 2008

  4. Khi nào tôi nên sử dụng biến bảng so với bảng tạm thời trong máy chủ sql?

  5. So sánh các ngày được lưu trữ dưới dạng varchar