Partager via


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)