Upload
alexey-kovaliov
View
88
Download
5
Embed Size (px)
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
Сообщество
Russian SQL Server UG
https://www.facebook.com/groups/144858492215825/
http://ineta.ru/sqlrus/
RuBI PASS Chapter
https://www.facebook.com/groups/148075185212163/
http://ineta.ru/rubi/
Спонсоры
Спасибо!