Решение задачи повышения производительности

advertisement
Решение задачи повышения
производительности приложений на базе
Caché и Ensemble
Сергей Кудинов
План
Что влияет на производительность
Увеличение производительности в приложении
Мониторинг производительности
План
Что влияет на производительность
Увеличение производительности в приложении
Мониторинг производительности
Что влияет на производительность
• Компоненты Cache’
– Взаимодействие между ОС, диском, сетью,
памятью, файловой системой
• Дисковая система
• Файловая система
• Эффективное выделение буферов
• Процессоры
• Код приложения
Компоненты Cache’
• Как выполняется запись в БД
– Достаточно ли быстро выполняется запись – если нет
почему?
– Unix или VMS? Новый параметр ‘wdstrategy’
• Роль журналирования
– Не стоит журналировать все БД
– Роль журналирования в ECP
• Управление буфером
– Как использовать флаг ‘batch’
• Сеть
– Задержка и производительность сети
Дисковая система
• Вы уже слышали, что это важно…
– Это все еще очень важно, потому что…
• Что означают различные уровни RAID массива
– RAID 10/5 хорошо или плохо?
• LUN и диск
• Использование OS striping в RAID массивах
Файловая система
• Какие есть опции монтирования в Cache’
– Что поддерживается и рекомендуется ?
• LVM и дополнительные логические разделы на диске
– Striping (распределение по дискам)
– Зеркалирование
– Управление размером блока
ZFS
“The Solaris ZFS offers a dramatic advance in data
management with an innovative approach to data integrity,
tremendous performance improvements, and a welcome
integration of file system and volume management
capabilities.”
http://www.sun.com/software/solaris/zfs_learning_center.jsp
• ZFS – файловая система по умолчанию для Open
Solaris, и скоро будет для Solaris
• ZFS поддерживается Caché начиная с 2009.1
Эффективное выделение буферов
• Могут ли слишком большие буферы быть проблемой?
– Иногда да…зависит от многих причин
• Слишком маленькие буферы – всегда проблема…но
что это значит?
– Задержки при чтении и записи
• Опция блокировки в памяти?
– Что это значит и стоит ли ею пользоваться?
– Поддержка больших страниц?
Процессоры
• Почему слишком большое количество процессоров
может быть проблемой
– Гоночный автомобиль с шинами от велосипеда
– Слишком много процессов создают нагрузку на дисковую
систем, которая не успевает их обработать
План
Что влияет на производительность
Увеличение производительности в приложении
Мониторинг производительности
$ORDER/$QUERY 3-й аргумент
$ORDER(^GlobalData(ref),1,dataRow)
– В переменной dataRow – значение узла,
следующего за ^GlobalData(ref)
– Позволяет на 1 уменьшить значение Global
Reference при чтении данных…
– Пример для 500,000 records:
• “Обычный подход” ($Order/Set)
• 3-q параметр
• Почти в 2 раза быстрее!
= 1.20 seconds
= 0.65 seconds
$SORTBEGIN/$SORTEND
• $SORTBEGIN переводит в специальный режим
сортировки для указанного глобала, при котором
данные сначала пишутся во временный буфер.
Set x=$sortbegin(^PatientI)
Do ##class(Patient).InsertData()
Set x=$sortend(^PatientI,1)
• $SORTEND завершает решим специальной сортировки.
Данные копируются из временного буфера в глобал.
Копирование не происходит, если значение аргумента 0.
Функции работы со списками
• При большом количестве данных функции работы со
списками НАМНОГО быстрее $PIECE.
• Не возникает проблем с разделителями.
• Используйте их.
ZZDUMP $LISTBUILD("ABC",12,3.4)
0000: 05 01 41 42 43 03 04 0C 04 06 FF 22
Функции работы с коллекциями
• Использование метода Count()
Set obj=##class(Package.Class).%OpenId(n)
Set count=obj.Names.Count()
For I=1:1:count {
set name=obj.Names.GetAt(I)
}
• Использование метода GetNext() - ==> 20% быстрее
Set obj=##class(Package.Class).%OpenId(n)
Set key=“”
Do {
set name=obj.Names.GetNext(.key)
……..
} while key’=“”
Использование PrimaryKey
• Уменьшает # of Global Reference.
– Добавьте PrimaryKey в описание уникального
индекса.
– В БД с 1,000,000 записей время для поиска и
открытия 50,000 случайных записей 3.79 секунды
без использования PrimaryKey, с использованием
1.28 секунды.
– Может быть необязательным при использовании
IndexOpen методов.
Методы IndexNameOpen()
• Метод IndexNameOpen() генерируются для каждого
Unique и IDKEY индекса класса.
– Index StoryIDIndex on StoryID [ Unique ]
– Для открытия объекта StoryID=1003
Set story=##class(User.Story).StoryIndexOpen(1003)
Методы PropertyNameSetObjectId
Set invoice=##class(MyApp.Invoice).%New()
Set invoice.CustomerName="Test"
Do invoice.%Save()
Set id=invoice.%Id()
Kill invoice
For index = 1:1:10000
{
Set Item = ##class(MyApp.LineItem).%New()
Set Item.Product = "Item"_index
Set Item.Quantity = index*index
Do Item.TheInvoiceSetObjectId(id)
Do Item.%Save()
Kill Item
}
Динамические SQL запросы
• Старый класс – %Library.ResultSet.
• Новый класс – %ResultSet.SQL
• %ResultSet.SQL значительно быстрее
%Library.ResultSet, сравнимо со встроенным SQL.
• %ResultSet.SQL постоянно совершенствуется.
Private Global
• Что это?
– Глобальная переменная, которая доступна только
процессу создавшему ее. Видна изо всех областей.
Удаляется при завершении процесса.
• Преимущества:
– Не нужно очищать. Особенно при возникновении
ошибок.
– Не нужен узел $Job.
– Некоторое преимущество по производительности.
• Недостаток:
– Сложнее отлаживать.
Блокировки
• >LOCK +^data(id)#"s"
– Несколько процессов могут выполнить
разделяемую блокировку.
– Разделяемая блокировка не дает выполнить
эксклюзивную блокировку.
– Разделяемые эксклюзивные блокировки считаются
независимо друг от друга
• LOCK +var1:0
– Результат попытки в $Test
Операции со строками
• $ZSTRIP
– Удаляет типы символов/отдельные символы из
строки
• $ZCONVERT (string,mode,trantable,handle)
– mode = (U,L,T,W,S, I,O)
– translation table = (Raw, Same, HTML, JS, URL, UTF8,
XML)
– Handle – переменная в которую попадает не
преобразованное значение
План
Что влияет на производительность
Увеличение производительности в приложении
Мониторинг производительности
Где узкое место?
• Вы знаете, где «узкое» место?
• Вы действительно знаете, где «узкое» место?
• Какими утилитами пользоваться?
Какие метрики?
• Какими утилитами пользоваться?
Встроенные утилиты
• ^GLOSTAT, SMP (только интерактивные)
• ^Buttons,^pButtons
• cstat, планы запросов
• ^PERFMON, ^%SYS.MONLBL, ^PROFILE
• ^mgstat, ^mpmon
• %MONITOR, %SYS.STATS
• другие
^Buttons
^Buttons
• Содержит
–
–
–
–
Информацию cconsole.log
Системные показатели
Простой способ для получения статистики
Не содержит приватной информации
• В 2009.1 ^Buttons создает CACHE.DAT
• Уменьшен размер HTML отчета
GLOSTAT / cstat -> mgstat
• ^GLOSTAT – показывает параметры работы с
глобалами всей системы в целом
• cstat – системные показатели
• ^mgstat – сочетает параметры ^GLOSTAT и cstat
– Взаимодействие между ОС, диском, сетью,
памятью, файловой системой
– Статистика ECP
– csv формат
^mgstat и Excel
^PERFMON -> ^mpmon
• ^PERFMON
– Статистика работы с глобалами и программами по
процессам
– Набор предопределенных показателей
• ^mpmon
– Утилита WRC performance team собирающая набор
показателей
– Вывод в csv
%SYS.MONLBL
• Выберите программу(ы) для мониторинга
• Отчет в виде времени выполнения INT кода
^PROFILE
• Новая утилита в 2009.1
• Сочетание ^PERFMON & ^%SYS.MONLBL
• Интерактивная
%SYS.PTools.SQLStats
• Специально для анализа SQL, появилась начиная с
2008.1
• DO SetSQLStats^%apiSQL(flag)
• Опция времени компиляции
– Необходимо удалить кэшированные запросы и
перекомпилировать при включенной статистике
– Статистика удаляется при компиляции
• Статистика собирается на уровне запросов и модулей
• Измеряются параметры выполнения кода, обращений к
глобалам, времени выполнения…
SQL оптимизатор
• Цель – минимизировать операции I/O, загрузка
процессора вторична
• TuneTable собирает статистику по данным таблиц,
которая используется оптимизатором для порядка
обработки условий запроса
• Используйте TOP и ORDER BY для скорейшего
получения первых записей результата
• Используйте %INORDER и %IGNOREINDICES
• План запроса позволяет определить логику обработки
запроса, недостающие индексы…
Сторонние утилиты
• BMC Patrol
• SNMP
• WMI
Patrol
• BMCSoftware’s Performance Manager
• Нет необходимости использовать BMC
• Сбор параметров в текстовом файле “patrol.dat” в mgr
каталоге
• Значения могут быть ‘итоговые’, ‘разница’ or ‘%
отношение’
• Можно выделить максимально нагруженные процессы.
SNMP & WMI
• Простые в настройке инструменты сбора показателей
• Требуется включение %Service_Monitor
• Существующие показатели
–
–
–
–
–
–
–
Использование буферов
Блокировки БД
Размер БД
Загрузка WD
ECP
Использование лицензий
…
Утилиты OC
• Windows Perfmon
• nmon, svmon, filemon, mpstat, topas
• glance, ps, sar, vmstat, iostat
• tusc, truss, strace
• T4, monitor
• evaperf, vevamon, (+other san utilities)
• netstat, wireshark
• (log-файлы)
WRC
• Performance – один из типов WRC-проблем
• Существует InterSystems WRC Performance Team
• Обращайтесь!!!
Спасибо за внимание!
Вопросы?
Сергей Кудинов (sergey.kudinov@intersystems.com)
+7 (495) 967-0088
Download