Jazyk
Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Microsoft.Data.SqlClient podporuje statistiky za běhu. Povolte statistiky nastavením StatisticsEnabled vlastnosti platného objektu SqlConnection na hodnotu True.
Po povolení statistiky zavolejte RetrieveStatistics pro snímek k určitému bodu v čase v objektu IDictionary. Vyjmenujte jeho neseřazené páry název/hodnota a přečtěte čítače. Chcete-li resetovat čítače, zavolejte ResetStatistics.
Pokud jste nepovolili statistiku, RetrieveStatistics vrátí počáteční hodnotu každého čítače, aniž by vyvolal výjimku. Po zakázání statistiky budou čítače uchovávat hodnoty shromážděné do té chvíle.
Všechny shromážděné statistické hodnoty jsou založené na jednotlivých připojeních.
Dostupné statistické hodnoty
Poskytovatel Microsoft SQL Server zpřístupňuje 18 statistických hodnot. Přečtěte si slovníkovou vlastnost Count a získejte počet dostupných položek. Všechny čítače používají Int64, 64bitový typ pojmenovaný long v jazyce C# a Long v Visual Basic.
Maximální hodnota, Int64.MaxValueje (2^63)-1. Při dosažení tohoto limitu už nejsou čítače přesné. Nejvyšší platná hodnota statistiky je tedy Int64.MaxValue - 1, nebo (2^63)-2.
Poznámka:
Slovník se používá k vrácení statistiky poskytovatele, protože počet, názvy a pořadí vrácených statistik se mohou v budoucnu změnit. Aplikace by se neměly spoléhat na konkrétní hodnotu, která se nachází ve slovníku, ale měly by místo toho zkontrolovat, zda hodnota existuje, a podle toho se rozhodnout.
Následující tabulka popisuje dostupné statistické hodnoty. Názvy klíčů pro jednotlivé hodnoty nejsou lokalizovány napříč regionálními verzemi rozhraní .NET Framework.
| Název klíče | Popis |
|---|---|
BuffersReceived |
Vrátí počet paketů TDS (tabulkových datových proudů) přijatých poskytovatelem z SQL Serveru po spuštění aplikace pomocí zprostředkovatele a povolí statistiky. |
BuffersSent |
Vrátí počet paketů TDS odesílaných na SQL Server poskytovatelem po povolení statistiky. Velké příkazy můžou vyžadovat více vyrovnávacích pamětí. Pokud je například na server odeslán velký příkaz a vyžaduje šest paketů, ServerRoundtrips zvýší se o jeden a BuffersSent zvýší se o šest. |
BytesReceived |
Vrátí počet bajtů dat v paketech TDS přijatých poskytovatelem z SQL Serveru, jakmile aplikace začne používat zprostředkovatele a povolí statistiky. |
BytesSent |
Vrátí počet bajtů dat odesílaných na SQL Server v paketech TDS po spuštění aplikace pomocí zprostředkovatele a povolí statistiky. |
ConnectionTime |
Doba otevření připojení (v milisekundách), po povolení statistiky (celková doba připojení, pokud byla před otevřením připojení povolena statistika). |
CursorOpens |
Vrátí počet otevření kurzoru přes připojení, jakmile aplikace začne používat poskytovatele a povolila statistiky. Všimněte si, že výsledky jen pro čtení nebo forward-only vrácené příkazy SELECT nejsou považovány za kurzory, a proto nemají vliv na tento čítač. |
ExecutionTime |
Vrátí kumulativní dobu (v milisekundách), kterou poskytovatel strávil zpracováním, jakmile je povolená statistika, včetně času stráveného čekáním na odpovědi ze serveru a času stráveného spuštěním kódu v samotném poskytovateli. Třídy, které zahrnují kód časování, jsou: SqlConnectionSqlCommandSqlDataReaderSqlDataAdapterSqlTransactionSqlCommandBuilderAby byly výkonově kritické prvky co nejmenší, následující prvky nejsou měřeny: SqlDataReaderthis[] operátor (všechna přetížení)GetBooleanGetCharGetDateTimeGetDecimalGetDoubleGetFloatGetGuidGetInt16GetInt32GetInt64GetNameGetOrdinalGetSqlBinaryGetSqlBooleanGetSqlByteGetSqlDateTimeGetSqlDecimalGetSqlDoubleGetSqlGuidGetSqlInt16GetSqlInt32GetSqlInt64GetSqlMoneyGetSqlSingleGetSqlStringGetStringIsDBNull |
IduCount |
Vrátí celkový počet INSERTpříkazů a DELETEUPDATE příkazů spuštěných prostřednictvím připojení, jakmile aplikace začne používat poskytovatele a povolí statistiky. |
IduRows |
Vrátí celkový počet řádků ovlivněných parametrem INSERT, DELETEa UPDATE příkazy spuštěné prostřednictvím připojení, jakmile aplikace začne používat poskytovatele a povolí statistiky. |
NetworkServerTime |
Vrátí kumulativní dobu (v milisekundách), kterou poskytovatel strávil čekáním na odpovědi ze serveru, jakmile aplikace začne používat poskytovatele a povolila statistiky. |
PreparedExecs |
Vrátí počet připravených příkazů spuštěných prostřednictvím připojení, jakmile aplikace začne používat poskytovatele a povolí statistiky. |
Prepares |
Vrátí počet příkazů připravených prostřednictvím připojení, jakmile aplikace začne používat poskytovatele a povolí statistiky. |
SelectCount |
Vrátí počet SELECT příkazů SQL spuštěných prostřednictvím připojení, jakmile aplikace povolí statistiky. Obsahuje FETCH příkazy, které načítají řádky z kurzorů. U SELECT statementů poskytovatel aktualizuje počet, když SqlDataReader dosáhne konce výsledků. |
SelectRows |
Vrátí počet řádků vybraných po spuštění aplikace pomocí zprostředkovatele a povolí statistiky. Tento čítač odráží všechny řádky vygenerované příkazy SQL, i ty, které volající ve skutečnosti nepoužil. Zavření čtečky dat před přečtením celé sady výsledků by například nemělo vliv na počet. To zahrnuje řádky načtené z kurzorů prostřednictvím příkazů SQL FETCH. |
ServerRoundtrips |
Vrátí počet, kolikrát připojení odeslalo příkazy na server a obdrželo odpověď poté, co aplikace začala používat poskytovatele a povolila statistiky. |
SumResultSets |
Vrátí počet sad výsledků, které se použily, jakmile aplikace začne používat zprostředkovatele, a povolí statistiky. To by například zahrnovalo jakoukoli sadu výsledků vrácenou klientovi. U kurzorů se každá operace načtení nebo blokového načtení považuje za nezávislou sadu výsledků. |
Transactions |
Vrátí počet uživatelských transakcí spuštěných po spuštění aplikace pomocí zprostředkovatele a má povolené statistiky, včetně vrácení zpět. Pokud je připojení spuštěné s automatickým potvrzením, každý příkaz se považuje za transakci. Tento čítač zvýší počet transakcí ihned po provedení BEGIN TRAN statementu bez ohledu na to, zda je transakce potvrzena nebo vrácena zpět později. |
UnpreparedExecs |
Vrátí počet nepreparovaných příkazů spuštěných prostřednictvím připojení, jakmile aplikace začne používat poskytovatele a povolí statistiky. |
Načtení hodnoty
Následující konzolová aplikace ukazuje, jak povolit statistiky připojení, načíst čtyři jednotlivé statistické hodnoty a zapisovat je do okna konzoly.
Poznámka:
Následující příklad používá ukázkovou AdventureWorks databázi, která je součástí SQL Serveru. Připojovací řetězec poskytnuté v ukázkovém kódu předpokládá, že je databáze nainstalovaná a dostupná v místním počítači. Upravte připojovací řetězec podle potřeby pro vaše prostředí.
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 "...";
}
}
}
Načítání všech hodnot
Následující konzolová aplikace ukazuje, jak povolit statistiky připojení, načíst všechny dostupné statistické hodnoty pomocí enumerátoru a zapisovat je do okna konzoly.
Poznámka:
Následující příklad používá ukázkovou AdventureWorks databázi, která je součástí SQL Serveru. Připojovací řetězec poskytnuté v ukázkovém kódu předpokládá, že je databáze nainstalovaná a dostupná v místním počítači. Upravte připojovací řetězec podle potřeby pro vaše prostředí.
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 "...";
}
}
}