2012-08-31 60 views
1

我试图收集一些SQL查询的统计信息。 我使用RetrieveStatistics()SqlDbConnection类的方法来获得统计和的ExecuteReader()的方法的SqlCommand运行查询。 RetrieveStatistics()方法返回填充了执行查询统计信息的字典。 当我运行常规查询时,SelectRows字典的实体包含查询返回的实际行数。但是,当我运行存储过程时,SelectRows始终为零,尽管reader肯定包含行。检索存储过程的统计信息,SelectRows始终为0

我打电话给ResetStatistics()之前每个查询和StatisticsEnabled设置为true。

这里是我的PowerShell代码:

### Stored procedure 

$cn = New-Object system.data.sqlclient.sqlconnection 
$cn.ConnectionString = "Data Source=localhost;Initial Catalog=XXXX;Integrated Security=SSPI" 
$cn.StatisticsEnabled = $true 
$cmd = $cn.CreateCommand() 
$cmd.CommandText = "[dbo].[spGetXXXX]" 
$cmd.CommandType = "StoredProcedure" 
$cn.Open() 
$cmd.ExecuteReader() 
# several rows returned 
$cn.RetrieveStatistics() 

Name       Value 
----       ----- 
BytesReceived     300 
SumResultSets     1 
ExecutionTime     5 
Transactions     0 
BuffersReceived    1 
IduRows      0 
ServerRoundtrips    1 
PreparedExecs     0 
BytesSent      132 
SelectCount     1 
CursorOpens     0 
ConnectionTime     51299 
Prepares      0 
SelectRows      0 
UnpreparedExecs    1 
NetworkServerTime    3 
BuffersSent     1 
IduCount      0 

### Regular SQL query 
$cn2 = New-Object system.data.sqlclient.sqlconnection 
$cn2.ConnectionString = "Data Source=localhost;Initial Catalog=XXXX;Integrated Security=SSPI" 
$cn2.StatisticsEnabled = $true 
$cmd2 = $cn2.CreateCommand() 
$cmd2.CommandText = "SELECT * FROM XXXX" 
$cn2.Open() 
$cmd2.ExecuteReader() 

#rows returned 

$cn2.RetrieveStatistics() 

Name       Value 
----       ----- 
BytesReceived     12357 
SumResultSets     1 
ExecutionTime     12 
Transactions     0 
BuffersReceived    2 
IduRows      0 
ServerRoundtrips    1 
PreparedExecs     0 
BytesSent      98 
SelectCount     1 
CursorOpens     0 
ConnectionTime     11407 
Prepares      0 
SelectRows      112 
UnpreparedExecs    1 
NetworkServerTime    0 
BuffersSent     1 
IduCount      0 

回答

0

两个查询之间的区别是,存储后过程调用读者保持开放和行数量的统计不会被更新。

所以正确的代码会是这样:

$connectionn.ResetStatistics() 
$reader = $command.ExecuteReader() 
$reader.Close() # ! 
$connection.RetrieveStatistics()