2011-10-14 35 views
19

Tôi có 10 quy trình được lưu trữ như sau: SP1, SP2, ....., SP10 Các thủ tục được lưu trữ này thực hiện một số nội dung. Tôi cần phải thực hiện các thủ tục sau: EXECUTE SP1; EXECUTE SP2; ... EXECUTE SP10;Làm thế nào để tìm thấy thủ tục lưu trữ thời gian thực hiện trong SQL Server?

Khi máy chủ SQL finshes để hoàn thành thực hiện các thủ tục này, nó cung cấp cho mười dòng hiển thị bất kỳ thay đổi hàng nào gây ra bởi tất cả các thủ tục được lưu trữ này. Những gì tôi muốn làm là sau khi thực hiện tất cả các thủ tục lưu sẵn SQL Server cũng đưa ra trong cửa sổ đầu ra thời gian thực hiện cho mỗi thủ tục lưu trữ. Tôi có thể làm điều này không? Tôi chắc chắn rằng để đạt được nhiệm vụ này tôi cần phải sửa đổi thủ tục được lưu trữ nhưng tôi không có bất kỳ ý tưởng làm thế nào để làm điều đó ... Xin hãy giúp tôi. Cảm ơn.

+1

Bạn gọi thủ tục được lưu trữ từ ứng dụng được viết tùy chỉnh của bạn? Nếu có, ngôn ngữ nào? – Koekiebox

Trả lời

13

Bạn có thể sử dụng Sql Server Profiler cho mục đích này, nó cung cấp nhiều thông tin hữu ích dọc theo từng mục được thực thi truy vấn và lưu trữ thủ tục là tốt.

MSDN: SQL Profiler Data Columns

SQL Profiler sẽ hiển thị thời gian thực hiện cho mỗi sự kiện

Một cách khác đơn giản:

  1. DECLARE 2 biến datetime: bắt đầu/kết thúc
  2. SET bắt đầu = GETDATE()
  3. EXEC SP_NAME
  4. SET cuối = getdate()
  5. Thực hiện thời gian - sự khác biệt giữa kết thúc và bắt đầu
0

capture and display execution time

sử dụng hai tham số của datetime loại và thiết lập một cách sử dụng getdate() trước khi bắt đầu tsql trong thủ tục lưu trữ

và thiết lập thứ hai sử dụng getdate() sau tsql và cuối cùng là sử dụng datediff chức năng để có được sự khác biệt

20

Giả sử studio quản lý hoặc một số môi trường khác với một cửa sổ ra bạn có thể;

SET STATISTICS TIME ON 
EXEC SP1 
EXEC SP2 
... 
SET STATISTICS TIME OFF 
3

Có nhiều cách để làm công cụ này sử dụng như SQL Server Profiler, nhưng một cách đơn giản là chạy mỗi proc bao quanh với một dòng để in thời điểm đó:

print convert(varchar, getdate(), 21) 
EXEC PROC SP1 
print convert(varchar, getdate(), 21) 
+0

tại sao bạn sẽ chuyển đổi sang varchar ??? Về cơ bản những gì bạn nên làm là lấy sự khác biệt millisecond từ trước và sau khi chạy thủ tục –

+0

Đơn giản chỉ để bạn có thể nhận được một đầu ra định dạng như '2011-10-14 12: 32: 39.403'.Để nó như datetime sẽ không nhất thiết cung cấp cho bạn mili giây, và báo cáo _only_ sự khác biệt mất dữ liệu phụ của ** khi ** nó được chạy, trong trường hợp nó không được giám sát. – Widor

+0

cảm ơn ... hầu hết các phương pháp đều hoạt động !!! – Azeem

4
declare @start datetime = getdate() 

-- your SQL statements 
exec dbo.MyStoredProcedure 

declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate()) 
Các vấn đề liên quan