Dil

SQL Server için sağlayıcı istatistikleri

Microsoft. Data.SqlClient çalışma zamanı istatistiklerini destekler. Geçerli bir StatisticsEnabled nesnesinde SqlConnection özelliğini True olarak ayarlayarak istatistikleri etkinleştirin.

İstatistikleri etkinleştirdikten sonra, IDictionary nesnesinde belirli bir zamandaki anlık görüntü için RetrieveStatistics çağrısı yapın. Sayaçları okumak için sıralanmamış ad/değer çiftlerini listeleyin. Sayaçları sıfırlamak için ResetStatistics çağırın.

İstatistikleri etkinleştirmediyseniz, RetrieveStatistics özel durum olmadan her sayacın başlangıç değerini döndürür. İstatistikleri devre dışı bırakdıktan sonra sayaçlar bu noktaya kadar toplanan değerleri korur.

Toplanan tüm istatistiksel değerler, her bağlantı için toplanmıştır.

Kullanılabilir İstatistiksel Değerler

Microsoft SQL Server sağlayıcısı 18 istatistiksel değer sunar. Kullanılabilir girdi sayısını almak için sözlüğün Count özelliğini okuyun. Tüm sayaçlar, C# dilinde long ve Visual Basic dilinde Int64 olarak adlandırılan 64 bit türü olan Long kullanır.

Maksimum değer, Int64.MaxValue, (2^63)-1'dir. Bu sınırda sayaçlar artık doğru değildir. Bu nedenle, bir istatistik için en büyük geçerli değer Int64.MaxValue - 1 ya da (2^63)-2'dir.

Not

Döndürülen istatistiklerin sayısı, adları ve sırası gelecekte değişebileceğinden, sağlayıcı istatistiklerini döndürmek için sözlük kullanılır. Uygulamalar sözlükte bulunan belirli bir değere güvenmemeli, bunun yerine değerin orada olup olmadığını denetlemeli ve buna göre dallanmalıdır.

Aşağıdaki tabloda kullanılabilir istatistiksel değerler açıklanmaktadır. Tek tek değerlerin anahtar adları. .NET Framework'ün bölgesel sürümleri arasında yerelleştirilmemiştir.

Anahtar Adı Açıklama
BuffersReceived Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra sağlayıcı tarafından SQL Server'dan alınan tablosal veri akışı (TDS) paketlerinin sayısını döndürür.
BuffersSent İstatistikler etkinleştirildikten sonra sağlayıcı tarafından SQL Server'a gönderilen TDS paketlerinin sayısını döndürür. Büyük komutlar birden çok arabellek gerektirebilir. Örneğin, büyük bir komut sunucuya gönderilirse ve altı paket gerektiriyorsa, ServerRoundtrips bir artırılır ve BuffersSent altı artırılır.
BytesReceived Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra sağlayıcı tarafından SQL Server'dan alınan TDS paketlerindeki veri bayt sayısını döndürür.
BytesSent Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra TDS paketlerinde SQL Server'a gönderilen veri bayt sayısını döndürür.
ConnectionTime İstatistikler etkinleştirildikten sonra bağlantının açıldığı süre (milisaniye cinsinden) (bağlantıyı açmadan önce istatistikler etkinleştirildiyse toplam bağlantı süresi).
CursorOpens Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra bir imlecin bağlantı üzerinden kaç kez açıldığını döndürür.

SELECT ifadeleri tarafından döndürülen salt okunur/yalnızca ileri sonuçların imleç olarak kabul edilmediğini ve bu nedenle bu sayacı etkilemediğini unutmayın.
ExecutionTime İstatistikler etkinleştirildikten sonra sağlayıcının işlemek için harcadığı toplam süreyi (milisaniye cinsinden) döndürür. Bu süre, sunucudan gelen yanıtları beklerken harcanan süre ve sağlayıcının kendisinde kod yürütülürken harcanan süre de dahil olmak üzere.

Zamanlama kodunu içeren sınıflar şunlardır:

SqlConnection

SqlCommand

SqlDataReader

SqlDataAdapter

SqlTransaction

SqlCommandBuilder

Performans açısından kritik üyeleri olabildiğince küçük tutmak için aşağıdaki üyeler zamanlanmaz:

SqlDataReader

this[] operatör (tüm aşırı yükleme sürümleri)

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 Uygulama sağlayıcıyı kullanmaya başlayıp istatistikleri etkinleştirdikten sonra, bağlantı üzerinden yürütülen INSERT, DELETE ve UPDATE ifadelerinin toplam sayısını döndürür.
IduRows Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra bağlantı üzerinden yürütülen , INSERTve DELETE deyimlerinden etkilenen UPDATEtoplam satır sayısını döndürür.
NetworkServerTime Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra sağlayıcının sunucudan yanıt beklerken harcadığı toplam süreyi (milisaniye cinsinden) döndürür.
PreparedExecs Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra bağlantı üzerinden yürütülen hazırlanmış komutların sayısını döndürür.
Prepares Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra bağlantı üzerinden hazırlanan deyimlerin sayısını döndürür.
SelectCount SELECT, uygulama istatistikleri etkinleştirdikten sonra bağlantı üzerinden yürütülen deyim sayısını döndürür. FETCH imleçlerden satır alan deyimleri içerir. SELECT deyimleri için sağlayıcı, SqlDataReader sonuçların sonuna ulaştığında sayıyı güncelleştirir.
SelectRows Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra seçilen satır sayısını döndürür. Bu sayaç, talep eden tarafından gerçekten kullanılmamış olanlar dahil, SQL deyimleri tarafından oluşturulan tüm satırları yansıtır. Örneğin, sonuç kümesinin tamamını okumadan önce bir veri okuyucuyu kapatmak sayıyı etkilemez. Bu, FETCH ifadeleri aracılığıyla imleçlerden alınan satırları içerir.
ServerRoundtrips Bağlantının sunucuya komut gönderme sayısını döndürür ve uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra yanıt alır.
SumResultSets Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra kullanılan sonuç kümelerinin sayısını döndürür. Örneğin bu, istemciye döndürülen tüm sonuç kümelerini içerir. İmleçler için her getirme veya blok getirme işlemi bağımsız bir sonuç kümesi olarak kabul edilir.
Transactions Uygulama sağlayıcıyı kullanmaya başladıktan ve geri alma işlemleri de dahil olmak üzere istatistikleri etkinleştirdikten sonra başlatılan kullanıcı işlemlerinin sayısını döndürür. Otomatik işleme açıkken bir bağlantı çalışıyorsa, her komut bir işlem olarak kabul edilir.

Bu sayaç, işlemin daha sonra onaylanıp onaylanmadığına veya geri alınmasına bakılmaksızın, bir BEGIN TRAN deyim yürütülür yürütülmez işlem sayısını artırır.
UnpreparedExecs Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra bağlantı üzerinden yürütülen hazır olmayan deyimlerin sayısını döndürür.

Değer Elde Etme

Aşağıdaki konsol uygulaması bir bağlantıda istatistikleri etkinleştirmeyi, dört ayrı istatistik değerini almayı ve bunları konsol penceresine yazmayı gösterir.

Not

Aşağıdaki örnekte SQL Server ile birlikte verilen örnek AdventureWorks veritabanı kullanılmaktadır. Örnek kodda sağlanan bağlantı dizesi veritabanının yüklü ve yerel bilgisayarda kullanılabilir olduğu varsayılır. Ortamınız için bağlantı dizesini gerektiği gibi değiştirin.

Option Strict On

Imports System
Imports System.Collections
Imports System.Data
Imports Microsoft.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 retrieve it from a configuration file.
    Return "..."
  End Function
End Module
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using Microsoft.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 retrieve it from a configuration file.
      return "...";
    }
  }
}

Tüm Değerleri Alma

Aşağıdaki konsol uygulaması bir bağlantıda istatistikleri etkinleştirmeyi, numaralandırıcıyı kullanarak tüm kullanılabilir istatistik değerlerini almayı ve bunları konsol penceresine yazmayı gösterir.

Not

Aşağıdaki örnekte SQL Server ile birlikte verilen örnek AdventureWorks veritabanı kullanılmaktadır. Örnek kodda sağlanan bağlantı dizesi veritabanının yüklü ve yerel bilgisayarda kullanılabilir olduğu varsayılır. Ortamınız için bağlantı dizesini gerektiği gibi değiştirin.

Option Strict On

Imports System
Imports System.Collections
Imports System.Data
Imports Microsoft.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 retrieve it from a configuration file.
    Return "..."
  End Function
End Module
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Microsoft.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 retrieve it from a configuration file.
      return "...";
    }
  }
}

Ayrıca bkz.