Profilage des performances du pilote ODBC
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Important
SQL Server Native Client (SNAC) n’est pas fourni avec :
- 2022 - SQL Server 16 (16.x) et versions ultérieures
- SQL Server Management Studio 19 et versions ultérieures
SQL Server Native Client (SQLNCLI ou SQLNCLI11) et le fournisseur Microsoft OLE DB hérité pour SQL Server (SQLOLEDB) ne sont pas recommandés pour le nouveau développement d’applications.
Pour les nouveaux projets, utilisez l'un des pilotes suivants :
Pour SQLNCLI qui est fourni en tant que composant du moteur de base de données SQL Server (versions 2012 à 2019), consultez cette exception du cycle de vie du support.
Le pilote ODBC SQL Server Native Client peut profiler deux types de données de performances :
Requêtes longues.
Le pilote peut écrire dans un fichier journal les requêtes qui n'obtiennent pas de réponse du serveur dans un délai spécifique. Les programmeurs d'applications ou les administrateurs de base de données peuvent ensuite faire des recherches sur chaque instruction SQL enregistrée pour déterminer comment améliorer ses performances.
Données de performances du pilote.
Le pilote peut enregistrer des statistiques de performance et les écrire dans un fichier ou les rendre accessibles à une application via une structure de données spécifique au pilote nommée SQLPERF. Le fichier contenant les statistiques de performance est un fichier délimité par des tabulations qui peut être analysé facilement à l'aide d'un tableur prenant en charge les fichiers délimités par des tabulations, par exemple Microsoft Excel.
Les deux types de profilages peuvent être activés par :
connexion à une source de données qui spécifie l'enregistrement ;
Appel de SQLSetConnectAttr pour définir des attributs spécifiques au pilote qui contrôlent le profilage.
Chaque processus d’application obtient sa propre copie du pilote ODBC SQL Server Native Client, et le profilage est global à la combinaison d’une copie de pilote et d’un processus d’application. Lorsque le profilage est activé dans l'application, il enregistre les informations relatives à toutes les connexions actives dans le pilote à partir de cette application. Même les connexions qui n'ont pas demandé spécifiquement de profilage sont incluses.
Une fois que le pilote a ouvert un journal de profilage (journal des données de performances ou journal des requêtes longues), il ne ferme pas ce journal tant qu'il n'est pas déchargé par le gestionnaire de pilotes ODBC, lorsqu'une application libère tous les handles d'environnement ouverts dans le pilote. Si l'application ouvre un nouveau handle d'environnement, une nouvelle copie du pilote est chargée. Si l'application se connecte ensuite à une source de données qui spécifie le même fichier journal ou définit les attributs spécifiques au pilote à enregistrer dans le même fichier, le pilote remplace l'ancien journal.
Si une application démarre le profilage dans un fichier journal et si une seconde application essaie de démarrer le profilage dans le même fichier journal, la seconde application n'est pas en mesure d'enregistrer les données de profilage. Si la seconde application démarre le profilage une fois que la première application a déchargé son pilote, la seconde application remplace le fichier journal de la première application.
Si une application se connecte à une source de données avec profilage activée, le pilote retourne SQL_ERROR si l’application appelle SQLSetConnectOption pour démarrer la journalisation. Un appel à SQLGetDiagRec retourne ensuite les éléments suivants :
SQLState: 01000, pfNative = 0
ErrorMsg: [Microsoft][SQL Server Native Client]
An error has occurred during the attempt to access
the log file, logging disabled.
Le pilote cesse de rassembler les données de performances lorsqu'un handle d'environnement est fermé. Si une application SQL Server Native Client dispose de plusieurs connexions, chacune avec son propre handle d’environnement, le pilote cesse de collecter des données de performances lorsque l’un des handles d’environnement associés est fermé.
Les données de performances du pilote peuvent être stockées dans la structure de données SQLPERF ou être enregistrées dans un fichier délimité par des tabulations. Les données incluent les catégories suivantes de statistiques :
Profil de l'application
Connection
Network (Réseau)
Temps
Dans le tableau suivant, les descriptions des champs de la structure de données SQLPERF s'appliquent également aux statistiques enregistrées dans le fichier journal de performance.
Statistiques relatives au profil de l'application
Champ SQLPERF | Description |
---|---|
TimerResolution | Résolution minimale de l'heure du serveur en millisecondes. Elle est signalée habituellement sous la forme 0 (zéro) et doit être prise en considération uniquement si le nombre indiqué est de grande taille. Si la résolution minimale de l'heure du serveur est supérieure à l'intervalle probable de certaines statistiques basées sur l'horloge, il est possible qu'il y ait augmentation de ces statistiques. |
SQLidu | Nombre d'instructions INSERT, DELETE ou UPDATE après SQL_PERF_START. |
SQLiduRows | Nombre d'instructions INSERT, DELETE ou UPDATE après SQL_PERF_START. |
SQLSelects | Nombre d'instructions SELECT traitées après SQL_PERF_START. |
SQLSelectRows | Nombre de lignes sélectionnées après SQL_PERF_START. |
Transactions | Nombre de transactions utilisateur après SQL_PERF_START, y compris les restaurations. Lorsqu'une application ODBC s'exécute avec SQL_AUTOCOMMIT_ON, chaque commande est considérée comme une transaction. |
SQLPrepares | Nombre d’appels de fonction SQLPrepare après SQL_PERF_START. |
ExecDirects | Nombre d’appels SQLExecDirect après SQL_PERF_START. |
SQLExecutes | Nombre d’appels SQLExecute après SQL_PERF_START. |
CursorOpens | Nombre de fois où le pilote a ouvert un curseur côté serveur après SQL_PERF_START. |
CursorSize | Nombre de lignes dans les jeux de résultats ouverts par les curseurs après SQL_PERF_START. |
CursorUsed | Nombre de lignes réellement récupérées par le pilote à partir des curseurs après SQL_PERF_START. |
PercentCursorUsed | Est égal à CursorUsed/CursorSize. Par exemple, si une application oblige le pilote à ouvrir un curseur côté serveur pour exécuter SELECT COUNT(*) FROM Authors, 23 lignes figurent dans le jeu de résultats de l'instruction SELECT. Si l'application extrait ensuite uniquement trois de ces lignes, CursorUsed/CursorSize est égal à 3/23 ; par conséquent, PercentCursorUsed est égal à 13,043478. |
AvgFetchTime | Est égal à SQLFetchTime/SQLFetchCount. |
AvgCursorSize | Est égal à CursorSize/CursorOpens. |
AvgCursorUsed | Est égal à CursorUsed/CursorOpens. |
SQLFetchTime | Durée cumulative nécessaire à l'exécution des extractions par rapport aux curseurs côté serveur. |
SQLFetchCount | Nombre d'extractions effectuées par rapport aux curseurs côté serveur après SQL_PERF_START. |
CurrentStmtCount | Nombre de descripteurs d'instruction ouverts actuellement sur toutes les connexions ouvertes dans le pilote. |
MaxOpenStmt | Nombre maximal de descripteurs d'instruction ouverts simultanément après SQL_PERF_START. |
SumOpenStmt | Nombre de descripteurs d'instruction ouverts après SQL_PERF_START. |
Statistiques de connexion : | |
CurrentConnectionCount | Nombre actuel de handles de connexion actifs ouverts par l'application sur le serveur. |
MaxConnectionsOpened | Nombre maximal de handles de connexion simultanés ouverts après SQL_PERF_START. |
SumConnectionsOpened | Somme correspondant au nombre de handles de connexion ouverts après SQL_PERF_START. |
SumConnectionTime | Somme correspondant à la durée d'ouverture de toutes les connexions après SQL_PERF_START. Par exemple, si une application a ouvert 10 connexions et a conservé chaque connexion pendant 5 secondes, SumConnectionTime est égal à 50 secondes. |
AvgTimeOpened | Est égal à SumConnectionsOpened/ SumConnectionTime. |
Statistiques relatives au réseau : | |
ServerRndTrips | Nombre de fois où le pilote a envoyé des commandes au serveur et a obtenu une réponse. |
BuffersSent | Nombre de paquets TDS (Tabular Data Stream) envoyés à SQL Server par le pilote après SQL_PERF_START. Les commandes de taille importante peuvent nécessiter plusieurs mémoires tampons ; par conséquent, si une commande de taille importante est envoyée au serveur et si elle occupe six paquets, ServerRndTrips est incrémenté d'une unité et BuffersSent de six unités. |
BuffersRec | Nombre de paquets TDS reçus par le pilote de SQL Server après le démarrage de l’application à l’aide du pilote. |
BytesSent | Nombre d’octets de données envoyées à SQL Server dans des paquets TDS après le démarrage de l’application à l’aide du pilote. |
BytesRec | Nombre d’octets de données dans les paquets TDS reçus par le pilote de SQL Server après le démarrage de l’application à l’aide du pilote. |
Statistiques relatives au temps
Champ SQLPERF | Description |
---|---|
msExecutionTime | Durée cumulative de traitement du pilote après SQL_PERF_START, incluant la durée d'attente des réponses du serveur. |
msNetworkServerTime | Durée cumulative d'attente des réponses du serveur par le pilote. |
Voir aussi
SQL Server Native Client (ODBC)
Rubriques de procédures relatives au profilage de performances du pilote ODBC (ODBC)