Leistungsprofilerstellung des ODBC-Treibers
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Wichtig
SQL Server Native Client (SNAC) wird nicht ausgeliefert mit:
- SQL Server 2022 (16.x) und höhere Versionen
- SQL Server Management Studio 19 und höhere Versionen
Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der ältere Microsoft OLE DB-Anbieter für SQL Server (SQLOLEDB) werden für die entwicklung neuer Anwendungen nicht empfohlen.
Für neue Projekte verwenden Sie einen der folgenden Treiber:
Informationen zu SQLNCLI, das als Komponente der SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Ausnahme für den Supportlebenszyklus.
Der SQL Server Native Client ODBC-Treiber kann zwei Arten von Leistungsdaten profilen:
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 zum Festlegen treiberspezifischer Attribute, die die Profilerstellung steuern.
Jeder Anwendungsprozess erhält eine eigene Kopie des SQL Server Native Client ODBC-Treibers und die Profilerstellung ist global für 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, die Profilerstellung aktiviert hat, 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, jedes mit einem eigenen Umgebungshandle, beendet der Treiber das Sammeln von Leistungsdaten, wenn eine der zugehörigen 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
Network
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 | Die Anzahl der SQLPrepare-Funktionsaufrufe nach SQL_PERF_START. |
ExecDirects | Anzahl der SQLExecDirect-Aufrufe nach SQL_PERF_START. |
SQLExecutes | Die 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 |
Verbindungsstatistiken: | |
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 nach SQL_PERF_START vom Treiber an SQL Server gesendet wurden. 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 | Die Anzahl der TDS-Pakete, die vom Treiber von SQL Server empfangen wurden, nachdem die Anwendung mit dem Treiber begonnen hat. |
BytesSent | Die Anzahl der Bytes, die an SQL Server in TDS-Paketen gesendet wurden, nachdem die Anwendung mit dem Treiber begonnen hat. |
BytesRec | Anzahl der Daten 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)