SQL Server için Sağlayıcı İstatistikleri

.NET Framework sürüm 2.0'dan başlayarak, SQL Server için .NET Framework Veri Sağlayıcısı çalışma zamanı istatistiklerini destekler. Geçerli bir bağlantı nesnesi oluşturulduktan sonra nesnesinin SqlConnectionTrue özelliğini olarak ayarlayarak StatisticsEnabled istatistikleri etkinleştirmeniz gerekir. İstatistikler etkinleştirildikten sonra, nesnesinin yöntemi SqlConnection aracılığıyla RetrieveStatistics bir IDictionary başvuru alarak bunları "anlık görüntü" olarak gözden geçirebilirsiniz. Listede ad/değer çifti sözlük girdileri kümesi olarak numaralandırırsınız. Bu ad/değer çiftleri sıralanmamış. İstediğiniz zaman, sayaçları sıfırlamak için nesnesinin SqlConnection yöntemini çağırabilirsinizResetStatistics. İstatistik toplama etkinleştirilmemişse, bir özel durum oluşturulmaz. Ayrıca, ilk çağrılmadan StatisticsEnabled çağrılırsaRetrieveStatistics, alınan değerler her girişin başlangıç değerleridir. İstatistikleri etkinleştirir, uygulamanızı bir süre çalıştırır ve ardından istatistikleri devre dışı bırakırsanız, alınan değerler istatistiklerin devre dışı bırakıldığı noktaya kadar toplanan değerleri yansıtır. Toplanan tüm istatistiksel değerler, bağlantı başına temel alınır.

Kullanılabilir İstatistiksel Değerler

Şu anda Microsoft SQL Server sağlayıcısı tarafından sağlanan 18 farklı öğe vardır. Kullanılabilir öğe sayısına, tarafından RetrieveStatisticsdöndürülen arabirim başvurusunun IDictionary Count özelliği aracılığıyla erişilebilir. Sağlayıcı istatistiklerine yönelik tüm sayaçlar, 64 bit genişliğinde ortak dil çalışma zamanı Int64 türünü (C# ve Visual Basic'te uzun ) kullanır. int64 tarafından tanımlanan int64 veri türünün en büyük değeri. MaxValue alanı: ((2^63)-1)). Sayaçların değerleri bu en yüksek değere ulaştığında, bunlar artık doğru olarak değerlendirilmemelidir. Bu, int64 anlamına gelir . MaxValue-1((2^63)-2), tüm istatistikler için geçerli olan en büyük değerdir.

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 geçerli istatistiksel değerler açıklanmaktadır. Tek tek değerlerin anahtar adlarının, Microsoft .NET Framework'ün bölgesel sürümleri arasında yerelleştirilmediğini unutmayın.

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 deyimleri tarafından döndürülen salt okunur/salt iletme sonuçlarını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:

Sql Bağlan ion

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[] işleci (tüm aşırı yüklemeler)

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şladıktan ve istatistikleri etkinleştirdikten sonra bağlantı üzerinden yürütülen INSERT, DELETE ve UPDATE deyimlerinin 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 INSERT, DELETE ve UPDATE deyimlerinden etkilenen toplam 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 Uygulama sağlayıcıyı kullanmaya başladıktan ve istatistikleri etkinleştirdikten sonra bağlantı üzerinden yürütülen SELECT deyimlerinin sayısını döndürür. Bu, imleçlerden satırları almak için FETCH deyimlerini içerir ve select deyimlerinin sayısı, sonuna SqlDataReader ulaşıldığında güncelleştirilir.
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ç, çağıran tarafından gerçekten tüketilmeyenler bile 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 deyimleri 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 engelleme 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 işlenip işlenmediğine veya geri alınmasına bakılmaksızın begin TRAN deyimi yürütülür çalıştırılmaz 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 Alma

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 gerekli bağlantı dizesi değiştirin.

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 retrieve 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 retrieve it from a configuration file.  
      return "Data Source=localhost;Integrated Security=SSPI;" +
        "Initial Catalog=AdventureWorks";  
    }  
  }  
}  

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 gerekli bağlantı dizesi değiştirin.

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 retrieve 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 retrieve it from a configuration file.  
      return "Data Source=localhost;Integrated Security=SSPI;" +
        "Initial Catalog=AdventureWorks";  
    }  
  }  
}  

Ayrıca bkz.