Partilhar via


Criando perfil de desempenho do driver ODBC

O driver ODBC SQL Server Native Client driver pode criar 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 SQL Server Native Client, e a criação de perfil é global para a combinação de uma cópia do driver e um processo do 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 com a criação de perfil habilitada, o driver retornará SQL_ERROR se o aplicativo chamar SQLSetConnectOption para iniciar o 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 pára 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 parará de coletar 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

  • Time

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 SQLPrepare depois de SQL_PERF_START.

ExecDirects

Número de chamadas SQLExecDirect depois de SQL_PERF_START.

SQLExecutes

Número de chamadas SQLExecute depois de 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 de protocolo TDS enviados ao SQL Server pelo driver depois de 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 de protocolo 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 de protocolo TDS depois que o aplicativo começou a usar o driver.

BytesRec

Número de bytes de dados em pacotes de protocolo TDS recebidos pelo driver do SQL Server depois que o aplicativo começou a usar o driver.

Time Statistics

Campo de 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.