Partager via


Statistiques du fournisseur pour SQL Server (ADO.NET)

À partir du .NET Framework version 2.0, le fournisseur de données .NET Framework pour SQL Server prend en charge des statistiques d'exécution. Vous devez activer les statistiques en attribuant à la propriété StatisticsEnabled de l'objet SqlConnection la valeur True après la création d'un objet de connexion valide. Une fois les statistiques activées, vous pouvez les consulter comme « instantané dans le temps » en extrayant une référence IDictionary via la méthode RetrieveStatistics de l'objet SqlConnection. Vous détaillez la liste comme un ensemble d'entrées de dictionnaire de paires nom-valeur. Ces paires nom-valeur ne sont triées. À tout moment, vous pouvez appeler la méthode ResetStatistics de l'objet SqlConnection pour réinitialiser les compteurs. Si la collecte de statistiques n'est pas activée, aucune exception n'est générée. En outre, si RetrieveStatistics est appelé sans que StatisticsEnabled ait été appelé précédemment, les valeurs extraites sont les valeurs initiales de chaque entrée. Si vous activez les statistiques, exécutez votre application pendant un moment, puis désactivez les statistiques, les valeurs extraites reflètent celles collectées jusqu'au point où les statistiques étaient désactivées. Toutes les valeurs statistiques sont collectées par connexion.

Valeurs statistiques disponibles

Il y a actuellement 18 éléments différents disponibles auprès du fournisseur Microsoft SQL Server. Le nombre d'éléments disponibles est accessible via la propriété Count de la référence d'interface IDictionary retournée par RetrieveStatistics. Tous les compteurs relatifs aux statistiques de fournisseur utilisent le type Common Language Runtime Int64 (long dans C# et Visual Basic), dont la taille est de 64 bits. La valeur maximale du type de données int64, telle que définie par le champ int64.MaxValue, est ((2^63)-1)). Lorsque les valeurs des compteurs atteignent cette valeur maximale, elles ne doivent plus être considérées comme précises. Cela signifie que int64.MaxValue-1 ((2^63)-2) est effectivement la valeur valide la plus élevée pour toute statistique.

RemarqueRemarque

Un dictionnaire est utilisé pour retourner des statistiques de fournisseur du fait que le nombre, les noms et l'ordre des statistiques retournées peuvent changer dans le futur.Les applications ne doivent pas dépendre d'une valeur spécifique trouvée dans le dictionnaire, mais contrôler si la valeur existe et créer une branche en conséquence.

Le tableau suivant décrit les valeurs statistiques actuelles disponibles. Notez que les noms clés pour les valeurs individuelles ne sont pas localisés dans les versions régionales de Microsoft .NET Framework.

Nom de clé

Description

BuffersReceived

Retourne le nombre de paquets de flux de données tabulaires (TDS, Tabular Data Stream) reçus par le fournisseur à partir de SQL Server, après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

BuffersSent

Retourne le nombre de paquets TDS envoyés à SQL Server par le fournisseur après que les statistiques ont été activées. Les commandes longues peuvent nécessiter plusieurs tampons. Par exemple, si une commande longue est envoyée au serveur et qu'elle requière six paquets, ServerRoundtrips est incrémenté d'une unité et BuffersSent de six.

BytesReceived

Retourne le nombre d'octets de données dans les paquets TDS reçus par le fournisseur à partir de SQL Server, après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

BytesSent

Retourne le nombre d'octets de données envoyés à SQL Server dans des paquets TDS après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

ConnectionTime

La quantité de temps pendant laquelle les connexions ont été ouvertes après que les statistiques ont été activées (temps de connexion total si les statistiques ont été activées avant l'ouverture de la connexion).

CursorOpens

Retourne le nombre de fois qu'un curseur a été ouvert par la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

Notez que les résultats en lecture seule/en avant uniquement retournés par les instructions SELECT ne sont pas considérés comme des curseurs et n'affectent donc pas ce compteur.

ExecutionTime

Retourne la quantité de temps cumulé que le fournisseur a consacré au traitement une fois les statistiques activées, y compris le temps passé à attendre des réponses du serveur, ainsi que le temps passé à exécuter du code dans le fournisseur proprement dit.

Les classes incluant un code de minutage sont les suivantes :

SqlConnection

SqlCommand

SqlDataReader

SqlDataAdapter

SqlTransaction

SqlCommandBuilder

Pour maintenir le nombre de membres critiques pour les performances le plus petit possible, les membres suivants ne sont pas minutés :

SqlDataReader

opérateur this[] (toutes les surcharges)

GetBoolean

GetChar

GetDateTime

GetDecimal

GetDouble

GetFloat

GetGuid

GetInt16

GetInt32

GetInt64

GetName

GetOrdinal

GetSqlBinary

GetSqlBoolean

GetSqlByte

GetSqlDateTime

GetSqlDecimal

GetSqlDouble

GetSqlGuid

GetSqlInt16

GetSqlInt32

GetSqlInt64

GetSqlMoney

GetSqlSingle

GetSqlString

GetString

IsDBNull

IduCount

Retourne le nombre total d'instructions INSERT, DELETE et UPDATE exécutées via la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

IduRows

Retourne le nombre total de lignes affectées par les instructions INSERT, DELETE et UPDATE exécutées via la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

NetworkServerTime

Retourne la quantité de temps cumulé que le fournisseur a passé à attendre des réponses du serveur après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

PreparedExecs

Retourne le nombre de commandes préparées exécutées via la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

Prepares

Retourne le nombre d'instructions préparées via la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

SelectCount

Retourne le nombre d'instructions SELECT exécutées via la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques. Cela inclut les instructions FETCH permettant d'extraire des lignes de curseurs et le compte des instructions SELECT est mis à jour à la fin d'un SqlDataReader.

SelectRows

Retourne le nombre de lignes sélectionnées après que l'application a démarré à l'aide du fournisseur et a activé les statistiques. Ce compteur reflète toutes les lignes générées par les instructions SQL, y compris celles qui n'ont pas été réellement consommées par l'appelant. Par exemple, la fermeture d'un lecteur de données avant d'avoir lu l'ensemble de résultats complet n'affecterait pas le compte. Cela inclut les lignes extraites de curseurs à l'aide d'instructions FETCH.

ServerRoundtrips

Retourne le nombre de fois que la connexion a envoyé des commandes au serveur et obtenu une réponse après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

SumResultSets

Retourne le nombre d'ensembles de résultats utilisés après que l'application a démarré à l'aide du fournisseur et a activé les statistiques. Par exemple, cela inclut tout ensemble de résultats retourné au client. Pour les curseurs, chaque opération d'extraction ou d'extraction de bloc est considérée comme un ensemble de résultats indépendant.

Transactions

Retourne le nombre de transactions d'utilisateur démarrées après que l'application a démarré à l'aide du fournisseur et a activé les statistiques, y compris les annulations. Si une connexion est en cours avec une validation automatique activée, chaque commande est considérée comme une transaction.

Ce compteur incrémente le compte des transactions dès qu'une instruction BEGIN TRAN est exécutée, indépendamment du fait que la transaction soit validée ou annulée ultérieurement.

UnpreparedExecs

Retourne le nombre d'instructions non préparées exécutées via la connexion après que l'application a démarré à l'aide du fournisseur et a activé les statistiques.

Extraction d'une valeur

L'application console suivante montre comment activer les statistiques sur une connexion, extraire quatre valeurs statistiques individuelles et les afficher dans la fenêtre de console.

RemarqueRemarque

L'exemple suivant utilise l'exemple de base de données AdventureWorks inclus dans SQL Server 2005.La chaîne de connexion fournie dans l'exemple de code suppose que la base de données est installée et disponible sur l'ordinateur local.Si nécessaire, modifiez la chaîne de connexion en fonction de votre environnement.

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

[C#]

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";
    }
  }
}

Extraction de toutes les valeurs

L'application console suivante montre comment activer les statistiques sur une connexion, extraire toutes les valeurs statistiques disponibles à l'aide de l'énumérateur et les afficher dans la fenêtre de console.

RemarqueRemarque

L'exemple suivant utilise l'exemple de base de données AdventureWorks inclus dans SQL Server 2005.La chaîne de connexion fournie dans l'exemple de code suppose que la base de données est installée et disponible sur l'ordinateur local.Si nécessaire, modifiez la chaîne de connexion en fonction de votre environnement.

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";
    }
  }
}

Voir aussi

Autres ressources

SQL Server et ADO.NET