Sprache
Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft.Data.SqlClient unterstützt Laufzeitstatistiken. Aktivieren Sie Statistiken, indem Sie die StatisticsEnabled Eigenschaft für ein gültiges SqlConnection Objekt auf Truefestlegen.
Nachdem Sie Statistiken aktiviert haben, rufen Sie RetrieveStatistics auf, um eine Momentaufnahme zu einem bestimmten Zeitpunkt im IDictionary-Objekt zu erhalten. Zählen Sie die nicht sortierten Namen-Wert-Paare auf, um die Zähler zu lesen. Rufen Sie ResetStatisticsauf, um die Zähler zurückzusetzen.
Wenn Sie keine Statistiken aktiviert haben, gibt RetrieveStatistics den Anfangswert jedes Zählers ohne Ausnahme zurück. Nachdem Sie Statistiken deaktiviert haben, behalten die Zähler die bis zu diesem Punkt gesammelten Werte bei.
Alle erfassten statistischen Werte gelten pro Verbindung.
Verfügbare statistische Werte
Der Microsoft SQL Server-Anbieter macht 18 statistische Werte verfügbar. Lesen Sie die Count-Eigenschaft des Wörterbuchs, um die Anzahl der verfügbaren Einträge abzurufen. Alle Zähler verwenden Int64, den 64-Bit-Typ namens Long in C# und long in Visual Basic.
Der Maximalwert ist Int64.MaxValue(2^63)-1. Bei diesem Grenzwert sind Zähler nicht mehr genau. Der größte gültige Wert für eine Statistik ist daher Int64.MaxValue - 1, oder (2^63)-2.
Hinweis
Ein Wörterbuch wird für die Rückgabe von Anbieterstatistiken verwendet, da sich Anzahl, Namen und Reihenfolge der zurückgegebenen Statistiken in Zukunft ändern können. Anwendungen dürfen sich nicht darauf verlassen, dass ein bestimmter Wert im Wörterbuch zu finden ist, sondern müssen prüfen, ob der Wert vorhanden ist und entsprechend verzweigen.
In der folgenden Tabelle werden die verfügbaren statistischen Werte beschrieben. Die Schlüsselnamen für die einzelnen Werte sind in den regionalen Versionen von .NET Framework nicht lokalisiert.
| Schlüsselname | Beschreibung |
|---|---|
BuffersReceived |
Gibt die Anzahl der TDS-Pakete (Tabular Data Stream) zurück, die der Anbieter von SQL Server empfangen hat, nachdem die Anwendung die Nutzung des Anbieters gestartet und Statistiken aktiviert hat. |
BuffersSent |
Gibt die Anzahl der TDS-Pakete zurück, die vom Anbieter nach Aktivieren von Statistiken an SQL Server gesendet wurden. Für große Befehle sind möglicherweise mehrere Puffer erforderlich. Wenn z. B. ein großer Befehl an den Server gesendet wird und er sechs Pakete erfordert, wird ServerRoundtrips um 1 und BuffersSent um 6 erhöht. |
BytesReceived |
Gibt die Anzahl der Datenbytes in den TDS-Paketen zurück, die der Anbieter von SQL Server empfangen hat, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. |
BytesSent |
Gibt die Anzahl der Datenbytes zurück, die in TDS-Paketen an SQL Server gesendet wurden, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. |
ConnectionTime |
Die Zeitspanne (in Millisekunden), für die die Verbindung nach dem Aktivieren der Statistik geöffnet war (die Gesamtverbindungszeit, wenn die Statistik vor dem Öffnen der Verbindung aktiviert wurde). |
CursorOpens |
Gibt zurück, wie oft ein Cursor über die Verbindung geöffnet wurde, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. Beachten Sie, dass schreibgeschützte/vorwärtsgerichtete Ergebnisse, die von SELECT-Anweisungen zurückgegeben werden, nicht als Cursor betrachtet werden und daher diesen Zähler nicht beeinflussen. |
ExecutionTime |
Gibt die Gesamtzeitspanne (in Millisekunden) zurück, die der Anbieter seit dem Aktivieren der Statistik mit der Verarbeitung verbracht hat, einschließlich der Zeit zum Warten auf Antworten vom Server und zum Ausführen von Code im Anbieter selbst. Die Klassen, die Zeitsteuerungscode enthalten, lauten: SqlConnectionSqlCommandSqlDataReaderSqlDataAdapterSqlTransactionSqlCommandBuilderUm leistungskritische Member so klein wie möglich zu halten, werden die folgenden Member nicht zeitgesteuert: SqlDataReaderthis[] Operator (alle Überladungen)GetBooleanGetCharGetDateTimeGetDecimalGetDoubleGetFloatGetGuidGetInt16GetInt32GetInt64GetNameGetOrdinalGetSqlBinaryGetSqlBooleanGetSqlByteGetSqlDateTimeGetSqlDecimalGetSqlDoubleGetSqlGuidGetSqlInt16GetSqlInt32GetSqlInt64GetSqlMoneyGetSqlSingleGetSqlStringGetStringIsDBNull |
IduCount |
Gibt die Gesamtanzahl von INSERT, DELETEund UPDATE Anweisungen, die über die Verbindung ausgeführt werden, nachdem die Anwendung mit der Verwendung des Anbieters begonnen hat und Statistiken aktiviert hat. |
IduRows |
Gibt die Gesamtzahl der Zeilen zurück, die von INSERT-, DELETE- und UPDATE-Anweisungen betroffen sind, die über die Verbindung ausgeführt werden, nachdem die Anwendung den Anbieter verwendet und die Statistik aktiviert hat. |
NetworkServerTime |
Gibt die kumulative Zeitspanne (in Millisekunden) zurück, die der Anbieter zum Warten auf Antworten vom Server verwendet hat, seitdem die Anwendung den Anbieter verwendet und die Statistik aktiviert hat. |
PreparedExecs |
Gibt die Anzahl vorbereiteter Befehle zurück, die über die Verbindung ausgeführt wurden, sobald die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. |
Prepares |
Gibt die Anzahl der über die Verbindung vorbereiteten Anweisungen zurück, sobald die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. |
SelectCount |
Gibt die Anzahl der SELECT Anweisungen zurück, die über die Verbindung ausgeführt wurden, nachdem die Anwendung Statistiken aktiviert hat. Enthält FETCH Anweisungen, die Zeilen aus Cursorn abrufen. Bei SELECT-Anweisungen aktualisiert der Anbieter die Anzahl der Ergebnisse, wenn SqlDataReader das Ende der Ergebnisse erreicht. |
SelectRows |
Gibt die Anzahl der ausgewählten Zeilen zurück, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. Dieser Zähler spiegelt alle von SQL-Anweisungen erstellten Zeilen wider, auch solche, die vom Aufrufer nicht wirklich genutzt wurden. Beispielsweise würde das Schließen eines Datenlesers vor dem Lesen des gesamten Resultsets die Anzahl nicht beeinflussen. Dies schließt die Zeilen ein, die von Cursorn über FETCH Anweisungen abgerufen werden. |
ServerRoundtrips |
Gibt zurück, wie oft die Verbindung Befehle an den Server gesendet und eine Antwort erhalten hat, sobald die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. |
SumResultSets |
Gibt die Anzahl der Resultsets zurück, die verwendet wurden, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. Dies würde z. B. jedes an den Client zurückgegebene Resultset umfassen. Bei Cursorn wird jeder Abruf oder Blockabruf als unabhängiges Ergebnisset betrachtet. |
Transactions |
Gibt die Anzahl der Benutzertransaktionen zurück, die gestartet wurden, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken, einschließlich Rollbacks, aktiviert hat. Wenn eine Verbindung mit aktiviertem Autocommit ausgeführt wird, gilt jeder Befehl als Transaktion. Dieser Zähler erhöht den Transaktionszähler, sobald eine BEGIN TRAN-Anweisung ausgeführt wird, unabhängig davon, ob die Transaktion committet oder später rückgängig gemacht wird. |
UnpreparedExecs |
Gibt die Anzahl der über die Verbindung ausgeführten unvorbereiteten Anweisungen zurück, nachdem die Anwendung mit der Nutzung des Anbieters begonnen und Statistiken aktiviert hat. |
Abrufen eines Werts
Die folgende Konsolenanwendung zeigt, wie Statistiken über eine Verbindung aktiviert, vier einzelne Statistikwerte abgerufen und in das Konsolenfenster geschrieben werden können.
Hinweis
Im folgenden Beispiel wird die Beispieldatenbank AdventureWorks verwendet, die in SQL Server enthalten ist. In der im Beispielcode bereitgestellten Verbindungszeichenfolge wird davon ausgegangen, dass die Datenbank auf dem lokalen Computer installiert und verfügbar ist. Ändern Sie die Verbindungszeichenfolge nach Bedarf für Ihre Umgebung.
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 "...";
}
}
}
Abrufen aller Werte
Die folgende Konsolenanwendung zeigt, wie Statistiken über eine Verbindung aktiviert, alle verfügbaren Statistikwerte mit dem Enumerator abgerufen und in das Konsolenfenster geschrieben werden können.
Hinweis
Im folgenden Beispiel wird die Beispieldatenbank AdventureWorks verwendet, die in SQL Server enthalten ist. In der im Beispielcode bereitgestellten Verbindungszeichenfolge wird davon ausgegangen, dass die Datenbank auf dem lokalen Computer installiert und verfügbar ist. Ändern Sie die Verbindungszeichenfolge nach Bedarf für Ihre Umgebung.
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 "...";
}
}
}