33
Как находить «бутылочные горлышки», как решать проблемы производительности, как достигать максимальной производительности Производительность в Caché Хабаровск 2016 Сергей Кудинов

Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Как находить «бутылочные горлышки»,

как решать проблемы производительности,

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

Производительность в Caché Хабаровск 2016

Сергей Кудинов

Page 2: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Основные факторы и метрики

Page 3: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Системные факторы, влияющие на производительность

CPU

I/O

(доставка данных от/к

CPU)

Page 4: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

CPU

I/O

- Диск

- Сеть

Память

Системные факторы, влияющие на производительность

Page 5: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Системные метрики

CPU

I/O

- Диск

-Сеть

Память

Загрузка CPU iowait/Очередь

диска

Доступная

память

Page 6: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

sar | glance | nmon

iostat | vmstat

top | topas

perfmon

logman

Process Explorer

PERFDAT

T4

MONITOR

UNIX - LINUX -

OSX

Windows

OpenVMS

Утилиты для работы с системными метриками

Page 7: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Используйте эти утилиты

вместе с Caché: Nagios Core; Nagios XI

OpenView

Tivoli

BMC

OpenNMS

PRTG Traffic Monitor и др.!

Утилиты для работы с системными метриками

Рекомендуется централизованный сбор

Page 8: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Метрики Caché

CPU

I/O БД CACHE.DAT, WIJ, Журналы

Memory

I/O не в БД

файлы, сеть

RoutineCommands GloRefs Cache

Efficiency

Полное время выполнения

Page 9: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Ключевые метрики Caché

• GloRef

– Единичная операция доступа к глобалам (get, set, kill)

– Влияет на загрузку I/O (Файлы БД и Память )

• Routine Commands

– Единичное выражение COS

– Влияет на загрузку CPU

• Время выполнения

– Общая оценка производительности

– Зависит от всех факторов

GloRef

Routine

Commands

Время

выполнения

Page 10: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Основные метрики - Выводы

• Загрузка CPU и I/O - 2 главных фактора, влияющих на производительность

• GloRefs, RoutineCommands и Время Выполнения –наиболее важные метрики, со стороны Caché

• Уменьшение этих метрик для отдельных задач может значительно повысить производительность системы в целом

Page 11: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Определение «узких» мест

Page 12: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Инструменты для сбора метрик

• pButtons – самый простой сбор всей информации о системе

– рекомендуется при работе с WRC

• GLOSTAT – значение метрик Cachè системы в целом

– Начальный анализ состояния системы в целом

• PERFMON – определение наиболее загруженных программ и глобалов

– Начальное определение узких мест

• %SYS.MONLBL – построчный анализ кода

– Анализ наиболее «тяжелых» строк кода

• %SYS.PTools – анализ SQL – запросов

GloRef

Routine

Commands

Время

выполнения

Page 13: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

pButtons

• Записывает основные системные метрики и метрики Caché

• Низкая нагрузка на систему

• Документирована в Caché Monitoring Guide

• Вызова

• Через терминал: %SYS>DO ^pButtons

• По расписанию Менеджера задач

• Последняя версия доступна по адресу ftp://ftp.intersystems.com/pub/performance/

Page 14: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

GLOSTAT

%SYS>DO ^GLOSTAT

Physical Block Reads

Routine Command

Cache

Efficiency/Buffer Use

Global References

Page 15: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

PERFMON

• Утилита, собирающая информацию, упорядоченную по глобалам и программам

• Может ответит на следующие вопросы:

– Какая программа выполнила больше всего кода?

– Работа с какими глобалами была наиболее интенсивной?

– Кол-во записей блоков программами…

– и т.д.

Page 16: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

%SYS.MONLBL

• Собирает метрики как и PERFMON, но для выполнения конкретных строк кода

Time – Время, затраченное на выполнение строки

Total Time – Время, затраченное на выполнение строки с учетом вызова метод, процедур…

Page 17: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Метрики – сбор в коде

• Собирайте для любого теста

• Время выполнения

- $ZHorolog

• Global References, Routine Commands

- %SYS.ProcessQuery

- $System.Process (с 2015.1, БЫСТРЕЕ!!!)

- %Monitor.Process для других метрик

• В Ensemble уже есть данные для

• Ens.MessageHeader

• Для SQL-Only запросов

• %SYS.Ptools собираете данные

• Анализируйте собранные данные DeepSee!!!

GloRef

Routine

Commands

Время

выполнения

Page 18: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

– Для каждого вызова Web-сервиса записывается:

• Имя метода

• Время старта

• Время окончания

• Пользователь

• Exception

Пример – Партнер X

Page 19: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

DeepSee – Активность за день

Page 20: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

DeepSee – Наиболее медленные методы

Page 21: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

• Сейчас

– Для каждого вызова Web-сервиса записывается:

• Method Name

• $ZHorolog (время с максимальной точностью)

• Global References, Routine Commands

– UnitTests – запуск после каждой сборки

• Сравнение результатов с предыдущей сборкой

• Значительное ухудшение метрик пересмотр кода, чтобы не допустить проблем с производительностью у клиента

Пример – Партнер X

Page 22: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Полезные инструменты

• DeepSee + ваши log table

• $ZHorolog

• %SYS.ProcessQuery (GloRef, RtnComands)

• $System.Process (c 2015.1,БЫСТРЕЕ!!!)

• %Monitor.Process

• %SYS.PTools

• Index Analyzer (2013.1)

Page 23: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Средства 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

Page 24: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

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

Page 25: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Увеличьте в 2 раза тестовую БД

• Не обязательно нужен реальный объем

– Увеличения 100 200 записей может быть достаточно для понимания общей картины

• Значения Glorefs, Routine Commands в тестах

– Линейное (2x) увеличение метрик (Full Table Scan/отсутствующий индекс)

– Экспоненциальное увеличение –требуется пересмотр алгоритма

Page 26: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Эмуляция очень большого размера БД

• Тестовая БД может эмулировать работу с реальной БД

• Уменьшите размер Global Buffers в пропорции Тестовая БД / Реальная БД (50MB/5GB)

• Оценивайте относительные изменения показателей производительности с разными размерами кэша

– Значительное уменьшение производительности – операции чтения с диска. Подобное поведение будет и на реальной БД

Page 27: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Сброс кэша Global buffers

• Иногда необходимо сбросить кэш для корректного вычисления временных метрик

• Отмонтирование/Примонтирование БД очищает все буферы для БД

– Класс SYS.Database, методы Mount()/Dismount()

Page 28: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Работа с тестовой БД

• Требуемый сценарий:

– Запустить тест

– Откорректировать код

– Запустить тест на тех же данных

• Подход:

– Разделите в области БД кода и данных

– Отмонитируйте БД

• Класс SYS.Database, метод Dismount()

– Скопируйте файл БД данных из бэкапа

• Класс %File, метод CopyFile

– Примонтируйте БД

• Класс SYS.Database, метод Mount()

Page 29: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

SQL Index Analyzer

Page 30: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

SQL – TuneTable

• Наиболее важный фактор в оптимизации SQL запросов

• Первый вопрос, который вам задатут в WRC:

– “Have You Tried Running TuneTable?”

• Проблемы:

– Необходимо реалистичное поведение SQL оптимизатора на сгенерированной БД

– Новая инсталляция , тестовая БД не отражают картины

• Решение:

– Перенос статистики TuneTable с реальной БД

• Запуск TuneTable на реальной БД

• $system.SQL.ExportTuneStats()

• $system.SQL.ImportTuneStats()

Page 31: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Upgrade!!!

• Недавние значительные увеличения производительности

– Скорость компиляции

– Новые быстрые!!! локальные массивы

– Работа с XML

– Работа с JSON

– Async I/O

– Параллелизация SQL

– Значительное увеличение производительности на многоядерных (>32 ) серверах

Page 32: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

Упражнения

Page 33: Основные факторы и метрик舦 · SQL – TuneTable •Наиболее важный фактор в оптимизации SQL запросов •Первый

ВОПРОСЫ?