如何使 SqlConnection.RetrieveStatistics 工作

本文关键字:工作 RetrieveStatistics SqlConnection 何使 | 更新日期: 2023-09-27 17:56:59

我不能让SqlConnection.RetrieveStatistics工作,它总是返回一个由18个元素组成的哈希表,这些元素都是零。

我想

做什么:在我的测试环境中,我想为每个httpresponse添加一个标头,其中包含在请求处理期间执行的sql命令的数量。

我的应用程序只是(休息)网络服务,我有一个sql连接par请求(每个请求一个NHibernate会话)。

处理请求后,我执行:

var connection = statelessSession.NHSession.Connection as ReliableSqlDbConnection;
if (connection != null)
    queries += Convert.ToInt32(connection.ReliableConnection.Current.RetrieveStatistics()["Prepares"]);

数字始终为 0,当我在这一行上中断时,我看到所有数字都是零。

打开会话后,我执行:

var ret = module.OpenSession();
var connection = (ret.Connection as ReliableSqlDbConnection);
if(connection != null)
{
  connection.ReliableConnection.Current.StatisticsEnabled =true;
  ret.CreateSQLQuery("SET STATISTICS IO ON; SET STATISTICS TIME ON;").ExecuteUpdate();
  connection.ReliableConnection.Current.ResetStatistics();
}
return ret;

我使用 https://github.com/MRCollective/NHibernate.SqlAzure 因为在生产中我使用的是sql azure,但在本地,我有一个Sql Server 2014开发人员版的实例。

对于我的数据库,我有:自动创建统计信息 true自动更新统计信息 true

我错过了什么吗?

如何使 SqlConnection.RetrieveStatistics 工作

造成这种情况的原因是NHibernate为每个请求打开一个新连接,这就是我每次都丢失统计信息的原因。