SQL Server Management Studio, làm thế nào để giảm thời gian thực hiện xuống còn mili giây


220

Khi tôi gửi một lô (ví dụ: thực hiện truy vấn) trong SSMS, tôi thấy thời gian cần thiết để thực thi trên thanh trạng thái. Có thể định cấu hình SSMS để hiển thị thời gian truy vấn với độ phân giải mili giây không?

Đây là thanh tôi đang nói đến với phần quan tâm được khoanh tròn màu đỏ:

nhập mô tả hình ảnh ở đây


3
Không thực sự trả lời câu hỏi của bạn, nhưng bạn có thể sử dụng SQL Server Profiler (công cụ ghi nhật ký) để kiểm tra thời lượng truy vấn của bạn. Thời lượng được đo bằng mili giây.
AGuyCalledGerald 29/212

Câu trả lời:


66

Tôi đã vật lộn với điều đó cho đến khi tôi tìm thấy ...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-manloyment-studio-and-client-statistic/

Ngoài ra, nếu bạn mở cửa sổ Thuộc tính, bạn có thể tìm thấy một số "Thời gian trôi qua kết nối" kỳ diệu có thể cho bạn một chút thời gian thực hiện ... Hy vọng nó sẽ giúp ...


18
Phần liên quan đến cửa sổ Properties thực sự là câu trả lời cho chủ đề này. "Thời gian trôi qua" đang ngồi đó nhìn chằm chằm vào mặt bạn.
Eric

Và tôi hiện đang đặt câu trả lời này là câu trả lời được chấp nhận, vì nó là chính xác nhất.
Michael Goldshteyn

363

Những gì bạn muốn làm là đây:

set statistics time on

-- your query

set statistics time off

Điều đó sẽ có đầu ra trông giống như thế này trong cửa sổ Tin nhắn của bạn:

Thời gian thực hiện của máy chủ SQL: Thời gian CPU = 6 ms, thời gian trôi qua = 6 ms.


1
Nhưng điều này đặt thời gian trong cửa sổ Tin nhắn, có nghĩa là tôi phải tự lật nó sau khi thực hiện truy vấn. Ngoài ra, kết quả dường như không có ý nghĩa, ví dụ: thời gian CPU = 1357 ms, thời gian trôi qua = 169 ms. Làm thế nào mà cộng lại, ngay cả khi tôi có 8 lõi với siêu phân luồng (tức là 16 ảo)?
Michael Goldshteyn

2
@MichaelGoldshteyn vì lý do tại sao thời gian CPU của bạn lớn hơn, đó là vì bạn có CPU đa lõi hoặc siêu phân luồng.

25
@MichaelGoldshteyn 1357/8 = 169.625. Sự trùng hợp?
Dan J

3
@DanJ, ​​DB không làm mọi thứ từ bộ nhớ. Thường thì I / O có liên quan và I / O có nghĩa là thời gian trôi qua nhiều hơn.
Michael Goldshteyn

9
@binki Bạn nói đúng rằng nhận xét 1,555 ngày tuổi của tôi là không chính xác.
benizi

125

Bật Thống kê khách hàng bằng cách thực hiện một trong các thao tác sau:

  • Menu: Truy vấn> Bao gồm Thống kê khách hàng
  • Thanh công cụ: Nhấp vào nút (bên cạnh Bao gồm thời gian thực hiện thực tế)
  • Bàn phím: Shift-Alt-S

Sau đó, bạn nhận được một tab mới ghi lại thời gian, dữ liệu IO và số lượng hàng, v.v cho (tối đa) 10 lần xuất hiện gần nhất (cộng trung bình!):

nhập mô tả hình ảnh ở đây


Nó giống như câu trả lời của @Ymagine First từ tháng 11 năm 2012. Xem câu trả lời ở trên ...
Bogdan Bogdanov

Trang web đó (trớ trêu thay) có lỗi SQL vào thời điểm đó, vì vậy tôi đã trích xuất thông tin chính từ bộ đệm Google và đăng dưới dạng câu trả lời mới. Tôi không có ý định đánh cắp tín dụng và có lẽ tôi nên chỉnh sửa câu trả lời ban đầu.
NickG

Trên thực tế, có vẻ như tôi không có đủ điểm rep để chỉnh sửa câu hỏi, vì vậy đó có thể là lý do tại sao tôi không làm điều đó.
NickG

3
FYI các đơn vị cho Thống kê Thời gian tính bằng mili giây: brentozar.com/archive/2012/12/ Cách
congusbongus

17

Để có được thời gian thực hiện như một biến trong Proc của bạn:

DECLARE @EndTime datetime
DECLARE @StartTime datetime 
SELECT @StartTime=GETDATE() 

-- Write Your Query


SELECT @EndTime=GETDATE()

--This will return execution time of your query
SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs] 

VÀ thấy điều này

Đo lường hiệu suất truy vấn: "Chi phí truy vấn kế hoạch thực hiện" so với "Thời gian thực hiện"


1
Datepart NS đại diện cho nano giây, trong một phần nghìn giây sử dụng MS
Milan Matějka

12

Tôi đã theo cùng một điều và tình cờ thấy liên kết sau đây là tuyệt vời:

http://www.sqlserver.info/manloyment-studio/show-query-execut-time/

Nó cho thấy ba cách khác nhau để đo hiệu suất. Tất cả tốt cho sức mạnh riêng của họ. Cái tôi chọn là như sau:


KHAI THÁC @ Time1 NGÀY

KHAI THÁC @ Time2 NGÀY

SET @ Time1 = GETDATE ()

- Chèn truy vấn tại đây

SET @ Time2 = GETDATE ()

CHỌN DATEDIFF (MILLISECOND, @ Time1, @ Time2) NHƯ VẬY


Điều này sẽ hiển thị kết quả từ truy vấn của bạn theo sau là khoảng thời gian cần thiết để hoàn thành.

Hi vọng điêu nay co ich.


Tôi thấy rằng thật bất tiện, đôi khi hiển thị thời gian và đôi khi chỉ hiển thị 0.
RMati 22/03/19

2

Tôi không biết về việc mở rộng thanh thông tin.

Nhưng bạn có thể đặt thời gian được đặt làm mặc định cho tất cả các truy vấn hiển thị trong tab "Tin nhắn".

Khi ở cửa sổ Truy vấn, hãy chuyển đến mục Menu Truy vấn, chọn "tùy chọn truy vấn" rồi chọn "nâng cao" trong nhóm "Thực thi" và chọn hộp kiểm "đặt thời gian thống kê" / "đặt thống kê IO". Các giá trị này sau đó sẽ hiển thị trong vùng thông báo cho mỗi truy vấn mà không cần phải nhớ bật và tắt thống kê đã đặt.

Bạn cũng có thể sử dụng Shift + Alt + S để bật thống kê máy khách bất cứ lúc nào


0

Bạn có thể thử mã này:

USE AdventureWorks2012;
GO
SET STATISTICS TIME ON;
GO
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory
WHERE StandardCost < 500.00;
GO
SET STATISTICS TIME OFF;
GO
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.