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)
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für