Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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: SqlConnectionSqlCommandSqlDataReaderSqlDataAdapterSqlTransactionSqlCommandBuilderPerformans açısından kritik üyeleri olabildiğince küçük tutmak için aşağıdaki üyeler zamanlanmaz: SqlDataReaderthis[] operatör (tüm aşırı yükleme sürümleri)GetBooleanGetCharGetDateTimeGetDecimalGetDoubleGetFloatGetGuidGetInt16GetInt32GetInt64GetNameGetOrdinalGetSqlBinaryGetSqlBooleanGetSqlByteGetSqlDateTimeGetSqlDecimalGetSqlDoubleGetSqlGuidGetSqlInt16GetSqlInt32GetSqlInt64GetSqlMoneyGetSqlSingleGetSqlStringGetStringIsDBNull |
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 "...";
}
}
}