我无法使SqlConnection.RetrieveStatistics工作,它总是返回一个包含全部为零的18个元素的哈希表。
我想做什么:在我的测试环境中,我想为每个httpresponse添加一个标头,其中包含在请求处理期间执行的sql命令的数量。
我的应用程序只是(Rest)webservices,我有一个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 Developer Edition的实例。
对于我的数据库,我有: 自动创建统计信息true 自动更新统计信息为真
我错过了什么吗?
答案 0 :(得分:0)
原因是NHibernate为每个请求打开了一个新连接,这就是我每次丢失统计信息的原因。