Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер ODBC собственного клиента SQL Server может профилирование двух типов данных производительности:
Длительные запросы.
Драйвер может записать в файл журнала любой запрос, который не получает ответ от сервера в течение указанного периода времени. Затем программисты приложений или администраторы баз данных могут исследовать каждую зарегистрированную инструкцию SQL, чтобы определить, как они могут повысить производительность.
Данные о производительности драйверов.
Драйвер может записывать статистику производительности и записывать их в файл или сделать их доступными для приложения с помощью структуры данных для конкретного драйвера с именем SQLPERF. Файл, содержащий статистику производительности, — это файл с разделителями табуляции, который можно легко анализировать с помощью любой электронной таблицы, поддерживающей файлы с разделителями табуляции, например Microsoft Excel.
Любой тип профилирования можно включить следующим способом:
Подключение к источнику данных, указывающее ведение журнала.
Вызов SQLSetConnectAttr для задания атрибутов, относящихся к драйверу, которые управляют профилированием.
Каждый процесс приложения получает собственную копию драйвера ODBC собственного клиента SQL Server, а профилирование — глобальное сочетание копии драйвера и процесса приложения. Когда все, что в приложении включает профилирование, профилирование записывает сведения обо всех подключениях, активных в драйвере из этого приложения. Включены даже подключения, которые не вызывали специальное профилирование.
После того как драйвер открыл журнал профилирования (данные о производительности или длительный журнал запросов), он не закрывает журнал до тех пор, пока драйвер не выгрузится диспетчером драйверов ODBC, когда приложение освобождает всю среду, которая обрабатывает ее, открытую в драйвере. Если приложение открывает новый дескриптор среды, загружается новая копия драйвера. Если приложение подключается к источнику данных, который указывает тот же файл журнала или задает атрибуты для конкретного драйвера для входа в тот же файл, драйвер перезаписывает старый журнал.
Если приложение начинает профилирование в файл журнала, а второе приложение пытается начать профилирование в том же файле журнала, то второе приложение не может записывать данные профилирования. Если второе приложение начинает профилирование после того, как первое приложение выгрузило его драйвер, второе приложение перезаписывает файл журнала из первого приложения.
Если приложение подключается к источнику данных с включенным профилированием, драйвер возвращает SQL_ERROR если приложение вызывает SQLSetConnectOption для запуска ведения журнала. Затем вызов SQLGetDiagRec возвращает следующее:
SQLState: 01000, pfNative = 0
ErrorMsg: [Microsoft][SQL Server Native Client]
An error has occurred during the attempt to access
the log file, logging disabled.
Драйвер останавливает сбор данных о производительности при закрытии дескриптора среды. Если приложение собственного клиента SQL Server имеет несколько подключений, каждое из которых имеет собственный дескриптор среды, драйвер перестанет собирать данные о производительности при закрытии любого из связанных дескрипторов среды.
Данные о производительности драйвера могут храниться в структуре данных SQLPERF или вошедшего в файл с разделителями табуляции. Данные включают следующие категории статистики:
Профиль приложения
Подключение
Сеть
Время
В следующей таблице описания полей в структуре данных SQLPERF также применяются к статистике, записанной в файле журнала производительности.
Статистика профиля приложения
| Поле SQLPERF | Описание |
|---|---|
| TimerResolution | Минимальное разрешение часов сервера в миллисекундах. Обычно это сообщается как 0 (ноль) и должно рассматриваться только в том случае, если сообщаемое число большое. Если минимальное разрешение часов сервера превышает вероятный интервал для некоторых статистических данных на основе таймера, эти статистические данные могут быть раздуваются. |
| SQLidu | Количество инструкций INSERT, DELETE или UPDATE после SQL_PERF_START. |
| SQLiduRows | Количество инструкций INSERT, DELETE или UPDATE после SQL_PERF_START. |
| Выборы SQLSelects | Количество инструкций SELECT, обработанных после SQL_PERF_START. |
| SQLSelectRows | Количество строк, выбранных после SQL_PERF_START. |
| Транзакции | Количество транзакций пользователей после SQL_PERF_START, включая откаты. При запуске приложения ODBC с SQL_AUTOCOMMIT_ON каждая команда считается транзакцией. |
| SQLPrepares | Количество вызовов функции SQLPrepare после SQL_PERF_START. |
| ExecDirects | Количество вызовов SQLExecDirect после SQL_PERF_START. |
| SQLExecutes | Количество вызовов SQLExecute после SQL_PERF_START. |
| CursorOpens | Количество раз, когда драйвер открыл курсор сервера после SQL_PERF_START. |
| Курсоры | Количество строк в результирующих наборах, открытых курсорами после SQL_PERF_START. |
| CursorUsed | Количество строк, фактически полученных через драйвер из курсоров после SQL_PERF_START. |
| PercentCursorUsed | Равно cursorUsed/CursorSize. Например, если приложение приводит к тому, что драйвер открывает курсор сервера для выполнения команды SELECT COUNT(*) FROM Authors, 23 строки будут находиться в результирующем наборе инструкции SELECT. Если приложение получает только три из этих строк, CursorUsed/CursorSize равно 3/23, поэтому PercentCursorUsed имеет значение 13,043478. |
| AvgFetchTime | Равно SQLFetchTime/SQLFetchCount. |
| AvgCursorSize | Равно CursorSize/CursorOpens. |
| AvgCursorUsed | Равно CursorUsed/CursorOpens. |
| SQLFetchTime | Совокупное время, затраченное на получение курсоров сервера для завершения. |
| SQLFetchCount | Количество выборок, выполненных для курсоров сервера после SQL_PERF_START. |
| CurrentStmtCount | Число дескрипторов инструкций, открытых в данный момент во всех подключениях, открытых в драйвере. |
| MaxOpenStmt | Максимальное число одновременно открытых операторов после SQL_PERF_START. |
| SumOpenStmt | Число дескрипторов инструкций, которые были открыты после SQL_PERF_START. |
| Статистика подключения: | |
| CurrentConnectionCount | Текущее количество активных подключений, которое обрабатывает приложение, открыто на сервере. |
| MaxConnectionsOpened | Максимальное количество одновременных дескрипторов подключения, открытых после SQL_PERF_START. |
| SumConnectionsOpened | Сумма количества дескрипторов подключения, открытых после SQL_PERF_START. |
| SumConnectionTime | Сумма времени открытия всех подключений после SQL_PERF_START. Например, если приложение открыло 10 подключений и поддерживало каждое подключение в течение 5 секунд, то SumConnectionTime будет 50 секунд. |
| AvgTimeOpened | Равно SumConnectionsOpened/ SumConnectionTime. |
| Статистика сети: | |
| ServerRndTrips | Количество раз, когда драйвер отправляет команды серверу и возвращает ответ. |
| BuffersSent | Количество пакетов табличного потока данных (TDS), отправленных в SQL Server драйвером после SQL_PERF_START. Большие команды могут принимать несколько буферов, поэтому если большая команда отправляется на сервер, и она заполняет шесть пакетов, ServerRndTrips увеличивается по одному, и buffersSent увеличивается на шесть. |
| BuffersRec | Количество пакетов TDS, полученных драйвером из SQL Server после запуска приложения с помощью драйвера. |
| Отправленные байты | Количество байтов данных, отправленных в SQL Server в пакетах TDS после запуска приложения с помощью драйвера. |
| BytesRec | Количество байтов данных в пакетах TDS, полученных драйвером из SQL Server после запуска приложения с помощью драйвера. |
Статистика времени
| Поле SQLPERF | Описание |
|---|---|
| msExecutionTime | Совокупное время, затраченное драйвером на обработку после SQL_PERF_START, включая время, затраченное на ожидание ответов с сервера. |
| msNetworkServerTime | Совокупное время, затраченное драйвером на ожидание ответов с сервера. |
См. также
SQL Server Native Client (ODBC)
Инструкции по профилированию драйвера ODBC (ODBC)