Lingua
Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Microsoft.Data.SqlClient supporta le statistiche di runtime. Abilitare le statistiche impostando la proprietà StatisticsEnabled di un oggetto SqlConnection valido su True.
Dopo aver abilitato le statistiche, chiamare RetrieveStatistics per uno snapshot temporizzato nell'oggetto IDictionary . Enumerate le coppie nome/valore non ordinate per leggere i contatori. Per reimpostare i contatori, chiamare ResetStatistics.
Se non sono state abilitate le statistiche, RetrieveStatistics restituisce il valore iniziale di ogni contatore senza generare eccezioni. Dopo aver disabilitato le statistiche, i contatori mantengono i valori raccolti fino a quel punto.
Tutti i valori statistici raccolti sono su base per connessione.
Valori statistici disponibili
Il provider Microsoft SQL Server espone 18 valori statistici. Leggere la proprietà Count del dizionario per ottenere il numero di voci disponibili. Tutti i contatori usano Int64, il tipo a 64 bit denominato long in C# e Long in Visual Basic.
Il valore massimo, Int64.MaxValue, è (2^63)-1. A tale limite, i contatori non sono più precisi. Il valore massimo valido per una statistica è quindi Int64.MaxValue - 1, o (2^63)-2.
Nota
Viene usato un dizionario per restituire le statistiche del provider poiché il numero, i nomi e l'ordine delle statistiche restituite in futuro possono cambiare. Le applicazioni non devono basarsi su un valore specifico trovato nel dizionario, ma devono invece verificare se il valore è presente e di conseguenza creare un ramo.
Nella tabella seguente vengono descritti i valori statistici disponibili. I nomi delle chiavi per i singoli valori non sono localizzati nelle versioni internazionali di .NET Framework.
| Nome chiave | Descrizione |
|---|---|
BuffersReceived |
Restituisce il numero di pacchetti di flusso TDS (Tabular Data Stream) ricevuti dal provider da SQL Server dopo che l'applicazione è stata avviata usando il provider e con le statistiche abilitate. |
BuffersSent |
Restituisce il numero di pacchetti di flusso TDS inviati a SQL Server dal provider dopo che sono state abilitate le statistiche. I comandi di grandi dimensioni possono richiedere più buffer. Se, ad esempio, un comando di grandi dimensioni viene inviato al server e richiede sei pacchetti, ServerRoundtrips viene incrementato di uno e BuffersSent viene incrementato di sei. |
BytesReceived |
Restituisce il numero di byte di dati nei pacchetti TDS ricevuti dal provider da SQL Server dopo che l'applicazione ha iniziato a usare il provider e ha abilitato le statistiche. |
BytesSent |
Restituisce il numero di byte di dati inviati a SQL Server nei pacchetti di flusso TDS dopo che l'applicazione è stata avviata usando il provider e con le statistiche abilitate. |
ConnectionTime |
Il periodo di tempo (in millisecondi) durante il quale la connessione è stata aperta dopo l'abilitazione delle statistiche (tempo di connessione totale se le statistiche sono state abilitate prima di aprire la connessione). |
CursorOpens |
Restituisce il numero di volte in cui un cursore è stato aperto per la durata della connessione dopo l'avvio dell'applicazione, quando si utilizza il provider e le statistiche sono abilitate. Si noti che i risultati di sola lettura/forward-only restituiti dalle SELECT istruzioni non sono considerati cursori e pertanto non influiscono su questo contatore. |
ExecutionTime |
Restituisce l'intervallo di tempo cumulativo (in millisecondi) usato dal provider per l'elaborazione dopo l'abilitazione delle statistiche, incluso il tempo di attesa per le risposte del server nonché il tempo di esecuzione del codice nel provider stesso. Le classi che includono il codice temporale sono: SqlConnectionSqlCommandSqlDataReaderSqlDataAdapterSqlTransactionSqlCommandBuilderPer ridurre il più possibile i membri critici per le prestazioni, i membri seguenti non sono temporizzati: SqlDataReaderthis[] operatore (tutti gli overload)GetBooleanGetCharGetDateTimeGetDecimalGetDoubleGetFloatGetGuidGetInt16GetInt32GetInt64GetNameGetOrdinalGetSqlBinaryGetSqlBooleanGetSqlByteGetSqlDateTimeGetSqlDecimalGetSqlDoubleGetSqlGuidGetSqlInt16GetSqlInt32GetSqlInt64GetSqlMoneyGetSqlSingleGetSqlStringGetStringIsDBNull |
IduCount |
Restituisce il numero totale di istruzioni INSERT, DELETE e UPDATE eseguite tramite la connessione da quando l'applicazione ha iniziato a usare il provider e ha abilitato le statistiche. |
IduRows |
Restituisce il numero totale di righe interessate dalle istruzioni INSERT, DELETE e UPDATE eseguite tramite la connessione, una volta che l'applicazione ha iniziato a utilizzare il provider e ha abilitato le statistiche. |
NetworkServerTime |
Restituisce il tempo cumulativo (in millisecondi) che il provider ha trascorso in attesa di risposte dal server una volta che l'applicazione ha cominciato a utilizzare il provider e ha abilitato le statistiche. |
PreparedExecs |
Restituisce il numero di comandi preparati eseguiti attraverso la connessione, una volta che l'applicazione ha iniziato a utilizzare il provider e ha abilitato le statistiche. |
Prepares |
Restituisce il numero di istruzioni preparate attraverso la connessione una volta che l'applicazione ha iniziato a utilizzare il provider e ha abilitato le statistiche. |
SelectCount |
Restituisce il numero di SELECT istruzioni SQL eseguite tramite la connessione dopo che l'applicazione abilita le statistiche. Comprende FETCH istruzioni che recuperano righe dai cursori. Per gli statement SELECT, il provider aggiorna il conteggio quando il SqlDataReader raggiunge la fine dei risultati. |
SelectRows |
Restituisce il numero di righe selezionate dopo che l'applicazione è stata avviata usando il provider e con le statistiche abilitate. Questo numero riflette tutte le righe generate da istruzioni SQL, anche da quelle non effettivamente usate dal chiamante. La chiusura di un lettore di dati prima della lettura dell'intero set di risultati, ad esempio, non influisce sul conteggio. Sono incluse le righe recuperate dai cursori tramite FETCH istruzioni . |
ServerRoundtrips |
Restituisce il numero di volte in cui la connessione ha inviato comandi al server e ha ricevuto una risposta, dopo che l'applicazione è stata avviata usando il provider e con le statistiche abilitate. |
SumResultSets |
Restituisce il numero di set di risultati usati dopo che l'applicazione è stata avviata usando il provider e con le statistiche abilitate. Sarebbero inclusi, ad esempio, i set di risultati restituiti al client. Per i cursori, ogni operazione di fetch o block-fetch viene considerata un insieme di risultati indipendente. |
Transactions |
Restituisce il numero di transazioni utente avviate dopo che l'applicazione è stata avviata usando il provider e con le statistiche abilitate, inclusi i rollback. Se la connessione è in esecuzione con il commit automatico abilitato, ogni comando viene considerato una transazione. Questo contatore incrementa il conteggio delle transazioni non appena viene eseguita un'istruzione BEGIN TRAN , indipendentemente dal fatto che venga eseguito il commit o il rollback della transazione in un secondo momento. |
UnpreparedExecs |
Restituisce il numero di istruzioni non preparate eseguite attraverso la connessione una volta che l'applicazione ha iniziato a utilizzare il provider e ha abilitato le statistiche. |
Recupero di valori
Nell'applicazione console seguente viene illustrato come abilitare le statistiche in una connessione, recuperare quattro singoli valori statistici e scriverli nella finestra della console.
Nota
Nell'esempio seguente viene usato il database di esempio AdventureWorks incluso in SQL Server. Per la stringa di connessione specificata nel codice di esempio si presuppone che il database sia installato e disponibile nel computer locale. Modificare la stringa di connessione in base alle esigenze dell'ambiente in uso.
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 "...";
}
}
}
Recupero di tutti i valori
Nell'applicazione console seguente viene illustrato come abilitare le statistiche in una connessione, recuperare tutti i valori statistici disponibili usando l'enumeratore e scriverli nella finestra della console.
Nota
Nell'esempio seguente viene usato il database di esempio AdventureWorks incluso in SQL Server. Per la stringa di connessione specificata nel codice di esempio si presuppone che il database sia installato e disponibile nel computer locale. Modificare la stringa di connessione in base alle esigenze dell'ambiente in uso.
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 "...";
}
}
}