Statistiche di provider per SQL ServerProvider Statistics for SQL Server

A partire da .NET Framework versione 2.0, il provider di dati .NET Framework per SQL Server supporta le statistiche in fase di esecuzione.Starting with the .NET Framework version 2.0, the .NET Framework Data Provider for SQL Server supports run-time statistics. È necessario abilitare le statistiche impostando la proprietà StatisticsEnabled dell'oggetto SqlConnection su True dopo aver creato un oggetto di connessione valido.You must enable statistics by setting the StatisticsEnabled property of the SqlConnection object to True after you have a valid connection object created. Dopo aver abilitato le statistiche, è possibile visualizzarle come "snapshot" recuperando un riferimento IDictionary mediante il metodo RetrieveStatistics dell'oggetto SqlConnection.After statistics are enabled, you can review them as a "snapshot in time" by retrieving an IDictionary reference via the RetrieveStatistics method of the SqlConnection object. È possibile enumerare l'elenco come un set di voci di dizionario delle coppie nome/valore.You enumerate through the list as a set of name/value pair dictionary entries. Queste coppie nome/valore non seguono alcun ordine.These name/value pairs are unordered. È possibile chiamare il metodo ResetStatistics dell'oggetto SqlConnection per azzerare i contatori in qualsiasi momento.At any time, you can call the ResetStatistics method of the SqlConnection object to reset the counters. Se non è stata abilitata la raccolta delle statistiche, non viene generata alcuna eccezione.If statistic gathering has not been enabled, an exception is not generated. Inoltre, se il metodo RetrieveStatistics viene chiamato senza la proprietà StatisticsEnabled, i valori recuperati sono i valori iniziali per ciascuna voce.In addition, if RetrieveStatistics is called without StatisticsEnabled having been called first, the values retrieved are the initial values for each entry. Se vengono abilitate le statistiche, eseguire l'applicazione, quindi disabilitare le statistiche. I valori recuperati rifletteranno i valori raccolti fino al momento in cui le statistiche sono state disabilitate.If you enable statistics, run your application for a while, and then disable statistics, the values retrieved will reflect the values collected up to the point where statistics were disabled. Tutti i valori delle statistiche vengono raccolti in base alla connessione.All statistical values gathered are on a per-connection basis.

Valori statistici disponibiliStatistical Values Available

Attualmente sono disponibili 18 voci diverse del provider Microsoft SQL Server.Currently there are 18 different items available from the Microsoft SQL Server provider. Il numero di elementi disponibili è possibile accedere tramite il conteggio proprietà del IDictionary interfaccia riferimento restituito dal RetrieveStatistics.The number of items available can be accessed via the Count property of the IDictionary interface reference returned by RetrieveStatistics. Tutti i contatori per le statistiche del provider utilizzare common language runtime Int64 tipo (lungo in c# e Visual Basic), che è a 64 bit.All of the counters for provider statistics use the common language runtime Int64 type (long in C# and Visual Basic), which is 64 bits wide. Il valore massimo del int64 il tipo di dati, come definito dal int64. MaxValue campo, ((2^63)-1)).The maximum value of the int64 data type, as defined by the int64.MaxValue field, is ((2^63)-1)). Quando i valori del contatore raggiungono il valore massimo, non possono più essere considerati esatti.When the values for the counters reach this maximum value, they should no longer be considered accurate. Ciò significa che int64. MaxValue-1((2^63)-2) è in realtà il valore massimo valido per le statistiche.This means that int64.MaxValue-1((2^63)-2) is effectively the greatest valid value for any statistic.

Nota

Viene usato un dizionario per restituire le statistiche del provider poiché il numero, i nomi e l'ordine delle statistiche restituite può variare nel tempo.A dictionary is used for returning provider statistics because the number, names and order of the returned statistics may change in the future. Le applicazioni non devono fare riferimento a un valore specifico rilevato nel dizionario, ma devono controllare se il valore è presente e creare rami di conseguenza.Applications should not rely on a specific value being found in the dictionary, but should instead check whether the value is there and branch accordingly.

Nella tabella seguente vengono descritti i valori statistici disponibili.The following table describes the current statistical values available. Si noti che i nomi delle chiavi per i singoli valori non sono localizzati nelle versioni internazionali di Microsoft .NET Framework.Note that the key names for the individual values are not localized across regional versions of the Microsoft .NET Framework.

Nome della chiaveKey Name DescrizioneDescription
BuffersReceived Restituisce il numero dei pacchetti TSD ricevuti dal provider mediante SQL Server dopo che l'applicazione è stata avviata tramite il provider e le statistiche sono state abilitate.Returns the number of tabular data stream (TDS) packets received by the provider from SQL Server after the application has started using the provider and has enabled statistics.
BuffersSent Restituisce il numero di pacchetti TDS inviati a SQL Server dal provider dopo l'abilitazione delle statistiche.Returns the number of TDS packets sent to SQL Server by the provider after statistics have been enabled. I comandi di grandi dimensioni possono richiedere più buffer.Large commands can require multiple buffers. Se, ad esempio, al server viene inviato un comando di grandi dimensioni per il quale sono necessari sei pacchetti, ServerRoundtrips viene incrementato di uno e BuffersSent di sei.For example, if a large command is sent to the server and it requires six packets, ServerRoundtrips is incremented by one and BuffersSent is incremented by six.
BytesReceived Restituisce il numero di byte di dati nei pacchetti TDS ricevuti dal provider mediante SQL Server dopo che l'applicazione è stata avviata tramite il provider e le statistiche sono state abilitate.Returns the number of bytes of data in the TDS packets received by the provider from SQL Server once the application has started using the provider and has enabled statistics.
BytesSent Restituisce il numero di byte di dati inviati a SQL Server in pacchetti TDS dopo che l'applicazione è stata avviata tramite il provider e le statistiche sono state abilitate.Returns the number of bytes of data sent to SQL Server in TDS packets after the application has started using the provider and has enabled statistics.
ConnectionTime Il periodo di tempo (in millisecondi) durante il quale la connessione è stata aperta dopo l'abilitazione delle statistiche (tempo di connessione totale se le statistiche sono state abilitate prima di aprire la connessione).The amount of time (in milliseconds) that the connection has been opened after statistics have been enabled (total connection time if statistics were enabled before opening the connection).
CursorOpens Restituisce il numero di volte che il cursore è stato aperto tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of times a cursor was open through the connection once the application has started using the provider and has enabled statistics.

Notare che i risultati di sola lettura/forward-only restituiti dall'istruzione SELECT non sono considerati cursori e pertanto non influiscono su questo contatore.Note that read-only/forward-only results returned by SELECT statements are not considered cursors and thus do not affect this counter.
ExecutionTime Restituisce l'intervallo di tempo cumulativo (in millisecondi) usato dal provider per l'elaborazione dopo l'abilitazione delle statistiche, incluso il tempo di attesa per le risposte del server nonché il tempo di esecuzione del codice nel provider stesso.Returns the cumulative amount of time (in milliseconds) that the provider has spent processing once statistics have been enabled, including the time spent waiting for replies from the server as well as the time spent executing code in the provider itself.

Le classi che includono il codice relativo ai tempi sono:The classes that include timing code are:

SqlConnectionSqlConnection

SqlCommandSqlCommand

SqlDataReaderSqlDataReader

SqlDataAdapterSqlDataAdapter

SqlTransactionSqlTransaction

SqlCommandBuilderSqlCommandBuilder

Per mantenere i membri performance-critical più piccoli possibile, per i membri seguenti non vengono monitorati i tempi:To keep performance-critical members as small as possible, the following members are not timed:

SqlDataReaderSqlDataReader

this[] operator (all overloads)this[] operator (all overloads)

GetBooleanGetBoolean

GetCharGetChar

GetDateTimeGetDateTime

GetDecimalGetDecimal

GetDoubleGetDouble

GetFloatGetFloat

GetGuidGetGuid

GetInt16GetInt16

GetInt32GetInt32

GetInt64GetInt64

GetNameGetName

GetOrdinalGetOrdinal

GetSqlBinaryGetSqlBinary

GetSqlBooleanGetSqlBoolean

GetSqlByteGetSqlByte

GetSqlDateTimeGetSqlDateTime

GetSqlDecimalGetSqlDecimal

GetSqlDoubleGetSqlDouble

GetSqlGuidGetSqlGuid

GetSqlInt16GetSqlInt16

GetSqlInt32GetSqlInt32

GetSqlInt64GetSqlInt64

GetSqlMoneyGetSqlMoney

GetSqlSingleGetSqlSingle

GetSqlStringGetSqlString

GetStringGetString

IsDBNullIsDBNull
IduCount Restituisce il numero totale di istruzioni INSERT, DELETE e UPDATE eseguite tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the total number of INSERT, DELETE, and UPDATE statements executed through the connection once the application has started using the provider and has enabled statistics.
IduRows Restituisce il numero totale di righe interessate dalle istruzioni INSERT, DELETE e UPDATE eseguite tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the total number of rows affected by INSERT, DELETE, and UPDATE statements executed through the connection once the application has started using the provider and has enabled statistics.
NetworkServerTime Restituisce il tempo cumulativo di attesa (in millisecondi) del provider per le risposte dal server dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the cumulative amount of time (in milliseconds) that the provider spent waiting for replies from the server once the application has started using the provider and has enabled statistics.
PreparedExecs Restituisce il numero di comandi preparati eseguiti tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of prepared commands executed through the connection once the application has started using the provider and has enabled statistics.
Prepares Restituisce il numero di istruzioni preparate tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of statements prepared through the connection once the application has started using the provider and has enabled statistics.
SelectCount Restituisce il numero di istruzioni SELECT eseguite tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of SELECT statements executed through the connection once the application has started using the provider and has enabled statistics. Include le istruzioni FETCH per il recupero delle righe dai cursori e il conteggio per le istruzioni SELECT viene aggiornato quando viene raggiunta la fine di un tipo SqlDataReader.This includes FETCH statements to retrieve rows from cursors, and the count for SELECT statements is updated when the end of a SqlDataReader is reached.
SelectRows Restituisce il numero di righe selezionate dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of rows selected once the application has started using the provider and has enabled statistics. Il contatore riflette tutte le righe generate da istruzioni SQL, anche da quelle non usate dal chiamante.This counter reflects all the rows generated by SQL statements, even those that were not actually consumed by the caller. Ad esempio, se un lettore di dati viene arrestato prima di leggere l'intero set di risultati, il conteggio non verrà compromesso.For example, closing a data reader before reading the entire result set would not affect the count. Vengono incluse le righe recuperate dai cursori mediante istruzioni FETCH.This includes the rows retrieved from cursors through FETCH statements.
ServerRoundtrips Restituisce il numero di volte che la connessione ha inviato i comandi al server e ottenuto una risposta dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of times the connection sent commands to the server and got a reply back once the application has started using the provider and has enabled statistics.
SumResultSets Restituisce il numero dei set di risultati usati dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of result sets that have been used once the application has started using the provider and has enabled statistics. Ad esempio, viene incluso qualsiasi set di risultati restituito al client.For example this would include any result set returned to the client. Per i cursori, ciascuna operazione fetch o ciascuna operazione block-fetch viene considerata come un set di risultati indipendente.For cursors, each fetch or block-fetch operation is considered an independent result set.
Transactions Restituisce il numero di transazioni utente iniziate dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of user transactions started once the application has started using the provider and has enabled statistics, including rollbacks. Se una connessione viene eseguita in modalità di commit automatico, ciascun comando viene considerato come una transazione.If a connection is running with auto commit on, each command is considered a transaction.

Il contatore incrementa il conteggio delle transazioni non appena viene eseguita l'istruzione BEGIN TRAN, indipendentemente dal fatto che successivamente venga eseguito il commit o il rollback della transazione.This counter increments the transaction count as soon as a BEGIN TRAN statement is executed, regardless of whether the transaction is committed or rolled back later.
UnpreparedExecs Restituisce il numero di istruzioni non preparate eseguite tramite la connessione dopo che l'applicazione è stata avviata e le statistiche sono state abilitate.Returns the number of unprepared statements executed through the connection once the application has started using the provider and has enabled statistics.

Recupero di valoriRetrieving a Value

Nell'applicazione console seguente viene illustrato come abilitare le statistiche su una connessione, recuperare quattro singoli valori statistici e riportarli nella finestra della console.The following console application shows how to enable statistics on a connection, retrieve four individual statistic values, and write them out to the console window.

Nota

L'esempio seguente usa l'esempio AdventureWorks database fornito con SQL Server.The following example uses the sample AdventureWorks database included with SQL Server. Per la stringa di connessione fornita nel codice di esempio si presuppone che il database sia installato e disponibile nel computer locale.The connection string provided in the sample code assumes the database is installed and available on the local computer. Modificare la stringa di connessione per adattarla all'ambiente, se necessario.Modify the connection string as necessary for your environment.

Option Strict On  

Imports System  
Imports System.Collections  
Imports System.Data  
Imports System.Data.SqlClient  

Module Module1  

  Sub Main()  
    Dim connectionString As String = GetConnectionString()  

    Using awConnection As New SqlConnection(connectionString)  
      ' StatisticsEnabled is False by default.  
      ' It must be set to True to start the   
      ' statistic collection process.  
      awConnection.StatisticsEnabled = True  

      Dim productSQL As String = "SELECT * FROM Production.Product"  
      Dim productAdapter As _  
          New SqlDataAdapter(productSQL, awConnection)  

      Dim awDataSet As New DataSet()  

      awConnection.Open()  

      productAdapter.Fill(awDataSet, "ProductTable")  

      ' Retrieve the current statistics as  
      ' a collection of values at this point  
      ' and time.  
      Dim currentStatistics As IDictionary = _  
          awConnection.RetrieveStatistics()  

      Console.WriteLine("Total Counters: " & _  
          currentStatistics.Count.ToString())  
      Console.WriteLine()  

      ' Retrieve a few individual values  
      ' related to the previous command.  
      Dim bytesReceived As Long = _  
          CLng(currentStatistics.Item("BytesReceived"))  
      Dim bytesSent As Long = _  
          CLng(currentStatistics.Item("BytesSent"))  
      Dim selectCount As Long = _  
          CLng(currentStatistics.Item("SelectCount"))  
      Dim selectRows As Long = _  
          CLng(currentStatistics.Item("SelectRows"))  

      Console.WriteLine("BytesReceived: " & bytesReceived.ToString())  
      Console.WriteLine("BytesSent: " & bytesSent.ToString())  
      Console.WriteLine("SelectCount: " & selectCount.ToString())  
      Console.WriteLine("SelectRows: " & selectRows.ToString())  

      Console.WriteLine()  
      Console.WriteLine("Press any key to continue")  
      Console.ReadLine()  
    End Using  

  End Sub  

  Function GetConnectionString() As String  
    ' To avoid storing the connection string in your code,  
    ' you can retrive it from a configuration file.  
    Return "Data Source=localhost;Integrated Security=SSPI;" & _  
      "Initial Catalog=AdventureWorks"  
  End Function  
End Module  
using System;  
using System.Collections;  
using System.Collections.Generic;  
using System.Data;  
using System.Data.SqlClient;  

namespace CS_Stats_Console_GetValue  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      string connectionString = GetConnectionString();  

      using (SqlConnection awConnection =   
        new SqlConnection(connectionString))  
      {  
        // StatisticsEnabled is False by default.  
        // It must be set to True to start the   
        // statistic collection process.  
        awConnection.StatisticsEnabled = true;  

        string productSQL = "SELECT * FROM Production.Product";  
        SqlDataAdapter productAdapter =   
          new SqlDataAdapter(productSQL, awConnection);  

        DataSet awDataSet = new DataSet();  

        awConnection.Open();  

        productAdapter.Fill(awDataSet, "ProductTable");  
        // Retrieve the current statistics as  
        // a collection of values at this point  
        // and time.  
        IDictionary currentStatistics =  
          awConnection.RetrieveStatistics();  

        Console.WriteLine("Total Counters: " +  
          currentStatistics.Count.ToString());  
        Console.WriteLine();  

        // Retrieve a few individual values  
        // related to the previous command.  
        long bytesReceived =  
            (long) currentStatistics["BytesReceived"];  
        long bytesSent =  
            (long) currentStatistics["BytesSent"];  
        long selectCount =  
            (long) currentStatistics["SelectCount"];  
        long selectRows =  
            (long) currentStatistics["SelectRows"];  

        Console.WriteLine("BytesReceived: " +  
            bytesReceived.ToString());  
        Console.WriteLine("BytesSent: " +  
            bytesSent.ToString());  
        Console.WriteLine("SelectCount: " +  
            selectCount.ToString());  
        Console.WriteLine("SelectRows: " +  
            selectRows.ToString());  

        Console.WriteLine();  
        Console.WriteLine("Press any key to continue");  
        Console.ReadLine();  
      }  

    }  
    private static string GetConnectionString()  
    {  
      // To avoid storing the connection string in your code,  
      // you can retrive it from a configuration file.  
      return "Data Source=localhost;Integrated Security=SSPI;" +   
        "Initial Catalog=AdventureWorks";  
    }  
  }  
}  

Recupero di tutti i valoriRetrieving All Values

Nell'applicazione console seguente viene illustrato come abilitare le statistiche su una connessione, recuperare tutti i valori statistici con l'enumeratore e riportarli nella finestra della console.The following console application shows how to enable statistics on a connection, retrieve all available statistic values using the enumerator, and write them to the console window.

Nota

L'esempio seguente usa l'esempio AdventureWorks database fornito con SQL Server.The following example uses the sample AdventureWorks database included with SQL Server. Per la stringa di connessione fornita nel codice di esempio si presuppone che il database sia installato e disponibile nel computer locale.The connection string provided in the sample code assumes the database is installed and available on the local computer. Modificare la stringa di connessione per adattarla all'ambiente, se necessario.Modify the connection string as necessary for your environment.

Option Strict On  

Imports System  
Imports System.Collections  
Imports System.Data  
Imports System.Data.SqlClient  

Module Module1  
  Sub Main()  
    Dim connectionString As String = GetConnectionString()  

    Using awConnection As New SqlConnection(connectionString)  
      ' StatisticsEnabled is False by default.  
      ' It must be set to True to start the   
      ' statistic collection process.  
      awConnection.StatisticsEnabled = True  

      Dim productSQL As String = "SELECT * FROM Production.Product"  
      Dim productAdapter As _  
          New SqlDataAdapter(productSQL, awConnection)  

      Dim awDataSet As New DataSet()  

      awConnection.Open()  

      productAdapter.Fill(awDataSet, "ProductTable")  

      ' Retrieve the current statistics as  
      ' a collection of values at this point  
      ' and time.  
      Dim currentStatistics As IDictionary = _  
          awConnection.RetrieveStatistics()  

      Console.WriteLine("Total Counters: " & _  
          currentStatistics.Count.ToString())  
      Console.WriteLine()  

      Console.WriteLine("Key Name and Value")  

      ' Note the entries are unsorted.  
      For Each entry As DictionaryEntry In currentStatistics  
        Console.WriteLine(entry.Key.ToString() & _  
            ": " & entry.Value.ToString())  
      Next  

      Console.WriteLine()  
      Console.WriteLine("Press any key to continue")  
      Console.ReadLine()  
    End Using  

  End Sub  

  Function GetConnectionString() As String  
    ' To avoid storing the connection string in your code,  
    ' you can retrive it from a configuration file.  
    Return "Data Source=localhost;Integrated Security=SSPI;" & _  
      "Initial Catalog=AdventureWorks"  
  End Function  
End Module  
using System;  
using System.Collections;  
using System.Collections.Generic;  
using System.Text;  
using System.Data;  
using System.Data.SqlClient;  

namespace CS_Stats_Console_GetAll  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      string connectionString = GetConnectionString();  

      using (SqlConnection awConnection =   
        new SqlConnection(connectionString))  
      {  
        // StatisticsEnabled is False by default.  
        // It must be set to True to start the   
        // statistic collection process.  
        awConnection.StatisticsEnabled = true;  

        string productSQL = "SELECT * FROM Production.Product";  
        SqlDataAdapter productAdapter =  
            new SqlDataAdapter(productSQL, awConnection);  

        DataSet awDataSet = new DataSet();  

        awConnection.Open();  

        productAdapter.Fill(awDataSet, "ProductTable");  

        // Retrieve the current statistics as  
        // a collection of values at this point  
        // and time.  
        IDictionary currentStatistics =  
            awConnection.RetrieveStatistics();  

        Console.WriteLine("Total Counters: " +  
            currentStatistics.Count.ToString());  
        Console.WriteLine();  

        Console.WriteLine("Key Name and Value");  

        // Note the entries are unsorted.  
        foreach (DictionaryEntry entry in currentStatistics)  
        {  
          Console.WriteLine(entry.Key.ToString() +  
              ": " + entry.Value.ToString());  
        }  

        Console.WriteLine();  
        Console.WriteLine("Press any key to continue");  
        Console.ReadLine();  
      }  

    }  
    private static string GetConnectionString()  
    {  
      // To avoid storing the connection string in your code,  
      // you can retrive it from a configuration file.  
      return "Data Source=localhost;Integrated Security=SSPI;" +   
        "Initial Catalog=AdventureWorks";  
    }  
  }  
}  

Vedere ancheSee Also

SQL Server e ADO.NETSQL Server and ADO.NET
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center