Leistungsprofilerstellung des ODBC-Treibers

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Wichtig

Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL) oder den neuesten Microsoft ODBC Driver for SQL Server. Informationen zu SQLNCLI, die als Komponente der SQL Server-Datenbank-Engine (Versionen 2012 bis 2019) enthalten ist, finden Sie in dieser Supportlebenszyklus-Ausnahme.

Der SQL Server Native Client ODBC-Treibers kann ein Profil für zwei Arten von Leistungsdaten erstellen:

  • Abfragen mit langer Ausführungszeit

    Der Treiber kann jede Abfrage in eine Protokolldatei schreiben, die innerhalb eines angegebenen Zeitraums keine Antwort vom Server erhält. Anwendungsprogrammierer und Datenbankadministratoren können dann die protokollierten SQL-Anweisungen untersuchen, um zu ermitteln, wie sie die Leistung verbessern können.

  • Treiberleistungsdaten

    Der Treiber kann Leistungsstatistiken aufzeichnen und entweder in eine Datei schreiben oder über eine treiberspezifische Datenstruktur namens SQLPERF einer Anwendung verfügbar machen. Die Datei mit den Leistungsstatistiken ist eine durch Tabstopps getrennte Datei, die mit jeder Tabellenkalkulationsanwendung, die durch Tabstopps getrennte Dateien unterstützt (beispielsweise Microsoft Excel), problemlos analysiert werden kann.

Beide Typen der Profilerstellung werden wie folgt aktiviert:

  • Durch Herstellen einer Verbindung zu einer Datenquelle, die die Protokollierung angibt

  • Aufrufen von SQLSetConnectAttr , um treiberspezifische Attribute festzulegen, die die Profilerstellung steuern.

Jeder Anwendungsprozess erhält eine eigene Kopie des SQL Server Native Client ODBC-Treibers, und die Profilerstellung ist global auf die Kombination einer Treiberkopie und eines Anwendungsprozesses. Wenn die Profilerstellung in der Anwendung aktiviert wird, zeichnet die Profilerstellung Informationen über alle im Treiber dieser Anwendung aktiven Verbindungen auf. Das betrifft auch die Verbindungen, die die Profilerstellung nicht ausdrücklich angefordert haben.

Nachdem der Treiber ein Profilerstellungsprotokoll geöffnet hat (entweder das Protokoll für Leistungsdaten oder für eine Abfrage mit längerer Ausführungszeit), schließt er es erst wieder, wenn der Treiber vom ODBC-Treiber-Manager entladen wird, weil eine Anwendung alle Umgebungshandles freigibt, die sie im Treiber geöffnet hatte. Wenn die Anwendung ein neues Umgebungshandle öffnet, wird eine neue Kopie des Treibers geladen. Wenn die Anwendung dann entweder die Verbindung zu einer Datenquelle herstellt, die dieselbe Protokolldatei angibt, oder die treiberspezifischen Attribute auf die Protokollierung in derselben Datei festlegt, überschreibt der Treiber das alte Protokoll.

Wenn eine Anwendung mit der Profilerstellung in einer Protokolldatei beginnt und eine zweite Anwendung versucht, die Profilerstellung in derselben Protokolldatei zu beginnen, kann die zweite Anwendung keine Profildaten protokollieren. Wenn die zweite Anwendung mit der Profilerstellung beginnt, nachdem die erste Anwendung ihren Treiber entladen hat, überschreibt die zweite Anwendung die Protokolldatei der ersten Anwendung.

Wenn eine Anwendung eine Verbindung mit einer Datenquelle herstellt, für die die Profilerstellung aktiviert ist, gibt der Treiber SQL_ERROR zurück, wenn die Anwendung SQLSetConnectOption aufruft , um die Protokollierung zu starten. Ein Aufruf von SQLGetDiagRec gibt dann Folgendes zurück:

SQLState: 01000, pfNative = 0  
ErrorMsg: [Microsoft][SQL Server Native Client]  
   An error has occurred during the attempt to access  
   the log file, logging disabled.  

Der Treiber hört auf, Leistungsdaten zu erfassen, wenn ein Umgebungshandle geschlossen wird. Wenn eine SQL Server Native Client Anwendung über mehrere Verbindungen verfügt, die jeweils über ein eigenes Umgebungshandle verfügen, beendet der Treiber das Sammeln von Leistungsdaten, wenn eines der zugeordneten Umgebungshandles geschlossen wird.

Die Leistungsdaten des Treibers können entweder in der SQLPERF-Datenstruktur gespeichert oder in einer durch Tabstopps getrennten Datei protokolliert werden. Die Daten umfassen die folgenden Statistikkategorien:

  • Anwendungsprofil

  • Verbindung

  • Netzwerk

  • Zeit

In der folgenden Tabelle gelten die Beschreibungen der Felder in der SQLPERF-Datenstruktur auch für die in der Leistungsprotokolldatei erfassten Statistiken.

Anwendungsprofilstatistiken

SQLPERF-Feld BESCHREIBUNG
TimerResolution Minimale Auflösung der Uhrzeit des Servers in Millisekunden. Dies wird gewöhnlich als 0 (null) angegeben und sollte nur verwendet werden, wenn die angegebene Zahl sehr groß ist. Wenn die minimale Auflösung der Serveruhrzeit größer als das wahrscheinliche Intervall einiger der zeitgeberbasierten Statistikwerte ist, könnte die Statistikdatenmenge unnötig größer werden.
SQLidu Anzahl der INSERT-Anweisungen, DELETE-Anweisungen oder UPDATE-Anweisungen nach SQL_PERF_START
SQLiduRows Anzahl der INSERT-Anweisungen, DELETE-Anweisungen oder UPDATE-Anweisungen nach SQL_PERF_START
SQLSelects Anzahl der SELECT-Anweisungen, die nach SQL_PERF_START verarbeitet wurden
SQLSelectRows Anzahl von Zeilen, die nach SQL_PERF_START ausgewählt wurden
Transaktionen Anzahl der Benutzertransaktionen nach SQL_PERF_START, einschließlich der Rollbacks. Wenn eine ODBC-Anwendung mit SQL_AUTOCOMMIT_ON ausgeführt wird, wird jeder Befehl als Transaktion betrachtet.
SQLPrepares Anzahl der Aufrufe der FUNKTION SQLPrepare nach SQL_PERF_START.
ExecDirects Anzahl der SQLExecDirect-Aufrufe nach SQL_PERF_START.
SQLExecutes Anzahl der SQLExecute-Aufrufe nach SQL_PERF_START.
CursorOpens Anzahl der Male, die der Treiber nach SQL_PERF_START einen Servercursor geöffnet hat
CursorSize Anzahl von Zeilen in den Resultsets, die nach SQL_PERF_START von Cursorn geöffnet wurden
CursorUsed Anzahl von Zeilen, die nach SQL_PERF_START über den Treiber von Cursorn abgerufen wurden
PercentCursorUsed Entspricht CursorUsed/CursorSize. Wenn beispielsweise eine Anwendung den Treiber veranlasst, einen Servercursor zu öffnen, um "SELECT COUNT(*) FROM Authors," auszuführen, enthält das Resultset für die SELECT-Anweisung 23 Zeilen. Wenn die Anwendung dann nur drei von diesen Zeilen abruft, ist CursorUsed/CursorSize = 3/23, weshalb PercentCursorUsed = 13.043478 ist.
AvgFetchTime Entspricht SQLFetchTime/SQLFetchCount
AvgCursorSize Entspricht CursorSize/CursorOpens
AvgCursorUsed Entspricht CursorUsed/CursorOpens
SQLFetchTime Kumulierte Menge an Zeit, die für das Abrufen der Servercursor benötigt wurde
SQLFetchCount Zahl von Abrufen, die nach SQL_PERF_START für Servercursor ausgeführt wurden
CurrentStmtCount Anzahl von Anweisungshandles, die aktuell für alle im Treiber geöffneten Verbindungen geöffnet sind
MaxOpenStmt Maximale Anzahl gleichzeitig geöffneter Anweisungshandles nach SQL_PERF_START
SumOpenStmt Anzahl von Anweisungshandles, die nach SQL_PERF_START geöffnet wurden
Verbindungsstatistik:
CurrentConnectionCount Aktuelle Anzahl aktiver Verbindungshandles, die die Anwendung für den Server geöffnet hat
MaxConnectionsOpened Maximale Anzahl gleichzeitig geöffneter Verbindungshandles nach SQL_PERF_START
SumConnectionsOpened Summe der Verbindungshandles, die nach SQL_PERF_START geöffnet wurden
SumConnectionTime Menge an Zeit insgesamt, die alle Verbindungen nach SQL_PERF_START geöffnet waren. Beispiel: Wenn eine Anwendung 10 Verbindungen geöffnet und jede 5 Sekunden lang offen gehalten hat, beträgt SumConnectionTime 50 Sekunden.
AvgTimeOpened Entspricht SumConnectionsOpened/SumConnectionTime
Netzwerkstatistik:
ServerRndTrips Die Anzahl von Malen, die der Treiber Befehle an den Server gesendet und eine Antwort erhalten hat
BuffersSent Anzahl der TDS-Pakete (Tabular Data Stream), die vom Treiber nach SQL_PERF_START an SQL Server gesendet werden. Umfangreiche Befehle können mehrere Puffer belegen; wenn also ein umfangreicher Befehl an den Server gesendet wird und er sechs Pakete erfordert, wird ServerRndTrips um eins und BuffersSent um sechs erhöht.
BuffersRec Anzahl der TDS-Pakete, die vom Treiber von SQL Server empfangen wurden, nachdem die Anwendung den Treiber verwendet hat.
BytesSent Anzahl der Bytes von Daten, die in TDS-Paketen an SQL Server gesendet wurden, nachdem die Anwendung mit der Verwendung des Treibers begonnen hat.
BytesRec Anzahl der Datenbytes in TDS-Paketen, die vom Treiber von SQL Server empfangen wurden, nachdem die Anwendung mit der Verwendung des Treibers begonnen hat.

Zeitstatistiken

SQLPERF-Feld BESCHREIBUNG
msExecutionTime Die kumulierte Verarbeitungszeit des Treibers nach SQL_PERF_START, einschließlich der Wartezeit des Treibers auf Antworten vom Server
msNetworkServerTime Die kumulierte Wartezeit des Treibers auf Antworten vom Server

Weitere Informationen

SQL Server Native Client (ODBC)
Themen zur Vorgehensweise zur Profilerstellung für die Treiberleistung (ODBC)