420 likes | 700 Views
Решение задачи повышения производительности приложений на базе Caché и Ensemble. Сергей Кудинов. План. Что влияет на производительность. Увеличение производительности в приложении. Мониторинг производительности. План. Что влияет на производительность.
E N D
Решение задачи повышения производительности приложений на базе 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) = 1.20 seconds 3-q параметр = 0.65 seconds Почти в 2 раза быстрее!
$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 GlobalReference. Добавьте 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 invoiceFor 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 Содержит Информацию cconsole.log Системные показатели Простой способ для получения статистики Не содержит приватной информации В 2009.1 ^Buttons создает CACHE.DAT Уменьшенразмер HTML отчета
GLOSTAT / cstat -> mgstat • ^GLOSTAT – показывает параметры работы с глобалами всей системы в целом • cstat – системные показатели • ^mgstat – сочетает параметры ^GLOSTAT и cstat • Взаимодействие междуОС, диском, сетью, памятью, файловой системой • Статистика ECP • csv формат
^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