Megosztás a következőn keresztül:


Az SQL Server szolgáltatói statisztikái

ADO.NET letöltése

A .NET-keretrendszer 2.0-s és .NET Core 1.0-s verziójától kezdve az SQL Serverhez készült Microsoft SqlClient-adatszolgáltató támogatja a futásidejű statisztikákat. A statisztikákat úgy kell engedélyeznie, hogy StatisticsEnabled az SqlConnectionTrue objektum tulajdonságát egy érvényes kapcsolatobjektum létrehozása után állítsa be. A statisztikák engedélyezése után "pillanatképként" tekintheti át őket az objektum metódusán IDictionary keresztüli RetrieveStatistics hivatkozás beolvasásávalSqlConnection. A listában név-/értékpár szótárbejegyzések halmazaként kell számbavételt kapnia. 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 az első meghívás nélkül StatisticsEnabled van meghívva, 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 RetrieveStatistics által visszaadott interfész referencia IDictionary tulajdonságán keresztül érhető el. 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:

A függvény szótárat használ a szolgáltató statisztikáinak visszaadásához, 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ó aktuális statisztikai értékeket ismerteti. Vegye figyelembe, hogy az egyes értékek kulcsnevei nem honosítva vannak a Microsoft .NET-keretrendszer és a .NET Core regionális verzióiban.

Kulcs neve Description
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 írásvédett/előre csak olvasható eredmények nem tekinthetők kurzornak, 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 beszerzé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 visszaadott 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 AdventureWorks-mintaadatbázist 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 sztringet a környezethez.

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 "Data Source=localhost;Integrated Security=SSPI;" +   
        "Initial Catalog=AdventureWorks";  
    }  
  }  
}  

Az összes érték beolvasása

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 AdventureWorks-mintaadatbázist 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 sztringet a környezethez.

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 "Data Source=localhost;Integrated Security=SSPI;" +   
        "Initial Catalog=AdventureWorks";  
    }  
  }  
}  

Következő lépések