Sql profiler какая таблица пишется. SQL Profiler решает проблемы. Запуск и подключение к серверу

SQL Profiler - программное средство, используемое для трассировки сервера SQL Server. "Трассировка" - сеанс сбора информации о работе SQL Server 2008

Основное назначение:

SQL Profiler используется администраторами для:

· анализа работы приложения;

· определения оптимальности запросов, направляемых на сервер;

· выявления команд Transact-SQL, при выполнении которых возникает ошибка;

· сбора информации о пользовательской активности в течение продолжительного промежутка времени;

· проведения мониторинга работы сервера в режиме реального времени.

Новые возможности:

a. профилировка Analysis Services;

b. профилировка событий Integration Services;

c. возможность при записи информации выполнения команды записывать показания счетчиков из Performance Monitor;

d. в Profiler добавлено множество новых событий и источников информации, которые могут выбираться для записи в файл трассировки;

f. возможность группировать события в окне профилировщика.

Работа с SQL Server Profiler

1. Запустить SQL Server Profiler - из меню Пускà Программыà SQL Server 2008à Performance Toolsà SQL Server Profiler .

2. В открывшемся окне в меню File выбрать New Trace и подключиться к серверу SQL Server 2008, работу которого мы будем отслеживать.

3. Настроить параметры сеанса в окне Trace Properties , которое открывается автоматически переда началом сеанса трассировки (см. рис. 8.1).

Рис. 8.1. Настройка параметров сеанса трассировки

a. На вкладке General выбрать в списке Use the template наиболее подходящий шаблон. Выбор шаблона производится при помощи меню File à Templates в SQL Server Profiler. Изначально в вашем распоряжении - восемь шаблонов:

1). Standard (default) - шаблон по умолчанию, позволяющий отслеживать все запускаемые на выполнение хранимые процедуры и команды Transact-SQL;

2). SP_Counts - сбор информации о запускаемых на выполнение хранимых процедурах и функциях с сортировкой по именам;

3). TSQL - сбор информации о всех командах Transact-SQL, запускаемых на выполнение на сервере, с указанием идентификатора пользовательских процессов и времени запуска;

4). TSQL_Duration - аналогичен предыдущему шаблону, но вместо информации о времени запуска команды TSQL записывается время, которое потребовалось на ее выполнение;

5). TSQL_Grouped - помимо информации о коде команды Transact-SQL и времени ее запуска, записывается также информация о имени приложения, учетной записи пользователя в ОС и учетной записи пользователя, которая была использована для подключения;



6). TSQL_Replay - запись максимально подробной информации о выполняемых командах Transact-SQL;

7). TSQL_SPs - помимо записи информации о начале запуска хранимой процедуры (SP:Starting) регистрируется информация о выполнении каждой из команд хранимой процедуры (SP:StmtStarting);

8). Tuning - используется для сбора информации необходимой Database Tuning Advisor.

b. На вкладке General если необходимо указать место сохраннения трассировочной информации:

1). Информация трассировки может быть запротоколирована в файл (по умолчанию размером 5 Мбайт):

· параметр Enable File Rollover определяет, будет ли при заполнении одного файла автоматически создаваться следующий. Имя следующего файла будет таким же, как и имя предыдущего, но к его имени будет добавлен номер (1, 2, 3 и т.п.)

· параметр Server processes trace data можно использовать для увеличения надежности записи информации трассировки. После установки этого флажка обработкой информации трассировки будет заниматься сервер.

2). Информация трассировки может быть сохранена в таблице SQL Server. Таблица с нужным набором столбцов будет создана автоматически.

3). С помощью параметра Enable Trace Stop Time можно указать время, когда трассировка будет отключена автоматически.

c. На вкладке Events Selection определить параметры сбора информации. В таблице на этой вкладке вы должны выбрать требуемые события (в строках) и информацию (в столбцах), которая будет для них записываться. Для отображения всех строк и столбцов, нужно установить флажки Show All Events и Show All Columns .

1). с помощью кнопки Column Filters (Фильтры столбцов) настроить фильтры на сбор необходимой информации (отслеживать действия, выполняемые в определенной БД, или определенным приложением, или определенным пользователем) – Like или Not Like ;

2). при помощи кнопки Organize Columns (Организовать столбцы) настроить порядок столбцов для отображения или записи в профилировщике с возможностью группировки данных - раздел Group.

4. После задания всех параметров трассировки нажать на кнопку Run (Запустить) (см. рис. 8.2)

Рис. 8.2. Просмотр информации в ходе сеанса трассировки

В верхней части окна отображаются события, происходящие на сервере, а в нижней части - приводится подробная информация по каждому событию (например, код команд SQL).

Возможности, доступные в окне трассировки:

1. Если на вкладке Organize Columns в свойствах шаблона вы выбрали столбцы для группировки, вы можете сгруппировать по этим столбцам записи в окне просмотра. Для этой цели в меню View предусмотрена команда Grouped View ;

2. Если в список Group был помещен только один столбец, то у вас появляется возможность использовать режим отображения Aggregated View (см. рис. 8.3). Этот режим включается при помощи команды Aggregated View из того же меню View .

Рис. 8.3. Режим отображения Aggregated View

3. Иы можете открывать в профилировщике события, сохраненные в файлах и таблицах трассировки. Также существует возможность повторять запротоколированные операции, с помощью меню Replay ;

4. Вы можете связывать информацию трассировки с показателями счетчиков производительности System Monitor. Для этого:

· определить сеанс трассировки, в ходе которого обязательно должна записываться информация для столбцов StartTime и EndTime ;

· запустить сеанс трассировки с записью информации в файл или таблицу. Одновременно с ним собрать в файл протокол показаний счетчиков Performance Monitor ;

· открыть собранную информацию из файла трассировки в профилировщике, а затем воспользоваться командой Import Performance Data из меню File .

В своей работе мы довольно часто мы сталкиваемся с ситуацией, когда определенный запрос работает медленно, причем по тексту запроса невидно никаких очевидных проблем. Обычно в этом случае необходимо расследовать проблему на более глубоком уровне. Как правило, возникает необходимость посмотреть текст SQL запроса и его план, и вот в этом нам как раз помогает SQL Profiler.

Что такое SQL Profiler и зачем оно вообще нужно.

SQL Profiler — это программа поставляемая вместе с MS SQL Server и предназначена она для и просмотра всех событий, которые происходят в SQL сервер или говоря другими словами для записи трассировки.

Зачем SQL Profilerможет понадобиться программисту 1С?

Хотя бы для того, что бы получить текст запроса на языке SQL и посмотреть его план. Конечно, это можно сделать и с помощью технологического журнала, но это требует некоторых навыков, да и план в ТЖ получается не такой красивый и удобочитаемый.

В профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что на мой взгляд, гораздо удобнее.

Так же с помощью профайлера можно определить:

запросы длиннее определенного времени

запросы к определенной таблице

ожидания на блокировках

таймауты

взаимоблокировки

и многое другое…

Анализ запросов с помощью SQL Profiler

Наиболее часто профайлер используется именно для анализа запросов. Как правило, нам не нужно отслеживать все запросы, зачастую необходимо увидеть, как определенный запрос на языке 1С транслируется в SQL, и посмотреть план его выполнения. Например, это может потребоваться, что бы определить, почему запрос выполняется медленно или мы написали большой запрос и хотим убедиться, что текст запроса на языке SQL не содержит соединений с подзапросом.

Что бы отловить запрос в трассировке делаем следующее:

1. Запускаем SQL Profiler

Пуск — Все программы — Microsoft SQL Server 2008 R2 — Средства обеспечения производительности — SQL Profiler

2. Создаем новую трассировку

Файл – Создать трассировку (Ctrl+N)
3. Указываем сервер СУБД на котором находится наша база данных и нажимаем «Соединить».

Естественно, ничего не мешает выполнять трассировку сервера СУБД, который находится на другом компьютере.

4. В появившемся окне «Свойства трассировки» переходим на вторую закладку «Выбор событий»

5. Теперь необходимо указать события и свойства этих событий, которые мы хотим видеть в трассировке.

Нам нужны запросы и планы запросов, следовательно необходимо включить соответствующие события. Для показа полного списка свойств и событий включаем флаги «Показать все столбцы» и «Показать все события».

Описание событий:

ShowplanStatisticsProfile– текстовый план выполнения запроса

ShowplanXMLStatisticsProfile– графический план выполнения запроса

RPC:Completed– текст запроса, если он выполняется как процедура (если выполняется запрос 1С с параметрами).

SQL:BatchCompleted– текст запроса, если он выполняется как обычный запрос (если выполнялся запрос 1С без параметров).

6. Теперь необходимо настроить фильтр для событий. Если этого не сделать, то мы будем видеть запросы для всех баз данных расположенных на данном сервере СУБД.

Нажимаем кнопку «Фильтры столбцов» и указываем фильтр по имени базы данных

Теперь мы будем видеть в трассировке только запросы к базе данных «TestBase_8_2»

При желании можно поставить фильтр и по другим полям, наиболее интересные из них: Duration(Длительность), TextData(обычно это текст запроса) и RowCounts (количество строк возвращаемых запросом).

Например, если мне нужно отловить все запросы к таблице «_InfoRg4312» длительностью более 3-х секунд в базе данных «TestBase_8_2», то я делаю:

a) Фильтр по базе данных, пример показан выше

b) Фильтр по длительности в миллисекундах.

c) Фильтр по тексту запроса

Здесь мы указываем маску. Если необходимо отслеживать запросы, которые обращаются к нескольким таблицам, то создаем несколько элементов в разделе «Похоже на». Условия всех фильтров работают вместе.

7. Теперь можно запускать трассировку. Нажимаем «Запустить», после этого трассировка начинает работу, и вы можете видеть те события, отображение которых вы настроили и которые попадают под ваши фильтры.

Для управления трассировкой можно использовать кнопки на командной панели.

Слева на право:

Ластик – очищает окно трассировки

Пуск – запускает трассировку

Пауза – ставит трассировку на паузу, при нажатии на Пуск трассировка возобновляется

Стоп – останавливает трассировку

8. Само окно трассировки состоит из двух частей. В верхней части располагаются события и свойства событий.

В нижней части отображается различная информация в зависимости от типа событий. В нашем случае здесь будет отображаться либо текст запроса, либо его план.

9. Выполним запрос в консоли запросов 1С и посмотрим как он отразится в профайлере.

По трассировке видно, что запросов получилось несколько и только один из них наш. Остальные запросы являются служебными.

10. По свойствам событий можно понять: сколько секунд выполнялся запрос (Duration), сколько было логических чтений (Reads), сколько строк запрос вернул в результате (RowCounts) и т.д.

В моем случае запрос выполнялся 2 миллисекунды, сделал 4 логических чтения и вернул 1 строку.

11. Если подняться на одно событие выше, то мы сможем увидеть план запроса в графическом виде.

Как видно из плана, поиск осуществляется по индексу по цене, хотя этот план нельзя назвать идеальным, т.к. индекс не является покрывающим, поля код и наименование получаются с помощью KeyLookup, что отнимает 50% времени.

Используя контекстное меню, графический план можно сохранить в отдельный файл с расширением *.SQLPlan и открыть его в профайлере на другом компьютере или с помощью более продвинутой программы SQL Sentry Plan Explorer.

12. Если подняться еще выше, то мы увидим тот же план запроса, но уже в текстовом виде.

Именно этот план отображается в ТЖ, ЦУП и прочих средствах контроля производительности 1С. Для его анализа рекомендую использовать продвинутый текстовый редактор с подсветкой, например Notepad++.

a) В формат самого профайлера, т.е. с расширением *.trc

b) В формат xml

c) Можно сделать из трассировки шаблон. См. следующий пункт.

Далее нужно выбрать базу данных на указанном сервере и указать имя таблицы, куда будет сохранена трассировка. Можно выбрать уже существующую таблицу, либо написать новое имя и тогда таблица будет создана автоматически в выбранной базе данных.

При этом нужно учитывать, что Durationсохраняется в таблицу в миллионных долях секунды и при выводе результата, желательно переводить значение в миллисекунды. Так же в таблицу добавляется столбец RowNumber, который показывает номер данной строки в трассировке.

14. Если вам требуется часто использовать профайлер для анализа запросов, то настройка необходимых фильтров и событий быстро надоесть и к тому же будет отнимать много времени.

На помощь приходят шаблоны трассировок, где мы указываем нужные нам фильтры и порядок колонок, а далее просто выбираем этот шаблон при создании новой трассировки.

Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон

На первой закладке все просто. Указываем тип сервера, имя шаблона, и при необходимости ставим флаг для использования данного шаблона по умолчанию.

На второй закладке производим выбор событий и настройку фильтров, как уже было показано выше.

Теперь при создании новой трассировки вы можете просто указать необходимый шаблон, после этого на второй закладке все фильтры и события заполнятся автоматически.

Конечно, здесь показаны далеко не все способы использования этого замечательного инструмента, думаю в будущем пополнить коллекцию статей на эту тему.

Если у вас остались вопросы по использованию SQL Profiler, задавайте их в комментариях, буду рад ответить.

Сегодня мы будем замерять производительность нашего приложения с помощью Visual Studio Profiling Tool .

Visual Studio Profiling Tool позволяет разработчикам измерять, оценивать производительность приложения и кода. Эти инструменты полностью встроены в IDE, чтобы предоставить разработчику беспрерывный контроль.
В этом руководстве мы по шагам профилируем приложение PeopleTrax используя Sampling и Instrumentation методы профилирования, чтобы выявить проблемы в производительности приложения.

Много картинок.

Подготовка

Для работы с этим руководством вам потребуется:
  • Microsoft Visual Studio 2010
  • Средние знания языка C#
  • Копия тестового приложения PeopleTrax, скачать можно с MSDN Code Gallery

Методы профилирования

Чуть-чуть отступим от главной темы статьи и рассмотрим возможные методы профилирования. Эту главу можно пропустить, используемые методы профилирования будут кратко описаны перед использованием.
Sampling
Sampling — собирает статистические данные о работе приложения (во время профилирования). Этот метод легковесный и поэтому, в результате его работы очень маленькая погрешность в полученных данных.

Каждый определенный интервал времени собирается информация о стеке вызовов (call stack). На основе этих данные производится подсчет производительности. Используется для первоначального профилирования и для определения проблем связанных с использование процессора.

Instrumentation
Instrumentation — собирает детализированную информацию о времени работы каждой вызванной функции. Используется для замера производительности операций ввода/вывода.

Метод внедряет свой код в двоичный файл, который фиксирует информацию о синхронизации (времени) для каждой функции в файл, и для каждой функции которые вызываются в этой.

Отчет содержит 4 значения для предоставления затраченного времени:

  • Elapsed Inclusive - общее время, затраченное на выполнение функции
  • Application Inclusive - время, затраченное на выполнение функции, за исключением времени обращений к операционной системе.
  • Elapsed Exclusive - время, затраченное на выполнение кода в теле. Время, которое тратят функции, вызванные целевой функцией.
  • Application Exclusive - время, затраченное на выполнение кода в теле. Исключается время, которое тратится выполнения вызовов операционной системы и время, затраченное на выполнение функций, вызванные целевой функцией.
Concurrency
Concurrency – собирает информацию о многопоточных приложения (как отлаживать многопоточные приложения см. «Руководство по отладке многопоточных приложений в Visual Studio 2010»). Метод собирает подробную информацию о стеке вызовов, каждый раз, когда конкурирующие потоки вынуждены ждать доступа к ресурсу.
.NET Memory
.NET Memory - профайлер собирает информацию о типе, размере, а также количество объектов, которые были созданы в распределении или были уничтожены сборщиком мусора. Профилирование памяти почти не влияет на производительность приложения в целом.
Tier Interaction
Tier Interaction – добавляет информацию в файл для профилирования о синхронных вызовах ADO.NET между страницей ASP.NET или другими приложениями и SQL сервера. Данные включают число и время вызовов, а также максимальное и минимальное время.

На этом рассмотрение методов профилирование закончим и продолжим учиться профилировать приложения.

Профилирование Sampling методом

Sampling это метод профилирования, который периодически опрашивает рассматриваемый процесс, чтобы определить активную функцию. В результате показывает количество раз, когда функция была в начале call stack во время тестирования.
Профилирование
Открываем тестовый проект PeopleTrax . Устанавливаем конфигурацию в Release (в Debug версию встраивается дополнительная информация для отладки приложения, и она плохо скажется на точности результатов профилирования).

В меню Analyze нажимаем на Launch Performance Wizard .

На этом шаге нужно выбрать метод профилирования. Выбираем CPU Sampling (recommended) и нажимаем Next.

Выбираем какое приложение мы будем профилировать, это PeopleTrax и кнопка Next. В следующем нажимаем Finish и автоматически запустится профайлер и наше приложение. На экране мы видим программу PeopleTrax. Нажимаем кнопку Get People , ждем завершения работы и Export Data . Закрываем блокнот и программу и профайлер сгенерирует отчет.

Профайлер сгенерировал отчет (*.vsp)

Анализ отчета Sampling метода
В Summary отображается график использования процессора в течение всего времени профилирования. Список Hot Path показывает ветки вызовов, которые проявили наибольшую активность. А в списке Functions Doing Most Individual Work (название которого говорит само за себя) – функции, которые занимали бо льшее время процесса в теле этих функций.

Посмотрев на список Hot Path видим что метод PeopleNS.People.GetNames занимает почти последнее место в ветке вызовов. Его то и можно изучить внимательнее на предмет улучшения производительности. Нажимаем на PeopleNS.People.GetNames и перед нами открывается Function Details .

Это окно содержит две части. Окно расходов предусматривает графическое представление работы функций, и вклад функции и вызывающих ее на количество экземпляров, которые были отобраны. Можно изменить рассматриваемую функцию, нажав на нее мышкой.

Function Code View показывает код метода, когда он доступен и подсвечивает наиболее «дорогие» строки в выбранном методе. Когда выбран метод GetNames видно, что он читает строки из ресурсов приложения используя StringReader , добавляя каждую строку в ArrayList . Нет очевидных способов улучшить эту часть.

Так как PeopleNS.People.GetPeople единственный, кто вызывает GetNames – нажимаем GetPeople . Этот метод возвращает ArrayList объектов PersonInformationNS.PersonInformation с именами людей и компаний, возвращенными методом GetNames . Тем не менее, GetNames вызывается дважды каждый раз, когда создается PersonInformation . (Это и показано желтым и красным выделением). Очевидно, что можно легко оптимизировать метод, создавая списки только один раз вначале метода.

Альтернативная версия GetPeople также есть в коде и мы ее сейчас включим. Для этого нужно определить OPTIMIZED_GETPEOPLE как Conditional compilation symbol в окне свойств проекта People и PeopleTrax . И да, если захотите повторить мои опыты, то нужно исправить ошибку в проекте. В оптимизированном конструкторе класса не правильно написано имя ресурсов: нужно PeopleNS.Resources вместе PeopleNS.Resource. Если это не изменить, все валится со страшными ошибками.

Оптимизированный метод заменит старый при следующей сборке.

Перезапускаем профилирование в текущей сессии нажав Launch with Profiling в окне Performance Explorer . Нажимаем на Get People и Export Data . Закрываем блокнот и программу а профайлер сгенерирует новый отчет.

Чтобы сравнить два отчета – выбираем оба и ПКМ Compare Performance Reports . Колонка дельты показывает разницу в производительности версии Baseline с более поздней Comparison . Выбираем Inclusive Samples % и Apply.

Как видно выигрыш в производительности заметен невооруженным глазом

Профилирование методом Instrumentation

Этот метод полезен при профилировании операций ввода вывода, запись на диск и при обмене данными по сети. Этот метод предоставляет больше информации чем предыдущий, но он несет с собой больше накладных расходов. Бинарники полученные после вставки дополнительного кода получаются больше обычных, и не предназначены для развертывания.

В этот раз мы сосредоточим наш анализ на экспорте данных, в котором список людей записывается в файл блокнота.

Профилирование
В Performance Explorer выбираем Instrumentation и нажмаем Start Profiling. Нажимаем Get People. После загрузки людей ждем 10 секунд и нажмаем Export Data. Закрываем блокнот и программу. Профилировщик сгенерирует отчет.
Анализ
Профилировщик покажет такую картинку:

Мы не получили ту информацию, которую хотели. Отфильтруем данные. Мы специально ждали 10 секунд, чтобы просто отфильтровать ненужные сейчас данные профилирования. Отмечаем с 13-й до конца и нажимаем Filter by selection . Уже другой результат:

Hot Path показывает, что метод Concat занимает много времени (он также первый в списке Functions With Most Individual Work). Нажимаем на Concat , чтобы посмотреть детально информацию о методе.

Видно, что PeopleTrax.Form1.ExportData – единственный метод, который вызывает Concat . Нажимаем PeopleTrax.Form1.ExportData в вызывающих методах (Function calling this function ).

Анализируем метод в окне кода. Обратите внимание, что нет прямого вызова Concat. Вместе этого есть использование операнда += , который компилятор заменяет на методы System.String.Concat . Как уже почти все знают, что любые изменения в строках в.NET приводят к уничтожению старой версии строки и созданию измененной строки. К счастью в.NET есть класс StringBuilder который и предназначен для такой работы.

В проекте уже есть оптимизированный метод с использованием StringBuilder . В проекте PeopleTrax добавляем переменную компиляции OPTIMIZED_EXPORTDATA . Сохраняем и снова запускаем профайлер и сравниваем отчеты. Сразу видно (да и логически понятно) что мы оптимизировали вызовы Concat (с 6000 до 0 раз).

После запуска приложения на глаз видно заметное улучшение производительности. Очень важно запускать профилирование еще раз, даже есть видимые улучшения. Просмотр новых данных после исправления проблемы может показать другие проблемы в производительности приложений.

Одним из моих самых любимых инструментов является SQL Server Profiler, который часто называют просто Profiler. Эта утилита отображает данные о любом количестве детализированных событий SQL Server. Эти события сервера можно просматривать в окне Trace Properties (рис. 49.3), а также записывать в файл или таблицу для последующего анализа. Для регистрации всех событий или их избранного подмножества можно установить фильтры.

Puc. 49.2. В данном примере протокол счетчиков будет регистрировать информацию

о производительности SQL Server в каталоге С: \ Perf Logs

Утилиту SQL Server Profiler можно запустить из меню Tools программы Management Studio или непосредственно из папки SQL Server 2005 системного меню Пуск. Для просмотра действий вам необходимо либо определить новую трассировку, либо воспользоваться уже существующим файлом.

С выходом пакета обновлений SP1 SQL Server Profiler получил возможность Внимание! выполнять трассировку крупных массивов данных на больших компьютерах.

Кроме того, ранее при мониторинге службы анализа время отображалось в единицах универсального синхронизированного времени (UTC). Теперь используется локальное системное время. Ранее успешно воспроизведенные события подсчитывались некорректно, в результате пользователь получал некорректную статистику. Эта проблема была устранена.

Определение новой трассировки

Когда создается новая трассировка (либо с помощью команды меню File^New Trace, либо с помощью кнопки New Trace панели инструментов), создается также новое подключение к SQL Server и открывается диалоговое окно Trace Properties (рис. 49.4). Во вкладке General этого окна настраивается трассировка (в частности, имя, местоположение файла и т.п.), а во вкладке Events Selection определяются регистрируемые события, данные и фильтры. Если трассировка запущена, то эти параметры можно просматривать, но не изменять. Конфигурация трассировки может быть сохранена в виде шаблона, чтобы облегчить создание новых трассировок в будущем.

Рис. 49.4. Вкладка Events Selection окна Trace Properties позволяет отобрать события, отслеживаемые утилитой Profiler

Трассировку можно просматривать в реальном времени, однако эти данные могут одновременно записываться в файл или таблицу SQL Server. Это полезно для последующего интеллектуального анализа, сравнения с данными счетчиков монитора системы или для импорта в утилиту Database Engine Tuning Advisor.

Когда показания записываются в файл, для повышения производительности они объединяются в цепочки по 128 Кбайт; аналогично, при записи в таблицу данные группируются по несколько строк.

Чтобы сохранить данные, полученные программой Profiler, для последующего анализа, используйте высокопроизводительный файловый метод, а также серверную трассировку (о ней мы поговорим позже). Если вы хотите анализировать данные с помощью инструкций Т-SQL, используйте точно такой же подход, но после завершения сеанса трассировки откройте полученный файл в утилите Profiler и выберите в меню команду File^Save As^Table.

Отбор событий

Во вкладке Events Selection определяется состав действий, выполняемых сервером баз данных, которые будут регистрироваться утилитой Profiler. Подобно монитору производительности, Profiler может отслеживать множество ключевых событий SQL Server. Для упрощения настройки отбора можно использовать шаблоны, предлагаемые по умолчанию.

I Событие SQL Batch Completed основано на выполнении пакетов Т-SQL в

SVS целом (разделенных терминаторами пакетов), а не отдельных их инструкций.

| * Исходя из этого, Profiler регистрирует данные всего об одном событии, незави-

Симо от длины пакета. Для регистрации выполнения отдельных инструкций

DML используйте событие SQL Statement Complete.

Для воспроизведения трассировки можно использовать далеко не все события. Например, событие SQL Batch Start может быть воспроизведено, а событие SQL Batch Complete - нет.

В зависимости от событий для трассировки становятся доступными разные данные. Несмотря на то что столбец данных SPID кажется необязательным, это впечатление обманчиво - он обязателен.

Фильтрация событий

Программа Profiler способна собрать для вас такое количество информации, которая легко может в мгновение ока заполнить дисковое устройство. К счастью, предлагаемый программой фильтр (рис. 49.5) поможет вам ограничить этот массив только интересующими вас данными.

Рис. 49.6. Утилита SQL Server Profiler способна интегрировать данные монитора производительности и синхронизировать их с отслеженными событиями

Использование SQL Trace

Программу SQL Profiler обычно используют интерактивно, и для непостоянного сбора данных ее вполне достаточно. Однако длительные трассировки способны с легкостью накопить сотни тысяч записей, что может вызвать вполне конкретные проблемы на рабочей станции, выполняющей трассировку. Решение сводится к созданию журнала трассировки непосредственно на сервере. Такая трассировка вызовет небольшую дополнительную нагрузку на сервер; при этом файлы будут записываться блоками по 128 Кбайт.

В промышленных системах, осуществляющих трассировку на стороне сервера, запись данных в файл на сервере является лучшим способом сбора информации

о производительности при минимизации дополнительной нагрузки на сервер.

Трассировка, выполняемая на сервере, может быть определена и реализована с помощью набора системных хранимых процедур. Программный код вы можете написать самостоятельно или с помощью программы SQL Server Profiler.

Когда трассировка сконфигурирована и протестирована в SQL Server Profiler, выберите в меню команду File^Export^Trace Definition^For SQL Server 2005, чтобы сгенерировать сценарий T-SQL, способный выполнять трассировку на стороне сервера.

I Чтобы узнать, какие трассировки запущены на сервере, выполните запрос к ди-

SVS намическому представлению управления systraces. Когда вы посмотрите на I * результаты этого запроса, то увидите дополнительную трассировку. Первый * номер всегда имеет так называемая трассировка по умолчанию, которая собирает данные для журналов SQL Server, - ее невозможно остановить.

Для остановки серверной трассировки используйте системную хранимую процедуру sp_trace_setstatus. Первый ее аргумент (traceid) является идентификатором трассировки, а второй определяет характер действия. Нулевое значение параметра действия приводит к остановке трассировки, единица - к ее запуску, а двойка - к закрытию и удалению. В следующем коде останавливается трассировка с номером 2.

В этой лекции мы продолжим изучение хранимых процедур, которое начали в "Создание хранимых процедур и управление этими процедурами" . Вы узнаете, как анализировать хранимые процедуры и другие операторы T- SQL с помощью анализатора запросов Microsoft SQL Server Query Analyzer и профайлера SQL Server Profiler. Из этого анализа вы сможете определять, насколько эффективны операторы T- SQL . Эффективный запрос SQL Server использует подходящую последовательность операций и подходящие индексы для снижения количества обрабатываемых строк и минимизации количества операций ввода-вывода.

Используя Query Analyzer , вы можете видеть план исполнения , выбранный для оператора T- SQL оптимизатором запросов SQL Server . Оптимизатор запросов – это внутренний модуль , который ищет наилучший план исполнения для каждого оператора T- SQL . Оптимизатор запросов анализирует каждый оператор T- SQL , просматривает ряд возможных планов исполнения и выполняет оценку "стоимости" каждого плана с точки зрения требуемых ресурсов и времени обработки. Выбирается план с наименьшей стоимостью. Стоимость каждого плана определяется на основе имеющейся статистики, которая собрана системой и может оказаться устаревшей. Поскольку вы можете знать больше о вашей базе данных и ваших данных, чем оптимизатор запросов , то, возможно, вам удастся создать план, который окажется лучше, чем у оптимизатора запросов. Используя информацию, которую выдает Query Analyzer , вы можете определить, будет ли эффективным план оптимизатора запросов для определенного оператора, и если нет, то вы можете попытаться оптимизировать данный оператор, модифицируя его или используя подсказку SQL . В этой лекции вы узнаете, как оптимизировать операторы T- SQL , что будет дополнением к изучению использования Query Analyzer .

Используя Profiler, вы можете анализировать операции внутри вашей системы SQL Server , чтобы определять, какие операторы SQL и хранимые процедуры используют излишние системные ресурсы. Обладая этой информацией, вы можете сосредоточить свои усилия по настройке в первую очередь на этих операторах и хранимых процедурах. Кроме описания того, как использовать Profiler, в этой лекции также показано, как наиболее эффективно использовать информацию, получаемую с помощью Profiler.

Использование SQL Query Аnalyzer

Утилита Query Analyzer поставляется вместе с Microsoft SQL Server 2000 взамен