Profiling delle prestazioni del driver ODBC

Si applica a:SQL ServerDatabase SQL diAzure Istanzagestita di SQL di Azure Azure Synapse Analytics PlatformSystem (PDW)

Importante

SQL Server Native Client (spesso abbreviato SNAC) è stato rimosso da SQL Server 2022 (16.x) e SQL Server Management Studio 19 (SSMS). SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider Microsoft OLE DB legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni. Passare al nuovo Microsoft OLE DB Driver (MSOLEDBSQL) per SQL Server o alla versione più recente di Microsoft ODBC Driver per SQL Server . Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni da 2012 a 2019), vedere questa eccezione relativa al ciclo di vita del supporto.

Il driver ODBC di SQL Server Native Client può profilarsi due tipi di dati sulle prestazioni:

  • Query con esecuzione prolungata.

    Il driver può scrivere in un file di log tutte le query che non ottengono una risposta dal server entro un periodo di tempo specificato. I programmatori di applicazioni o gli amministratori di database possono quindi eseguire la ricerca di ogni istruzione SQL registrata per determinare il modo in cui poterne migliorare le prestazioni.

  • Dati sulle prestazioni del driver.

    Il driver può registrare le statistiche sulle prestazioni e scriverle in un file o renderle disponibili in un'applicazione tramite una struttura dei dati specifica del driver denominata SQLPERF. Il file che contiene le statistiche sulle prestazioni è un file delimitato da tabulazioni che può essere analizzato facilmente con qualsiasi foglio di calcolo che supporti i file delimitati da tabulazioni, ad esempio Microsoft Excel.

È possibile attivare entrambi i tipi di profiling nel seguente modo:

  • Connettendosi a un'origine dati che specifica la registrazione.

  • Chiamata di SQLSetConnectAttr per impostare attributi specifici del driver che controllano la profilatura.

Ogni processo dell'applicazione ottiene la propria copia del driver ODBC di SQL Server Native Client e la profilatura è globale per la combinazione di una copia del driver e di un processo dell'applicazione. Quando il profiling viene attivato in un'applicazione, vengono registrate le informazioni per tutte le connessioni attive nel driver a partire da tale applicazione. Vengono anche incluse le connessioni che non hanno specificamente richiesto il profiling.

Il log di profiling (log di dati sulle prestazioni o log di query con esecuzione prolungata) aperto dal driver viene chiuso solo dopo che il driver viene scaricato da Gestione driver ODBC, quando un'applicazione libera tutti gli handle di ambiente aperti nel driver. Se l'applicazione apre un nuovo handle di ambiente, viene caricata una nuova copia del driver. Se l'applicazione si connette quindi a un'origine dati che specifica lo stesso file di log o imposta gli attributi specifici del driver per eseguire la registrazione nello stesso file, il driver sovrascrive il log precedente.

Se un'applicazione avvia il profiling in un file di log e una seconda applicazione tenta di avviare il profiling nello stesso file di log, la seconda applicazione non potrà eseguire la registrazione dei dati del profiling. Se la seconda applicazione avvia il profiling dopo che la prima applicazione ha scaricato il driver, la seconda applicazione sovrascriverà il file di log della prima applicazione.

Se un'applicazione si connette a un'origine dati con profilatura abilitata, il driver restituisce SQL_ERROR se l'applicazione chiama SQLSetConnectOption per avviare la registrazione. Una chiamata a SQLGetDiagRec restituisce quindi quanto segue:

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

Il driver arresta la raccolta dei dati sulle prestazioni quando viene chiuso un handle di ambiente. Se un'applicazione SQL Server Native Client ha più connessioni, ognuna con il proprio handle di ambiente, il driver smetterà di raccogliere dati sulle prestazioni quando uno degli handle di ambiente associati viene chiuso.

I dati sulle prestazioni del driver possono essere archiviati nella struttura dei dati SQLPERF o registrati in un file delimitato da tabulazioni. I dati includono le seguenti categorie di statistiche:

  • Profilo dell'applicazione

  • Connessione

  • Network

  • Inserimento ore

Nella tabella seguente le descrizioni dei campi per la struttura dei dati SQLPERF vengono applicate anche alle statistiche registrate nel file di log delle prestazioni.

Statistiche sul profilo dell'applicazione

Campo SQLPERF Descrizione
TimerResolution Risoluzione minima del tempo di clock del server in millisecondi. Viene generalmente riportato come 0 (zero) e deve essere considerato solo se il numero riportato è maggiore. Se la risoluzione minima del tempo di clock del server è maggiore dell'intervallo probabile per alcune delle statistiche basate sul timer, tali statistiche possono essere state alterate.
SQLidu Numero di istruzioni INSERT, DELETE o UPDATE dopo SQL_PERF_START.
SQLiduRows Numero di istruzioni INSERT, DELETE o UPDATE dopo SQL_PERF_START.
SQLSelects Numero di istruzioni SELECT elaborate dopo SQL_PERF_START.
SQLSelectRows Numero di righe selezionate dopo SQL_PERF_START.
Transazioni Numero di transazioni utente dopo SQL_PERF_START, inclusi i rollback. Quando un'applicazione ODBC è in esecuzione con SQL_AUTOCOMMIT_ON, ogni comando viene considerato una transazione.
SQLPrepares Numero di chiamate di funzione SQLPrepare dopo SQL_PERF_START.
ExecDirects Numero di chiamate SQLExecDirect dopo SQL_PERF_START.
SQLExecutes Numero di chiamate SQLExecute dopo SQL_PERF_START.
CursorOpens Numero di volte in cui il driver ha aperto un cursore server dopo SQL_PERF_START.
CursorSize Numero di righe nei set di risultati aperti dai cursori dopo SQL_PERF_START.
CursorUsed Numero di righe effettivamente recuperate tramite il driver dai cursori dopo SQL_PERF_START.
PercentCursorUsed È uguale a CursorUsed/CursorSize. Se ad esempio un'applicazione determina l'apertura di un cursore server da parte del driver per eseguire "SELECT COUNT(*) FROM Authors", nel set di risultati saranno presenti 23 righe per l'istruzione SELECT. Se l'applicazione recupera solo tre di queste righe, CursorUsed/CursorSize sarà 3/23 e quindi PercentCursorUsed sarà 13.043478.
AvgFetchTime È uguale a SQLFetchTime/SQLFetchCount.
AvgCursorSize È uguale a CursorSize/CursorOpens.
AvgCursorUsed È uguale a CursorUsed/CursorOpens.
SQLFetchTime Tempo cumulativo impiegato per completare le operazioni di recupero sui cursori server.
SQLFetchCount Numero di operazioni di recupero eseguite sui cursori server dopo SQL_PERF_START.
CurrentStmtCount Numero di handle di istruzione attualmente aperti in tutte le connessioni aperte nel driver.
MaxOpenStmt Numero massimo di handle di istruzione aperti contemporaneamente dopo SQL_PERF_START.
SumOpenStmt Numero di handle di istruzione aperti dopo SQL_PERF_START.
Statistiche di connessione:
CurrentConnectionCount Numero corrente di handle di connessione attivi aperti dall'applicazione nel server.
MaxConnectionsOpened Numero massimo di handle di connessione aperti contemporaneamente dopo SQL_PERF_START.
SumConnectionsOpened Somma del numero di handle di connessione aperti dopo SQL_PERF_START.
SumConnectionTime Somma del periodo di tempo in cui tutte le connessioni sono state aperte dopo SQL_PERF_START. Se ad esempio un'applicazione ha aperto 10 connessioni e ha mantenuto ogni connessione per 5 secondi, SumConnectionTime sarà uguale a 50 secondi.
AvgTimeOpened È uguale a SumConnectionsOpened/SumConnectionTime.
Statistiche di rete:
ServerRndTrips Numero di volte in cui il driver ha inviato comandi al server e ottenuto una risposta.
BuffersSent Numero di pacchetti TDS (Tabular Data Stream) inviati a SQL Server dal driver dopo SQL_PERF_START. I comandi di grandi dimensioni possono accettare più buffer, pertanto se un comando di grandi dimensioni viene inviato al server e riempie sei pacchetti, ServerRndTrips viene incrementato di uno e BuffersSent viene incrementato di sei.
BuffersRec Numero di pacchetti TDS ricevuti dal driver da SQL Server dopo l'avvio dell'applicazione tramite il driver.
BytesSent Numero di byte di dati inviati a SQL Server nei pacchetti TDS dopo l'avvio dell'applicazione con il driver.
BytesRec Numero di byte di dati nei pacchetti TDS ricevuti dal driver da SQL Server dopo l'avvio dell'applicazione con il driver.

Statistiche temporali

Campo SQLPERF Descrizione
msExecutionTime Tempo cumulativo impiegato dal driver per l'elaborazione dopo SQL_PERF_START, incluso il tempo di attesa per le risposte dal server.
msNetworkServerTime Tempo cumulativo di attesa del driver per le risposte dal server.

Vedi anche

SQL Server Native Client (ODBC)
Procedure di analisi delle prestazioni del driver ODBC (ODBC)