Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőre vonatkozik: .NET
.NET Standard
Fontos
Az eseményszámlálók a .NET Core 3.1 és újabb, illetve a .NET Standard 2.1-s vagy újabb verziójának megcélzásakor érhetők el. Ez a funkció a Microsoft.Data.SqlClient érhető el.
Az eseményszámlálók segítségével Microsoft.Data.SqlClient figyelheti az alkalmazás állapotát és az általa használt kapcsolati erőforrásokat. Az eseményszámlálók monitorozhatók a .NET CLI global tools és perfView által, vagy programozottan elérhetők a EventListener névtérben lévő System.Diagnostics.Tracing osztály használatával.
Elérhető eseményszámlálók
Jelenleg 16 különböző eseményszámláló érhető el Microsoft.Data.SqlClient az alábbi táblázatban leírtak szerint:
| Név | Megjelenítendő név | Description |
|---|---|---|
| aktív fizikai kapcsolatok | A kiszolgálókhoz jelenleg létesített tényleges aktív kapcsolatok | Az adatbázis-kiszolgálók számára jelenleg megnyitott kapcsolatok száma. |
| keményen összekapcsolja | Kiszolgálók tényleges csatlakozási sebessége | Az adatbázis-kiszolgálók felé megnyitott kapcsolatok másodpercenkénti száma. |
| kemény-leválasztások | Tényleges csatlakozásbontási arány a kiszolgálókról | A másodpercenként az adatbázis-kiszolgálókhoz végrehajtott kapcsolatmegszakítások száma. |
| active-soft-connects | A kapcsolatkészletből lekért aktív kapcsolatok | A kapcsolatkészletből már megnyitott kapcsolatok száma. |
| lágyan kapcsolódik-hez | A kapcsolatkészletből lekért kapcsolatok aránya | A kapcsolatkészletből felhasznált kapcsolatok másodpercenkénti száma. |
| lágy lekapcsolások | A kapcsolatkészletnek visszaadott kapcsolatok aránya | A kapcsolatkészletbe visszaküldött kapcsolatok másodpercenkénti száma. |
| nem megosztott kapcsolatok száma | A kapcsolatkészletezést nem használó kapcsolatok száma | A nem gyűjtött aktív kapcsolatok száma. |
| készletezett kapcsolatok száma | A kapcsolatkészlet által felügyelt kapcsolatok száma | A kapcsolatkészletezési infrastruktúra által felügyelt aktív kapcsolatok száma. |
| aktív kapcsolat készlet csoportok száma | Aktív egyedi kapcsolati karakterláncok száma | Az aktív egyedi kapcsolatkészlet-csoportok száma. Ezt a számlálót az AppDomainben található egyedi kapcsolati sztring száma vezérli. |
| inaktív kapcsolati készletcsoportok száma | A metszésre váró egyedi kapcsolati karaktersorok száma | A metszésre megjelölt egyedi kapcsolatkészlet-csoportok száma. Ezt a számlálót az AppDomainben található egyedi kapcsolati sztring száma vezérli. |
| aktív kapcsolatcsomagok száma | Aktív kapcsolatkészletek száma | A kapcsolatkészletek teljes száma. |
| inaktív kapcsolatkészlet száma | Inaktív kapcsolatkészletek száma | Az inaktív kapcsolatkészletek száma, amelyeknél nem történt legutóbbi aktivitás, és várnak a felszabadításra. |
| aktív kapcsolatok száma | Aktív kapcsolatok száma | A jelenleg használatban lévő aktív kapcsolatok száma. |
| a szabad kapcsolatok száma | Kész kapcsolatok száma a kapcsolatkészletben | A kapcsolatkészletekben használható nyitott kapcsolatok száma. |
| sztáziskapcsolatok száma | Az aktuálisan készen álló kapcsolatok száma | Azoknak a kapcsolatoknak a száma, amelyek jelenleg egy művelet befejezésére várnak, és amelyek nem használhatók az alkalmazás számára. |
| visszanyert kapcsolatok száma | A GC-ből visszakövetelt kapcsolatok száma | Azoknak a kapcsolatoknak a száma, amelyeket a szemétgyűjtés során sikerült visszanyerni, ahol az alkalmazás nem hívta meg sem a Close-t, sem a Dispose-t.
Megjegyzés: A kapcsolatok nem zárhatók be vagy nem szüntethetők meg, ami rontja a teljesítményt. |
Eseményszámláló értékeinek lekérése
Az EventCounters két elsődleges módon fogyasztható: in-proc vagy out-of-proc. További információ: EventCounters használata.
Folyamaton kívüli fogyasztás
Windows rendszerben a PerfView és az Xperf használatával gyűjthet eseményszámlálók adatait. További információ: Eseménykövetés engedélyezése az SqlClientben. A dotnet-counters és dotnet-trace platformfüggetlen .NET-eszközök, amelyek eseményszámlálók adatainak figyelésére és gyűjtésére szolgálnak.
Folyamaton kívüli példa
Az alábbi parancs másodpercenként futtatja és gyűjti az SqlClient-eseményszámlálók értékeit. Ha magasabb értékre cseréli EventCounterIntervalSec=1 , kisebb nyomkövetést végezhet, és kevésbé részletes lehet a számlálóadatokban.
PerfView /onlyProviders=*Microsoft.Data.SqlClient.EventSource:EventCounterIntervalSec=1 run "<application-Path>"
Az alábbi parancs másodpercenként egyszer gyűjti össze az SqlClient eseményszámlálóit.
dotnet-trace collect --process-id <pid> --providers Microsoft.Data.SqlClient.EventSource:0:1:EventCounterIntervalSec=1
Az alábbi parancs három másodpercenként figyeli az SqlClient eseményszámlálóinak értékeit.
dotnet-counters monitor --counters Microsoft.Data.SqlClient.EventSource -p <process-id> --refresh-interval 3
Az alábbi parancs másodpercenként egyszer figyeli a kiválasztott SqlClient-eseményszámlálók értékeit.
dotnet-counters monitor --counters Microsoft.Data.SqlClient.EventSource[hard-connects,hard-disconnects] -p <process-id>
Használaton belüli használat
A számlálóértékeket az EventListener API-val használhatja fel. Az An EventListener egy in-proc módja annak, hogy bármilyen eseményt használjon fel, amelyet egy EventSource-példány írt az alkalmazásban. További információ: EventListener.
In-proc példa
Az alábbi mintakód Microsoft.Data.SqlClient.EventSource eseményeket rögzíti a következő eszközzel EventCounterIntervalSec=1. A számláló nevét és Mean értékét az egyes eseményszámláló-frissítésekre írja.
Megjegyzés:
Az esemény engedélyezésekor meg kell adnia a EventCounterIntervalSec tulajdonság értékét.
using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
// This listener class will listen for events from the SqlClientEventSource class.
// SqlClientEventSource is an implementation of the EventSource class which gives
// it the ability to create events.
public class EventCounterListener : EventListener
{
protected override void OnEventSourceCreated(EventSource eventSource)
{
// Only enable events from SqlClientEventSource.
if (eventSource.Name.Equals("Microsoft.Data.SqlClient.EventSource"))
{
var options = new Dictionary<string, string>();
// define time interval 1 second
// without defining this parameter event counters will not enabled
options.Add("EventCounterIntervalSec", "1");
// enable for the None keyword
EnableEvents(eventSource, EventLevel.Informational, EventKeywords.None, options);
}
}
// This callback runs whenever an event is written by SqlClientEventSource.
// Event data is accessed through the EventWrittenEventArgs parameter.
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
if (eventData.Payload.FirstOrDefault(p => p is IDictionary<string, object> x && x.ContainsKey("Name")) is IDictionary<string, object> counters)
{
if (counters.TryGetValue("DisplayName", out object name) && name is string cntName
&& counters.TryGetValue("Mean", out object value) && value is double cntValue)
{
// print event counter's name and mean value
Console.WriteLine($"{cntName}\t\t{cntValue}");
}
}
}
}
class Program
{
static void Main(string[] args)
{
// Create a new event listener
using (var listener = new EventCounterListener())
{
string connectionString = "Data Source=localhost; Integrated Security=true";
for (int i = 0; i < 50; i++)
{
// Open a connection
SqlConnection cnn = new SqlConnection(connectionString);
cnn.Open();
// wait for sampling interval happens
System.Threading.Thread.Sleep(500);
}
}
}
}
Actual active connections currently made to servers 0
Active connections retrieved from the connection pool 26
Number of connections not using connection pooling 0
Number of connections managed by the connection pool 26
Number of active unique connection strings 1
Number of unique connection strings waiting for pruning 0
Number of active connection pools 1
Number of inactive connection pools 0
Number of active connections 26
Number of ready connections in the connection pool 0
Number of connections currently waiting to be ready 0
...