Производительность в Caché

advertisement
Производительность в Caché
Как находить «бутылочные горлышки»,
как решать проблемы производительности,
как достигать максимальной производительности
Сергей Кудинов
Основные факторы и метрики
Системные факторы, влияющие на производительность
I/O
CPU
(доставка данных от/к
CPU)
Системные факторы, влияющие на производительность
I/O
CPU
Память
- Диск
- Сеть
Системные метрики
I/O
CPU
Загрузка CPU
Память
Доступная
память
- Диск
-Сеть
iowait/Очередь
диска
Системные метрики
•  Системные утилиты
–  Perfmon.exe, Task Manager, Activity Monitor, top,
vmstat
–  Смотрим на загрузку CPU, процессы ОС наиболее
загружающие CPU, Очередь диска/iowait
Метрики Caché
I/O не в БД
файлы, сеть
CPU
Memory
I/O БД
RoutineCommands
Cache
Efficiency
Полное время выполнения
CACHE.DAT, WIJ, Журналы
GloRefs
Ключевые метрики Caché
•  GloRef
GloRef
Routine
Commands
–  Единичная операция доступа к глобалам (get, set,
kill)
Время
–  Влияет на загрузку I/O (Файлы БД и Память )
выполнения
•  Routine Commands
–  Единичное выражение COS
–  Влияет на загрузку CPU
•  Время выполнения
–  Общая оценка производительности
–  Зависит от всех факторов
Связь процессов OC и Caché
•  PID процесса OC = PID Caché ($Job)
–  Постарайтесь найти процессы ОС с помощью SMP Caché
^GLOSTAT
•  Утилита для анализа основных метрик Caché
Сбор данных за период времени
•  Важно получить значения метрик за значимый период
времени
•  Уровень ОС
–  logman (Windows)
–  sar, vmstat, iostat (*nix)
•  Уровень Caché
–  ^pButtons,^mgstat
•  Внешние средства
–  SNMP, WMI
–  BMC Patrol
Основные метрики - Выводы
•  Загрузка CPU и I/O - 2 главных фактора, влияющих на
производительность
•  GloRefs, RoutineCommands и Время Выполнения –
наиболее важные метрики, со стороны Caché
•  Уменьшение этих метрик для отдельных задач может
значительно повысить производительность системы в
целом
Определение «узких» мест
Инструменты для сбора метрик
•  pButtons – самый простой сбор всей информации
о системе
–  рекомендуется при работе с WRC
•  GLOSTAT – система в целом
–  Начальный анализ состояния системы в целом
•  PERFMON – определение наиболее загруженных
программ и глобалов
–  Начальное определение узких мест
•  %SYS.MONLBL – построчный анализ кода
–  Анализ наиболее «затратных» строк кода
•  %SYS.PTools – анализ SQL – запросов
GloRef
Routine
Commands
Время
выполнения
Метрики – сбор в коде
GloRef
•  Собирайте для любого теста
•  Время выполнения
- $zh
•  Global References, Routine Commands
- %SYS.ProcessQuery
- $system.Process (с 2015.1, БЫСТРЕЕ!!!)
- %Monitor.Process для других метрик
•  В Ensemble уже есть данные для
•  Ens.MessageHeader
•  Для SQL-Only запросов
•  %SYS.Ptools собираете данные
•  Анализируйте собранные данные DeepSee!!!
Routine
Commands
Время
выполнения
Пример – Партнер X
–  Для каждого вызова Web-сервиса записывается:
•  Имя метода
•  Время старта
•  Время окончания
•  Пользователь
•  Exception
DeepSee – Активность за день
DeepSee – Наиболее медленные методы
Пример – Партнер X
•  Сейчас
–  Для каждого вызова Web-сервиса записывается:
•  Method Name
•  $ZHorolog (время с максимальной точностью)
•  Global References, Routine Commands
–  UnitTests – запуск после каждой сборки
•  Сравнение результатов с предыдущей сборкой
•  Значительное ухудшение метрик è пересмотр кода, чтобы не
допустить проблем с производительностью у клиента
Полезные инструменты
•  DeepSee + ваши log table
•  $ZHorolog
•  %SYS.ProcessQuery (GloRef, RtnComands)
•  $system.Process (c 2015.1,БЫСТРЕЕ!!!)
•  %Monitor.Process
•  %SYS.PTools
•  Index Analyzer (2013.1)
^PERFMON
•  Утилита, собирающая информацию, упорядоченную по
глобалам и программам
•  Может ответит на следующие вопросы:
– 
– 
– 
– 
Какая программа выполнила больше всего кода?
Работа с какими глобалами была наиболее интенсивной?
Кол-во записей блоков программами…
и т.д.
Пример сессии ^PERFMON
%SYS>do ^PERFMON
<1> Start Monitor
<10> Processes (число процессов)
<300> Routines (число программ)
<300> Globals (число глобалов)
<10> (Databases (число БД)
<5> (default) Network Nodes (число узлов сети)
Monitor is Started
Пример сессии ^PERFMON
<3> Pause Monitor
<7> Report Statistics
<C> Custom Category
<*> Report All Metrics
<R> Sort by Routine
<D> Delimited format
<Имя Файла>
Пример сессии ^PERFMON
Загрузите файл в Excel ( используя разделитель ‘,’)
Отсортируйте по нужной метрике
Анализ отчета ^PERFMON
•  Наиболее важные метрики
–  Global References/Routine Lines – общая активность
•  Важные метрики
– 
– 
– 
– 
Data Block Read/Write – какой именно тип нагрузки у диска
Journal Entries – изменение журналируемых БД
Block Allocation – добавление новых данных
Lock/Lock Fail – статистика по блокировкам, проблемам с
блокировками
^%SYS.MONLBL
•  Собирает метрики как и PERFMON, но для выполнения
конкретных строк кода
Time – Время, затраченное на выполнение строки
Total Time – Время, затраченное на выполнение строки с
учетом вызова метод, процедур…
Мониторинг – другие средства
•  %Monitor.Process – класс с API для сбора метрик для
текущего процесса
–  Собирает те же метрики, что и PERFMON/MONLBL
–  Не влияет на производительность (безопасно для анализа
production серверов)
–  Данные доступны только внутри процесса (необходимо
использовать API)
•  ^PROFILE
–  “Гибрид” of PERFMON и %SYS.MONLBL
–  Удобна для начала анализа ситуации
^PROFILE
Мониторинг SQL - %SYS.PTools
•  Средство для мониторинга выполнения SQL запросов
–  Работает с кэшируемыми запросама (предварительно
необходимо удаление кэшированных запросов)
–  Работает с запросами классов и встроенным SQL (требуется
перекомпиляция)
–  Собирает метрики о выполнении запросов (время, GloRefs и
т.д.)
–  SQL доступ к полученным результатам (пакет %SYS_PTools)
Мониторинг SQL - %SYS.PTools
•  Запуск сбора статистики при выполнении SQL запросов
Do $SYSTEM.SQL.SetSQLStats(2)
•  Удалить кэшированные запросы
•  Запустить SQL-запросы
•  Остановить сбор статистики
Do $SYSTEM.SQL.SetSQLStats(0)
•  Анализ данных в %SYS_PTools.SQLStatsView
Мониторинг SQL - %SYS.PTools
SELECT RoutineName, QueryText, COUNT(*) as CountTotal,
SUM(TotalTime) as TimeTotal
FROM %SYS_PTools.SQLStatsView
WHERE namespace=‘SAMPLES'
GROUP BY RoutineName
ORDER BY CountTotal
Средства Caché и ОС
Windows
Unix
Активность
Perfmon.exe vmstat, iostat,
системы
logman
sar
Самые“тяжелые” Task Manager top
процессы
Анализ
конкретного
процесса
Другие средства
Process
Explorer
truss, strace
SysInternals
Misc. tools
Caché
GLOSTAT, mgstat
PERFMON
PROFILE
%SYS.PTools
%SYS.MONLBL,
%Monitor.Process
cstat
Определение «узких» мест - Итоги
•  Средства для определения «узких» мест:
– 
– 
– 
– 
PERFMON
%SYS.MONLBL
PROFILE
%SYS.PTools
Рекомендации по увеличению
производительности
Увеличьие в 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 ) серверах
Упражнения
Download