Språk
Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft.Data.SqlClient stöder körningsstatistik. Aktivera statistik genom att ange egenskapen StatisticsEnabled på ett giltigt SqlConnection-objekt till True.
När du har aktiverat statistik anropar du RetrieveStatistics för en ögonblicksbild vid en viss tidpunkt i objektet IDictionary. Enumerera dess osorterade namn/värde-par för att läsa räknarna. Om du vill återställa räknarna anropar du ResetStatistics.
Om du inte har aktiverat statistik returnerar RetrieveStatistics varje räknares ursprungliga värde utan att ett undantag genereras. När du har inaktiverat statistik behåller räknarna de värden som samlats in fram till den punkten.
Alla statistiska värden som samlas in sker per anslutning.
Tillgängliga statistiska värden
Microsoft SQL Server-providern exponerar 18 statistiska värden. Läs ordlistans Count egenskap för att hämta antalet tillgängliga poster. Alla räknare använder Int64, 64-bitarstypen med namnet long i C# och Long i Visual Basic.
Det maximala värdet, Int64.MaxValue, är (2^63)-1. Vid den gränsen är räknarna inte längre korrekta. Det största giltiga värdet för ett statistikvärde är därför Int64.MaxValue - 1, eller (2^63)-2.
Kommentar
En ordlista används för att returnera providerstatistik eftersom antalet, namnen och ordningen för den returnerade statistiken kan ändras i framtiden. Program bör inte förlita sig på att ett specifikt värde hittas i ordlistan, utan bör i stället kontrollera om värdet finns där och förgrenas därefter.
I följande tabell beskrivs tillgängliga statistiska värden. Nyckelnamnen för de enskilda värdena lokaliseras inte i regionala versioner av .NET Framework.
| Nyckelnamn | beskrivning |
|---|---|
BuffersReceived |
Returnerar antalet TDS-paket (Tabular Data Stream) som tas emot av providern från SQL Server när programmet har börjat använda providern och har aktiverat statistik. |
BuffersSent |
Returnerar antalet TDS-paket som skickas till SQL Server av providern när statistik har aktiverats. Stora kommandon kan kräva flera buffertar. Om ett stort kommando till exempel skickas till servern och det kräver sex paket ökas ServerRoundtrips det med ett och BuffersSent ökas med sex. |
BytesReceived |
Returnerar antalet byte med data i de TDS-paket som tas emot av providern från SQL Server när programmet har börjat använda providern och har aktiverat statistik. |
BytesSent |
Returnerar antalet byte med data som skickas till SQL Server i TDS-paket när programmet har börjat använda providern och har aktiverat statistik. |
ConnectionTime |
Den tid (i millisekunder) som anslutningen har öppnats efter att statistik har aktiverats (total anslutningstid om statistik aktiverades innan anslutningen öppnades). |
CursorOpens |
Returnerar antalet gånger en markör var öppen via anslutningen när programmet har börjat använda providern och har aktiverat statistik. Observera att skrivskyddade/endast framåtriktade resultat som returneras av SELECT-instruktioner inte betraktas som markörer och därför inte påverkar den här räknaren. |
ExecutionTime |
Returnerar den kumulativa tid (i millisekunder) som providern har ägnat åt att bearbeta när statistiken har aktiverats, inklusive den tid som har lagts på att vänta på svar från servern samt den tid som ägnas åt att köra kod i själva providern. Klasserna som innehåller tidskod är: SqlConnectionSqlCommandSqlDataReaderSqlDataAdapterSqlTransactionSqlCommandBuilderFör att hålla prestandakritiska komponenter så små som möjligt är följande komponenter inte tidsmätta: SqlDataReaderthis[] operator (alla överlagrade operatorer)GetBooleanGetCharGetDateTimeGetDecimalGetDoubleGetFloatGetGuidGetInt16GetInt32GetInt64GetNameGetOrdinalGetSqlBinaryGetSqlBooleanGetSqlByteGetSqlDateTimeGetSqlDecimalGetSqlDoubleGetSqlGuidGetSqlInt16GetSqlInt32GetSqlInt64GetSqlMoneyGetSqlSingleGetSqlStringGetStringIsDBNull |
IduCount |
Returnerar det totala antalet INSERT, DELETEoch UPDATE -instruktioner som körs via anslutningen när programmet har börjat använda providern och har aktiverat statistik. |
IduRows |
Returnerar det totala antalet rader som påverkas av INSERT, DELETEoch UPDATE -instruktioner som körs via anslutningen när programmet har börjat använda providern och har aktiverat statistik. |
NetworkServerTime |
Returnerar den kumulativa tid (i millisekunder) som providern spenderade på att vänta på svar från servern när programmet har börjat använda providern och har aktiverat statistik. |
PreparedExecs |
Returnerar antalet förberedda kommandon som körs via anslutningen när programmet har börjat använda providern och har aktiverat statistik. |
Prepares |
Returnerar antalet satser som förberetts via anslutningen när programmet har börjat använda providern och statistiken har aktiverats. |
SelectCount |
Returnerar antalet SELECT instruktioner som har körts via anslutningen när programmet aktiverar statistik. Innehåller FETCH instruktioner som hämtar rader från pekare. För SELECT-satser uppdaterar leverantören antalet när SqlDataReader når slutet av resultaten. |
SelectRows |
Returnerar det antal rader som valts när programmet har börjat använda providern och har aktiverat statistik. Den här räknaren återspeglar alla rader som genereras av SQL-instruktioner, även de som inte faktiskt förbrukades av anroparen. Om du till exempel stänger en dataläsare innan du läser hela resultatuppsättningen påverkas inte antalet. Detta inkluderar de rader som hämtas från kursorer via FETCH instruktioner. |
ServerRoundtrips |
Returnerar antalet gånger anslutningen skickade kommandon till servern och fick ett svar tillbaka när programmet har börjat använda providern och har aktiverat statistik. |
SumResultSets |
Returnerar antalet resultatuppsättningar som har använts när programmet har börjat använda providern och har aktiverat statistik. Detta skulle till exempel innehålla alla resultatuppsättningar som returneras till klienten. För markörer betraktas varje hämtnings- eller blockhämtningsåtgärd som en oberoende resultatuppsättning. |
Transactions |
Returnerar antalet användarinköp som startats när programmet har börjat använda providern och har aktiverat statistik, inklusive återställningar. Om en anslutning körs med automatisk incheckning på betraktas varje kommando som en transaktion. Den här räknaren ökar transaktionsantalet så snart en BEGIN TRAN instruktion körs, oavsett om transaktionen committas eller återställs senare. |
UnpreparedExecs |
Returnerar antalet oförberedda instruktioner som körs via anslutningen när programmet har börjat använda providern och har aktiverat statistik. |
Hämtar ett värde
Följande konsolprogram visar hur du aktiverar statistik på en anslutning, hämtar fyra enskilda statistikvärden och skriver ut dem till konsolfönstret.
Kommentar
I följande exempel används exempeldatabasen AdventureWorks som ingår i SQL Server. Den anslutningssträng som anges i exempelkoden förutsätter att databasen är installerad och tillgänglig på den lokala datorn. Ändra anslutningssträng efter behov för din miljö.
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 "...";
}
}
}
Hämtar alla värden
Följande konsolprogram visar hur du aktiverar statistik för en anslutning, hämtar alla tillgängliga statistikvärden med hjälp av uppräknaren och skriver dem till konsolfönstret.
Kommentar
I följande exempel används exempeldatabasen AdventureWorks som ingår i SQL Server. Den anslutningssträng som anges i exempelkoden förutsätter att databasen är installerad och tillgänglig på den lokala datorn. Ändra anslutningssträng efter behov för din miljö.
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 "...";
}
}
}