Megosztás:


Eseményszámlálók az SqlClientben

A következőre vonatkozik: .NET .NET Standard

ADO.NET letöltése

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
...

Lásd még