簡體   English   中英

獲取ADO.NET SQL命令的執行時間

[英]Get the execution time of a ADO.NET SQL Command

我一直在尋找是否有任何簡單的方法來獲取ADO.NET命令對象的執行時間。

我知道我可以手動執行StopWatch啟動和停止。 但是想要在ADO.NET中有任何簡單的方法

有一種方法,但使用SqlConnection ,而不是命令對象。 例:

using (var c = new SqlConnection(connectionString)) {
    // important
    c.StatisticsEnabled = true;
    c.Open();
    using (var cmd = new SqlCommand("select * from Error", c)) {
        cmd.ExecuteReader().Dispose();
    }       
    var stats = c.RetrieveStatistics();
    var firstCommandExecutionTimeInMs = (long) stats["ExecutionTime"];
    // reset for next command
    c.ResetStatistics();
    using (var cmd = new SqlCommand("select * from Code", c))
    {
        cmd.ExecuteReader().Dispose();
    }
    stats = c.RetrieveStatistics();
    var secondCommandExecutionTimeInMs = (long)stats["ExecutionTime"];
 }

在這里,您可以找到RetrieveStatistics返回的字典中包含的其他值。

請注意,這些值代表客戶端統計(基本上是ADO.NET的內部測量),但似乎你要求使用Stopwatch模擬 - 我認為這很好。

來自@Evk答案的方法非常有趣和聰明:它是工作客戶端,這種統計的主要關鍵之一實際上是NetworkServerTime

返回應用程序開始使用提供程序並啟用統計信息后,提供程序等待服務器回復所花費的累計時間(以毫秒為單位)。

所以它包括從數據庫服務器到ADO NET客戶端的網絡時間。

另一種更面向DB 服務器的方法是運行SET STATISTICS TIME ON ,然后檢索InfoMessage

委托代碼的草稿(我只是寫入調試控制台,但您可能希望用StringBuilder Append替換它)

internal static void TrackInfo(object sender, SqlInfoMessageEventArgs e)
{
    Debug.WriteLine(e.Message);
    foreach (var element in e.Errors) {
        Debug.WriteLine(element.ToString());
    }
}

和用法

conn.InfoMessage +=  TrackInfo;
using (var cmd = new SqlCommand(@"SET STATISTICS TIME ON", conn)) {
    cmd.ExecuteNonQuery();
}
using (var cmd = new SqlCommand(yourQuery, conn)) {
    var RD = cmd.ExecuteReader();
    while (RD.Read()) {
        // read the columns
    }
}

我建議您轉到SQL Server 2016並使用查詢存儲功能。 這將跟蹤您提交的每個查詢的執行時間和性能隨時間的變化。 不需要更改您的應用程序。 跟蹤所有查詢,包括在存儲過程中執行的查詢。 跟蹤任何應用程序,而不僅僅是您自己的 適用於所有版本,包括Express,包括Azure SQL DB服務。

如果您在客戶端進行跟蹤,則必須使用掛鍾自行測量時間。 我會添加並公開性能計數器 ,然后使用性能計數器基礎結構來捕獲和存儲測量值。

作為一個方面,僅僅跟蹤發送到SQL Server的批處理的執行時間會產生非常粗糙的性能信息,並且很少可操作。 閱讀如何分析SQL Server性能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM