Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A .NET-keretrendszer 2.0-s verziójától kezdve az SQL Serverhez készült .NET-keretrendszer adatszolgáltatója támogatja a futtatókörnyezeti statisztikákat. Miután létrehozott egy érvényes kapcsolatobjektumot, a statisztikákat úgy kell engedélyeznie, hogy beállítja a SqlConnection objektum StatisticsEnabled tulajdonságát True értékre.
Miután a statisztikákat engedélyezte, „pillanatképként” tekintheti át őket az RetrieveStatistics hivatkozás beolvasásával az SqlConnection objektum IDictionary metódusán keresztül. A listában a neveket és értékeket párokként, szótárbejegyzésekként kell felsorolni. Ezek a név-érték párok rendezetlenek. Bármikor meghívhatja az ResetStatistics objektum metódusát a SqlConnection számlálók alaphelyzetbe állításához.
Ha a statisztikai adatgyűjtés nincs engedélyezve, a rendszer nem hoz létre kivételt. Emellett, ha RetrieveStatistics hívják meg anélkül, hogy először StatisticsEnabled-t hívták volna meg, a lekért értékek az egyes bejegyzések kezdeti értékei. Ha engedélyezi a statisztikákat, futtassa az alkalmazást egy ideig, majd tiltsa le a statisztikákat, a lekért értékek a statisztikák letiltásának idejéig gyűjtött értékeket tükrözik.
Minden összegyűjtött statisztikai érték kapcsolatonkénti alapon történik.
Elérhető statisztikai értékek
Jelenleg 18 különböző elem érhető el a Microsoft SQL Server szolgáltatójától. A rendelkezésre álló elemek száma a Count interfész IDictionary hivatkozásának tulajdonságán keresztül érhető el, amelyet a RetrieveStatistics ad vissza. A szolgáltatói statisztikák összes számlálója a közös nyelvi futtatókörnyezettípust Int64 használja (hosszú C# és Visual Basic nyelven), amely 64 bites. Az int64 adattípus maximális értéke az int64 által meghatározottak szerint. MaxValue mező: ((2^63)-1)). Ha a számlálók értékei elérik ezt a maximális értéket, a továbbiakban nem tekinthetők pontosnak. Ez azt jelenti, hogy int64 . A MaxValue-1((2^63)-2) gyakorlatilag minden statisztika legnagyobb érvényes értéke.
Megjegyzés
Egy szótárat használnak a szolgáltatói statisztikák visszaadására, mert a visszaadott statisztikák száma, neve és sorrendje a jövőben változhat. Az alkalmazásoknak nem szabad a szótárban található adott értékre támaszkodniuk, hanem ellenőriznie kell, hogy az érték létezik-e, és ennek megfelelően ágaznak-e el.
Az alábbi táblázat a rendelkezésre álló statisztikai értékeket ismerteti. Az egyes értékek kulcsnevei nem honosítva vannak a .NET-keretrendszer regionális verzióiban.
| Név kulcs | Leírás |
|---|---|
BuffersReceived |
A szolgáltató által az SQL Serverről fogadott táblázatos adatfolyam-(TDS-) csomagok számát adja vissza, miután az alkalmazás megkezdte a szolgáltató használatát, és engedélyezte a statisztikákat. |
BuffersSent |
A statisztikai adatok engedélyezése után a szolgáltató által az SQL Servernek küldött TDS-csomagok számát adja vissza. A nagy parancsok több puffert is igényelhetnek. Ha például egy nagy parancsot küldenek a kiszolgálónak, és hat csomagra van szükség, ServerRoundtrips a rendszer eggyel növeli, és BuffersSent hattal növeli. |
BytesReceived |
A szolgáltató által az SQL Serverről fogadott TDS-csomagokban lévő adatok bájtjainak számát adja vissza, miután az alkalmazás használatba vette a szolgáltatót, és engedélyezte a statisztikákat. |
BytesSent |
Az SQL Servernek TDS-csomagokban küldött adatok bájtjainak számát adja vissza, miután az alkalmazás elkezdte használni a szolgáltatót, és engedélyezte a statisztikákat. |
ConnectionTime |
Az az idő (ezredmásodpercben), amelyet a kapcsolat a statisztikák engedélyezése után nyitott meg (teljes kapcsolati idő, ha a statisztikát engedélyezték a kapcsolat megnyitása előtt). |
CursorOpens |
Azt adja vissza, hogy a kurzor hányszor volt megnyitva a kapcsolaton keresztül, miután az alkalmazás elkezdte használni a szolgáltatót, és engedélyezte a statisztikákat. Vegye figyelembe, hogy a SELECT utasítások által visszaadott csak olvasható/előre haladott eredmények nem kezelhetők kurzorként, ezért nem befolyásolják ezt a számlálót. |
ExecutionTime |
Azt az összesített időt adja vissza (ezredmásodpercben), amelyet a szolgáltató a statisztikák engedélyezése után töltött feldolgozással, beleértve a kiszolgálótól érkező válaszokra való várakozást, valamint a kódnak a szolgáltatóban való végrehajtásával töltött időt. Az időzítési kódot tartalmazó osztályok a következők: Sql-kapcsolat SqlCommand SqlDataReader SqlDataAdapter SqlTransaction SqlCommandBuilder A teljesítmény szempontjából kritikus tagok lehető legkisebb számának megtartása érdekében a következő tagok nem időznek: SqlDataReader ez[] operátor (minden túlterhelés) GetBoolean Karakter lekérése GetDateTime GetDecimal GetDouble GetFloat GetGuid GetInt16 GetInt32 GetInt64 GetName GetOrdinal GetSqlBinary GetSqlBoolean GetSqlByte SzerezdMegAzSqlDátumIdőt SqlTizedecimális értéklekérése GetSqlDouble GetSqlGuid GetSqlInt16 GetSqlInt32 GetSqlInt64 GetSqlMoney GetSqlSingle GetSqlString GetString IsDBNull |
IduCount |
A kapcsolaton keresztül végrehajtott INSERT, DELETE és UPDATE utasítások teljes számát adja vissza, miután az alkalmazás elkezdte használni a szolgáltatót, és engedélyezte a statisztikákat. |
IduRows |
A kapcsolaton keresztül végrehajtott INSERT, DELETE és UPDATE utasítások által érintett sorok teljes számát adja vissza, miután az alkalmazás használatba vette a szolgáltatót, és engedélyezte a statisztikákat. |
NetworkServerTime |
Azt az összesített időt adja vissza (ezredmásodpercben), amelyet a szolgáltató a kiszolgálótól kapott válaszokra való várakozással töltött, miután az alkalmazás használatba vette a szolgáltatót, és engedélyezte a statisztikákat. |
PreparedExecs |
A kapcsolaton keresztül végrehajtott előkészített parancsok számát adja vissza, miután az alkalmazás megkezdte a szolgáltató használatát, és engedélyezte a statisztikákat. |
Prepares |
A kapcsolaton keresztül készített utasítások számát adja vissza, miután az alkalmazás megkezdte a szolgáltató használatát, és engedélyezte a statisztikákat. |
SelectCount |
A kapcsolaton keresztül végrehajtott SELECT-utasítások számát adja vissza, miután az alkalmazás elkezdte használni a szolgáltatót, és engedélyezte a statisztikákat. Ide tartoznak a sorokat a kurzorokból lekérni kívánt FETCH utasítások, a SELECT utasítások száma pedig a végérték SqlDataReader elérésekor frissül. |
SelectRows |
A kiválasztott sorok számát adja vissza, miután az alkalmazás megkezdte a szolgáltató használatát, és engedélyezte a statisztikákat. Ez a számláló az SQL-utasítások által létrehozott összes sort tükrözi, még azokat is, amelyeket a hívó ténylegesen nem használt fel. Az adatolvasó bezárása például a teljes eredményhalmaz elolvasása előtt nem befolyásolja a darabszámot. Ide tartoznak a kurzorokból a FETCH utasításokon keresztül lekért sorok is. |
ServerRoundtrips |
Azt adja vissza, hogy a kapcsolat hányszor küldött parancsokat a kiszolgálónak, és kapott választ, miután az alkalmazás elkezdte használni a szolgáltatót, és engedélyezte a statisztikákat. |
SumResultSets |
Azoknak az eredményhalmazoknak a számát adja vissza, amelyeket az alkalmazás a szolgáltató használatának megkezdése és a statisztikák engedélyezése után használt. Ilyen például az ügyfélnek visszaküldött eredményhalmaz. A kurzorok esetében minden beolvasási vagy blokklehívási művelet független eredményhalmaznak minősül. |
Transactions |
Azon felhasználói tranzakciók számát adja vissza, amelyek akkor kezdődtek, amikor az alkalmazás használatba vette a szolgáltatót, és engedélyezte a statisztikákat, beleértve a visszaállításokat is. Ha egy kapcsolat automatikus véglegesítéssel fut, az egyes parancsok tranzakciónak minősülnek. Ez a számláló a BEGIN TRAN utasítás végrehajtása után azonnal növeli a tranzakció számát, függetlenül attól, hogy a tranzakció véglegesítése vagy későbbi visszaállítása történik-e. |
UnpreparedExecs |
A kapcsolaton keresztül végrehajtott nem előkészített utasítások számát adja vissza, miután az alkalmazás elkezdte használni a szolgáltatót, és engedélyezte a statisztikákat. |
Érték beolvasása
Az alábbi konzolalkalmazás bemutatja, hogyan engedélyezheti a statisztikát egy kapcsolaton, hogyan kérdezhet le négy egyedi statisztikai értéket, és hogyan írhatja ki őket a konzolablakba.
Megjegyzés
Az alábbi példa az SQL Serverhez mellékelt mintaadatbázist AdventureWorks használja. A mintakódban megadott kapcsolati sztring feltételezi, hogy az adatbázis telepítve van, és elérhető a helyi számítógépen. Szükség szerint módosítsa a kapcsolati karakterláncot a környezethez.
Option Strict On
Imports System
Imports System.Collections
Imports System.Data
Imports System.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 System.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 "...";
}
}
}
Az összes érték lekérdezése
Az alábbi konzolalkalmazás bemutatja, hogyan engedélyezheti a statisztikát egy kapcsolaton, hogyan kérdezheti le az összes elérhető statisztikai értéket az enumerátor használatával, és hogyan írhatja őket a konzolablakba.
Megjegyzés
Az alábbi példa az SQL Serverhez mellékelt mintaadatbázist AdventureWorks használja. A mintakódban megadott kapcsolati sztring feltételezi, hogy az adatbázis telepítve van, és elérhető a helyi számítógépen. Szükség szerint módosítsa a kapcsolati karakterláncot a környezethez.
Option Strict On
Imports System
Imports System.Collections
Imports System.Data
Imports System.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 System.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 "...";
}
}
}