2011-06-27 32 views
12

Tôi đang khắc phục sự cố một ứng dụng sử dụng cơ sở dữ liệu SQL Server và tôi thấy rất nhiều cuộc gọi sp_execute.Xem SQL được chuẩn bị với sp_prepare

Tôi dường như không thể tìm thấy các cuộc gọi sp_prepare.

Làm cách nào bạn có thể kiểm tra tất cả các câu lệnh SQL đã chuẩn bị trong bộ nhớ?

+0

Bạn có thực sự sử dụng các hồ sơ sql? – Rodrigo

+0

Nó sẽ là [tình trạng bình thường/mong muốn] (http://www.sql-server-performance.com/forum/threads/sp_prepare-and-sp_execute.14685/) để có nhiều lệnh gọi 'sp_execute' hơn các tệp theo dõi so với các cuộc gọi 'sp_prepare'. Đối với việc tìm kiếm (tham số) SQL gắn với xử lý chuẩn bị, tôi sẽ xem xét thông qua các lược đồ của các bảng hệ thống SQL Server cho các cột có tên là "xử lý" hoặc "kế hoạch truy vấn" các loại sự vật. – hardmath

Trả lời

2

Theo dõi trên nhận xét của tôi ở trên, tôi tìm thấy một số liên kết có liên quan:

How can I find out what command sp_execute is running (without using Profiler)

SP_EXECUTE executing... what?

See the query in sp_execute

Microsoft có tài liệu nhưng nó có thể là một bức thách thức mọi thứ với nhau (như mọi khi). Nếu xử lý kế hoạch được biết đến, bạn có thể sử dụng này:

sys.dm_exec_sql_text (Transact-SQL)

Đây là một chức năng bảng giá trị. Bạn có thể xem a blog article here khai thác các hàm có giá trị bảng như vậy để truy xuất các phụ thuộc đối tượng cho một xử lý hợp lệ của một kế hoạch được biên dịch (đã chuẩn bị).

13

Tôi đang tìm cách xem các câu lệnh SQL thực tế được thực hiện bởi sp_execute trong SQL Server 2008 R2 Profiler.

Để thực hiện việc này, tôi đã tạo một dấu vết mới và nhấp vào tab "Lựa chọn sự kiện". Tôi đã chọn "Hiển thị tất cả các sự kiện" và kiểm tra Thủ tục được lưu trữ> SP: StmtCompleted. Chạy theo dõi, sau đó tôi có thể thấy các câu lệnh SQL thực tế.

4

Tôi cũng gặp sự cố này. SQL Profiler không nắm bắt được tuyên bố sp_prepare vì nó xảy ra trước khi theo dõi SQL Profiler đã bắt đầu chạy. Các bài đăng khác nhau dựa trên sys.dm_exec_sql_text không hữu ích vì tôi không thể tìm thấy giá trị sql_handle hoặc plan_handle chính xác để cung cấp cho quy trình được lưu trữ đó.

Tôi tìm thấy một giải pháp từ this blog post: trong SQL Profiler, nhấp vào "Hiển thị tất cả các sự kiện" hộp kiểm và sau đó theo "Stored Procedure" nhóm chọn "SP: CacheHit".

Trong các kết quả đầu ra SQL Profiler, bạn sẽ thấy một "SP: CacheHit" hàng chứa tuyên bố cache SQL gần bạn "RPC: Bắt đầu từ ... sp_execute" tuyên bố.

Sau đó bạn có thể tái tạo lại và reexecute các câu lệnh SQL đầy đủ trong SSMS xem bạn có muốn sử dụng:

exec sp_executesql @stmt=N'{statement from SP:CacheHit}', 
    @params=N'{parameter declaration from SP:CacheHit}', 
    @param1={value}, {...parameters from RPC:Starting sp_execute statement} 
Các vấn đề liên quan