Compartilhar via


Criando perfil de desempenho do driver ODBC

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Analytics Platform System (PDW)

Importante

O SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o provedor OLE DB para SQL Server (SQLOLEDB) da Microsoft herdado não são recomendados para desenvolver um novo aplicativo.

Para novos projetos, use um dos seguintes drivers:

Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), confira esta exceção de Ciclo de Vida de Suporte.

O driver ODBC do SQL Server Native Client pode criar o perfil de dois tipos de dados de desempenho:

  • Consultas de execução longa.

    O driver pode gravar em um arquivo de log qualquer consulta que não obtenha uma resposta do servidor em um intervalo especificado de tempo. Programadores de aplicativo ou administradores de banco de dados podem pesquisar cada instrução SQL registrada para determinar como eles podem melhorar seu desempenho.

  • Dados de desempenho do driver.

    O driver pode registrar estatísticas de desempenho e gravá-las em um arquivo ou torná-las disponíveis para um aplicativo por meio de uma estrutura de dados específica do driver, denominada SQLPERF. O arquivo que contém as estatísticas de desempenho é um arquivo delimitado por tabulação que pode ser facilmente analisado com qualquer planilha que aceite arquivos delimitados por tabulação, como o Microsoft Excel.

Qualquer um dos tipos de criação de perfil pode ser ativado da seguinte forma:

  • Conectando a uma fonte de dados que especifica o log.

  • Chamando SQLSetConnectAttr para definir atributos específicos do driver que controlam a criação de perfil.

Cada processo de aplicativo obtém sua própria cópia do driver ODBC do SQL Server Native Client e a criação de perfil é global para a combinação de uma cópia do driver e um processo de aplicativo. Quando tudo no aplicativo ativar a criação de perfil, esta registrará informações para todas as conexões ativas no driver desse aplicativo. Mesmo as conexões que não foram especificamente chamadas para a criação de perfil são incluídas.

Depois que o driver abriu um log de criação de perfil (o log de dados de desempenho ou de consulta de execução longa), o log não é fechado enquanto o driver não é descarregado pelo Gerenciador de Driver ODBC, quando um aplicativo libera todos os identificadores de ambiente que ele abriu no driver. Se o aplicativo abrir um novo identificador de ambiente, uma nova cópia do driver será carregada. Em seguida, se o aplicativo se conectar a uma fonte de dados que especifica o mesmo arquivo de log ou definir os atributos específicos do driver para serem registrados no mesmo arquivo, o driver substituirá o log antigo.

Se um aplicativo iniciar a criação de perfil para um arquivo de log e um segundo aplicativo tentar iniciar a criação de perfil para o mesmo arquivo de log, o segundo aplicativo não conseguirá registrar nenhum dado da criação de perfil. Se o segundo aplicativo iniciar a criação de perfil depois que o primeiro aplicativo tiver descarregado seu driver, o segundo aplicativo substituirá o arquivo de log do primeiro aplicativo.

Se um aplicativo se conectar a uma fonte de dados que tenha a criação de perfil habilitada, o driver retornará SQL_ERROR se o aplicativo chamar SQLSetConnectOption para iniciar o registro em log. Uma chamada para SQLGetDiagRec retorna o seguinte:

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

O driver para de coletar dados de desempenho quando um identificador de ambiente é fechado. Se um aplicativo SQL Server Native Client tiver várias conexões, cada uma com seu próprio identificador de ambiente, o driver interromperá a coleta de dados de desempenho quando qualquer um dos identificadores de ambiente associados for fechado.

Os dados de desempenho do driver podem ser armazenados na estrutura de dados SQLPERF ou registrados em um arquivo delimitado por tabulação. Os dados incluem as seguintes categorias de estatísticas:

  • Perfil de aplicativo

  • Conexão

  • Rede

  • Hora

Na tabela a seguir, as descrições dos campos na estrutura de dados SQLPERF também se aplicam às estatísticas registradas no arquivo de log de desempenho.

Estatísticas de perfil de aplicativo

Campo de SQLPERF Descrição
TimerResolution Resolução mínima da hora de relógio do servidor em milissegundos. Isto será relatado normalmente como 0 (zero) e deverá ser considerado somente se o número relatado for maior. Se a resolução mínima do relógio do servidor for maior que o intervalo provável para algumas das estatísticas baseadas em temporizador, estas estatísticas poderão ser aumentadas.
SQLidu Número de instruções INSERT, DELETE ou UPDATE depois de SQL_PERF_START.
SQLiduRows Número de instruções INSERT, DELETE ou UPDATE depois de SQL_PERF_START.
SQLSelects Número de instruções SELECT processadas depois de SQL_PERF_START.
SQLSelectRows Número de linhas selecionadas depois de SQL_PERF_START.
Transações Número de transações de usuário depois de SQL_PERF_START, incluindo reversões. Quando um aplicativo ODBC estiver sendo executado com SQL_AUTOCOMMIT_ON, cada comando será considerado uma transação.
SQLPrepares Número de chamadas de função SQLPrepare após SQL_PERF_START.
ExecDirects Número de chamadas SQLExecDirect após SQL_PERF_START.
SQLExecutes Número de chamadas SQLExecute após SQL_PERF_START.
CursorOpens Número de horas que o driver abriu um cursor de servidor depois de SQL_PERF_START.
CursorSize Número de linhas nos conjuntos de resultados abertos por cursores depois de SQL_PERF_START.
CursorUsed Número de linhas realmente recuperadas pelo driver de cursores depois de SQL_PERF_START.
PercentCursorUsed Iguala CursorUsed/CursorSize. Por exemplo, se um aplicativo fizer com que o driver abra um cursor de servidor para fazer "SELECT COUNT(*) FROM Authors", 23 linhas serão apresentadas no conjunto de resultados para a instrução SELECT. Se, em seguida, o aplicativo buscar apenas três dessas linhas, CursorUsed/CursorSize será 3/23, assim PercentCursorUsed será 13,043478.
AvgFetchTime Iguala SQLFetchTime/SQLFetchCount.
AvgCursorSize Iguala CursorSize/CursorOpens.
AvgCursorUsed Iguala CursorUsed/CursorOpens.
SQLFetchTime Quantidade cumulativa de horas que a busca de cursores de servidor levou para ser concluída.
SQLFetchCount Número de buscas feitas em relação aos cursores de servidor depois de SQL_PERF_START.
CurrentStmtCount Número de identificadores de instrução abertos atualmente em todas as conexões abertas no driver.
MaxOpenStmt Número máximo de identificadores de instrução abertos simultaneamente depois de SQL_PERF_START.
SumOpenStmt Número de identificadores de instrução que foram abertos depois de SQL_PERF_START.
Estatísticas de conexão:
CurrentConnectionCount Número atual de identificadores de conexões ativas que o aplicativo abriu para o servidor.
MaxConnectionsOpened Número máximo de identificadores de conexões simultâneas abertos depois de SQL_PERF_START.
SumConnectionsOpened Soma do número de identificadores de conexões que foram abertos depois de SQL_PERF_START.
SumConnectionTime Soma da quantidade de horas que todas as conexões foram abertas depois de SQL_PERF_START. Por exemplo, se um aplicativo tiver aberto 10 conexões e tiver mantido cada conexão durante 5 segundos, SumConnectionTime será 50 segundos.
AvgTimeOpened Iguala SumConnectionsOpened/ SumConnectionTime.
Estatísticas de rede:
ServerRndTrips O número de horas que o driver enviou comandos ao servidor e obteve uma resposta.
BuffersSent Número de pacotes TDS (Fluxo de Dados Tabulares) enviados ao SQL Server pelo driver após SQL_PERF_START. Os comandos grandes podem obter vários buffers, portanto, se um comando grande for enviado ao servidor e preencher seis pacotes, ServerRndTrips será incrementado em um e BuffersSent será incrementado em seis.
BuffersRec Número de pacotes TDS recebidos pelo driver do SQL Server depois que o aplicativo começou a usar o driver.
BytesSent Número de bytes de dados enviados ao SQL Server em pacotes TDS depois que o aplicativo começou a usar o driver.
BytesRec Número de bytes de dados em pacotes TDS recebidos pelo driver do SQL Server depois que o aplicativo começou a usar o driver.

Time Statistics

Campo SQLPERF Descrição
msExecutionTime Quantidade cumulativa de horas que o driver gastou processando depois de SQL_PERF_START, incluindo o tempo gasto esperando respostas do servidor.
msNetworkServerTime Quantidade cumulativa de horas que o driver gastou esperando respostas do servidor.

Confira também

SQL Server Native Client (ODBC)
Tópicos de instruções sobre a criação de perfil de desempenho do driver ODBC (ODBC)