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

Cách xác định những gì đang biên dịch trong SQL Server

Trước đây, khi tôi phải xem xét các vấn đề với bộ nhớ đệm kế hoạch / biên dịch lại truy vấn quá mức, tôi đã làm theo hướng dẫn được cung cấp trong whitepaper của Microsoft 'Plan Caching trong SQL Server 2008' và tôi thực sự khuyên bạn nên đọc nó vì nó bao gồm kế hoạch lưu vào bộ nhớ đệm, tái sử dụng kế hoạch truy vấn, nguyên nhân của việc biên dịch lại, xác định bản biên dịch lại và các chủ đề liên quan khác.

Như đã nói, SQL Server Profiler (Nên nằm trong Microsoft SQL Server 2008 -> Performance Tools nếu bạn đã cài đặt nó như một phần của cài đặt công cụ máy khách của mình) trình bày ba sự kiện liên quan trực tiếp đến biên dịch truy vấn có thể hữu ích cho bạn:

  • Con trỏ
    • CursorRecompile
  • Hiệu suất
    • Showplan XML cho biên dịch truy vấn
  • Thủ tục được Lưu trữ
    • SP:Biên dịch lại

Bạn đang sử dụng Quy trình được lưu trữ nên có thể bạn chỉ cần lo lắng về SP:Biên dịch lại biến cố. Sự kiện này sẽ kích hoạt bất kỳ khi nào một thủ tục được lưu trữ, trình kích hoạt hoặc chức năng do người dùng xác định đã được biên dịch lại. Cột TextData sẽ hiển thị văn bản của câu lệnh tsql đã gây ra việc biên dịch lại câu lệnh và cột EventSubClass sẽ hiển thị một đoạn mã cho biết lý do biên dịch lại.

Mã EventSubClass cho SP:Biên dịch lại trong SQL 2008

  • 1 =Lược đồ đã thay đổi
  • 2 =Thống kê đã Thay đổi
  • 3 =Biên dịch lại DNR
  • 4 =Đặt tùy chọn đã thay đổi
  • 5 =Bảng Nhiệt độ đã Thay đổi
  • 6 =Bộ Rowset Từ xa đã Thay đổi
  • 7 =Đối với các quyền duyệt đã được thay đổi
  • 8 =Môi trường Thông báo Truy vấn đã Thay đổi
  • 9 =Chế độ xem MPI đã thay đổi
  • 10 =Tùy chọn con trỏ đã thay đổi
  • 11 =Với tùy chọn biên dịch lại

Nếu bạn theo dõi 5 sự kiện sau, bạn sẽ có thể thấy thủ tục và câu lệnh được lưu trữ nào đang được gọi trên SQL Server và những sự kiện nào đang kích hoạt biên dịch lại:

  • Quy trình Lưu trữ
    • SP:Đang bắt đầu
    • SP:StmtStarting
    • SP:Biên dịch lại
    • SP:Đã hoàn thành
  • Hiệu suất
    • Số liệu thống kê Tự động

Tôi cũng thường thiết lập theo dõi Hồ sơ để nắm bắt tất cả các cột cho các sự kiện đó. Tôi sẽ nói rằng thiết lập một dấu vết với 5 sự kiện đó, chạy một dấu vết trong 30 đến 60 giây và sau đó tạm dừng nó và sau đó bạn sẽ có một ảnh chụp nhanh về những gì đang gây ra các biên dịch lại.

Nếu có quá nhiều nhiễu, bạn có thể bắt đầu thêm bộ lọc cột vào thuộc tính theo dõi để lọc các sự kiện vào / ra. Ví dụ:nếu bạn thấy hầu hết các lần biên dịch lại của mình chỉ xảy ra trên cơ sở dữ liệu một lần, hãy thiết lập bộ lọc cột trên cột databaseID hoặc databaseName để chỉ các truy vấn chạy trên cơ sở dữ liệu đó được đưa vào dấu vết của bạn.

Sau đó, bắt đầu tìm kiếm các mẫu trong đó các truy vấn đang được biên dịch lại và sử dụng sách trắng của Microsoft như một hướng dẫn về lý do tại sao chúng có thể kích hoạt biên dịch lại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. <table-value function> không phải là tên hàm tích hợp sẵn được công nhận

  2. Chuyển phân vùng bảng trong SQL Server:Hướng dẫn

  3. Tại sao thực thi các thủ tục được lưu trữ nhanh hơn truy vấn SQL từ một tập lệnh?

  4. Không thể mở thiết bị sao lưu. Hệ điều hành lỗi 5

  5. SQL Server Các hàng tối đa có thể được chèn trong một trạng thái chèn duy nhất