Основные факторы и метрик舦 · SQL – TuneTable •Наиболее...
Transcript of Основные факторы и метрик舦 · SQL – TuneTable •Наиболее...
Как находить «бутылочные горлышки»,
как решать проблемы производительности,
как достигать максимальной производительности
Производительность в Caché Хабаровск 2016
Сергей Кудинов
Основные факторы и метрики
Системные факторы, влияющие на производительность
CPU
I/O
(доставка данных от/к
CPU)
CPU
I/O
- Диск
- Сеть
Память
Системные факторы, влияющие на производительность
Системные метрики
CPU
I/O
- Диск
-Сеть
Память
Загрузка CPU iowait/Очередь
диска
Доступная
память
sar | glance | nmon
iostat | vmstat
top | topas
perfmon
logman
Process Explorer
PERFDAT
T4
MONITOR
UNIX - LINUX -
OSX
Windows
OpenVMS
Утилиты для работы с системными метриками
Используйте эти утилиты
вместе с Caché: Nagios Core; Nagios XI
OpenView
Tivoli
BMC
OpenNMS
PRTG Traffic Monitor и др.!
Утилиты для работы с системными метриками
Рекомендуется централизованный сбор
Метрики Caché
CPU
I/O БД CACHE.DAT, WIJ, Журналы
Memory
I/O не в БД
файлы, сеть
RoutineCommands GloRefs Cache
Efficiency
Полное время выполнения
Ключевые метрики Caché
• GloRef
– Единичная операция доступа к глобалам (get, set, kill)
– Влияет на загрузку I/O (Файлы БД и Память )
• Routine Commands
– Единичное выражение COS
– Влияет на загрузку CPU
• Время выполнения
– Общая оценка производительности
– Зависит от всех факторов
GloRef
Routine
Commands
Время
выполнения
Основные метрики - Выводы
• Загрузка CPU и I/O - 2 главных фактора, влияющих на производительность
• GloRefs, RoutineCommands и Время Выполнения –наиболее важные метрики, со стороны Caché
• Уменьшение этих метрик для отдельных задач может значительно повысить производительность системы в целом
Определение «узких» мест
Инструменты для сбора метрик
• pButtons – самый простой сбор всей информации о системе
– рекомендуется при работе с WRC
• GLOSTAT – значение метрик Cachè системы в целом
– Начальный анализ состояния системы в целом
• PERFMON – определение наиболее загруженных программ и глобалов
– Начальное определение узких мест
• %SYS.MONLBL – построчный анализ кода
– Анализ наиболее «тяжелых» строк кода
• %SYS.PTools – анализ SQL – запросов
GloRef
Routine
Commands
Время
выполнения
pButtons
• Записывает основные системные метрики и метрики Caché
• Низкая нагрузка на систему
• Документирована в Caché Monitoring Guide
• Вызова
• Через терминал: %SYS>DO ^pButtons
• По расписанию Менеджера задач
• Последняя версия доступна по адресу ftp://ftp.intersystems.com/pub/performance/
GLOSTAT
%SYS>DO ^GLOSTAT
Physical Block Reads
Routine Command
Cache
Efficiency/Buffer Use
Global References
PERFMON
• Утилита, собирающая информацию, упорядоченную по глобалам и программам
• Может ответит на следующие вопросы:
– Какая программа выполнила больше всего кода?
– Работа с какими глобалами была наиболее интенсивной?
– Кол-во записей блоков программами…
– и т.д.
%SYS.MONLBL
• Собирает метрики как и PERFMON, но для выполнения конкретных строк кода
Time – Время, затраченное на выполнение строки
Total Time – Время, затраченное на выполнение строки с учетом вызова метод, процедур…
Метрики – сбор в коде
• Собирайте для любого теста
• Время выполнения
- $ZHorolog
• Global References, Routine Commands
- %SYS.ProcessQuery
- $System.Process (с 2015.1, БЫСТРЕЕ!!!)
- %Monitor.Process для других метрик
• В Ensemble уже есть данные для
• Ens.MessageHeader
• Для SQL-Only запросов
• %SYS.Ptools собираете данные
• Анализируйте собранные данные DeepSee!!!
GloRef
Routine
Commands
Время
выполнения
– Для каждого вызова Web-сервиса записывается:
• Имя метода
• Время старта
• Время окончания
• Пользователь
• Exception
Пример – Партнер X
DeepSee – Активность за день
DeepSee – Наиболее медленные методы
• Сейчас
– Для каждого вызова Web-сервиса записывается:
• Method Name
• $ZHorolog (время с максимальной точностью)
• Global References, Routine Commands
– UnitTests – запуск после каждой сборки
• Сравнение результатов с предыдущей сборкой
• Значительное ухудшение метрик пересмотр кода, чтобы не допустить проблем с производительностью у клиента
Пример – Партнер X
Полезные инструменты
• DeepSee + ваши log table
• $ZHorolog
• %SYS.ProcessQuery (GloRef, RtnComands)
• $System.Process (c 2015.1,БЫСТРЕЕ!!!)
• %Monitor.Process
• %SYS.PTools
• Index Analyzer (2013.1)
Средства Caché и ОС
Windows Unix Caché
Активность системы
perfmon.exe logman
vmstat, iostat, sar
GLOSTAT, mgstat
Самые“тяжелые” процессы
Task Manager top PERFMON
PROFILE
%SYS.PTools
Анализ конкретного процесса
Process Explorer
truss, strace %SYS.MONLBL
%Monitor.Process
Другие средства SysInternals Misc. tools cstat
Рекомендации по производительности
Увеличьте в 2 раза тестовую БД
• Не обязательно нужен реальный объем
– Увеличения 100 200 записей может быть достаточно для понимания общей картины
• Значения Glorefs, Routine Commands в тестах
– Линейное (2x) увеличение метрик (Full Table Scan/отсутствующий индекс)
– Экспоненциальное увеличение –требуется пересмотр алгоритма
Эмуляция очень большого размера БД
• Тестовая БД может эмулировать работу с реальной БД
• Уменьшите размер Global Buffers в пропорции Тестовая БД / Реальная БД (50MB/5GB)
• Оценивайте относительные изменения показателей производительности с разными размерами кэша
– Значительное уменьшение производительности – операции чтения с диска. Подобное поведение будет и на реальной БД
Сброс кэша Global buffers
• Иногда необходимо сбросить кэш для корректного вычисления временных метрик
• Отмонтирование/Примонтирование БД очищает все буферы для БД
– Класс SYS.Database, методы Mount()/Dismount()
Работа с тестовой БД
• Требуемый сценарий:
– Запустить тест
– Откорректировать код
– Запустить тест на тех же данных
• Подход:
– Разделите в области БД кода и данных
– Отмонитируйте БД
• Класс SYS.Database, метод Dismount()
– Скопируйте файл БД данных из бэкапа
• Класс %File, метод CopyFile
– Примонтируйте БД
• Класс SYS.Database, метод Mount()
SQL Index Analyzer
SQL – TuneTable
• Наиболее важный фактор в оптимизации SQL запросов
• Первый вопрос, который вам задатут в WRC:
– “Have You Tried Running TuneTable?”
• Проблемы:
– Необходимо реалистичное поведение SQL оптимизатора на сгенерированной БД
– Новая инсталляция , тестовая БД не отражают картины
• Решение:
– Перенос статистики TuneTable с реальной БД
• Запуск TuneTable на реальной БД
• $system.SQL.ExportTuneStats()
• $system.SQL.ImportTuneStats()
Upgrade!!!
• Недавние значительные увеличения производительности
– Скорость компиляции
– Новые быстрые!!! локальные массивы
– Работа с XML
– Работа с JSON
– Async I/O
– Параллелизация SQL
– Значительное увеличение производительности на многоядерных (>32 ) серверах
Упражнения
ВОПРОСЫ?