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