Я построю свой профайлер!

Preview:

DESCRIPTION

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

Citation preview

Я построю свой профайлер!

С гридами и кнопками!

Алексей Ковалёв

Спонсоры

SQL Trace: Что и зачем

Что?

Набор событий и данных, собранный

Database Engine.

Зачем?

Основное – что сейчас происходит на

сервере?

Собрать статистику выполнения

Методы получения информации

DMV.

Стандартный SQL Profiler.

Server side trace.

Extended events.

И наконец! Профайлер под заказ!

DMV!

Вы видите статистику выполнения!

Most executed/expensive queries, plans, so on….

Статистика – это круто.

Однако…

Статистика

0

10

20

30

40

50

60

70

80

90

1 2 3 4 5 6 7 8 9 10 1112131415161718192021222324

Каков тип нагрузки?

Пакетная обработка?

Равномерная загрузка?

Рабочие часы?

Никто не знает

Обобщенная статистика

– не ответ, мы требуем

подробностей!

Старый добрый профайлер!

Знакомый инструмент с хорошим UI

Выбор событий и данных

Фильтрация

Группировка

Сохранение трассы в таблицу/файл

Server side trace

sp_trace_create/sp_trace_setevent

Быстрый и экономный способ

Пишет трасу в файл на диск, с rollover/black box

Результат можно читать профайлером или fn_trace_gettable

Однако….

Требует дополнительных ресурсов диска, CPU для чтения/анализа/визуализации результатов собранной трассы

Что можно сделать с Server Side Trace

Мы можем читать трассы, так в чем же

дело?

Replay Markup Language – RML

ClearTrace

Любой инструмент с fn_trace_gettable() /

TraceFile

Extended events

Продвинутая версия server side trace

Больше настроек

Дополнительные потребители событий

Additional event targets (not only files)

Ловит события, которые не ловит обычная

траса

Так где же истина?

Никто не совершенен!

Ни одно из решений не устраивает нас на

все 100%

Единственный выход

Сделай сам!

Мы можем создать свой профайлер!

А зачем?

Гибкий и точный контроль трасы Продвинутое фильтрование

Продвинутые преобразования

Продвинутое группирование

Требуется меньше ресурсов Скользящее окно и раннее отбрасывание данных

Малые размеры

Зачем изобретать велосипед?

Microsoft.SqlServer.Management.Trace

TraceTable

TraceFile

TraceServer

Давайте же срочно кодить!

Трасу нужно:

Создать

Прочитать

Понять

Создать и прочитать трасу

declare @ret int,@p1 intexec @ret = sp_trace_create @p1 output,1,NULL,NULL,NULLdeclare @on bitset @on = 1--13 - SQL:BatchStartingexec sp_trace_setevent @p1,13, 1, @on -- TextData

exec sp_trace_setevent @p1,13, 11, @on -- LoginName

exec sp_trace_setevent @p1,13, 12,@on -- SPID

exec sp_trace_setstatus @p1, 1

exec sp_trace_getdata @p1, 0

А понять то как? Skip

Skip until 65526

EventClass 13 (0x0d) –

SQL:BatchStarting

Start record

1 – TextData, “exec sp_who”

11 – LoginName, “sa”

12 – SPID, 61

End record

Вот и всѐ, ребята!

Hello, trace!

Твой собственный

велосипед

профайлер!

Что дальше?

Декодируем курсоры

Ловим планы отдельных запросов

Собираем статистику по параметрам

Логируем выполнение хранимых процедур

Да всѐ что угодно!

Декодируем курсоры

Знакомая картинка, не так ли?

Так что всѐ таки происходит?

Кто-нибудь!

Сделайте что-нибудь!

Декодируем курсоры

Вытаскиваем id курсора и мапим на текст запроса

Ищем текст запроса по карте id<->sql

Удаляем курсор из маппинга

sp_prepare/sp_prepexec

sp_execute/sp_fetch

sp_unprepare/sp_close

Ловим план отдельного запроса

Например, планы

где reads > 100

Логируем выполнение процедур Тот же принцип, что и при ловле

отдельного плана Ловим SP:Starting

Продолжаем ловитьпоследующие события

Пока не поймаем SP:Completed

Если набранная информация подпадает под критерий(например по reads или времени выполнения) –сохраняем результат

Отбрасываем накопленную информацию

Ждем следующего SP:Starting –и начинаем заново

Собираем статистику по параметрам

Закон Парето: 20/80

20% значений используются в 80% запросов

Как собирать?

Ловим стейтмент

Разбираем его (regexp/парсер)

Извлекаем параметры и их значения

Собираем статистику

Собираем детальную информацию

10 20 30 40 50 60 70 80 90 100

Распределение запросов по длительности

0-6 7-12 13-19 20-24

Распределение запросов по времени суток

GetBalance

PayDebt

CancelOrder

Окрестности запроса

Техническая поддержка приложений

Автоматические или полуавтоматические

Сбор трасы

Сбор статистики выполнения

Соотнесения трасы запросов и счетчиков

производительности Windows

Resources

http://msdn.microsoft.com/en-us/library/hh245121.aspx

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.trace.aspx

http://support.microsoft.com/kb/944837

https://expressprofiler.codeplex.com/

http://technet.microsoft.com/en-us/library/cc293613.aspx

http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.transactsql.scriptdom.tsqlparser.aspx

Спонсоры

Спасибо!

Recommended