1 / 41

Решение задачи повышения производительности приложений на базе Caché и Ensemble

Решение задачи повышения производительности приложений на базе Caché и Ensemble. Сергей Кудинов. План. Что влияет на производительность. Увеличение производительности в приложении. Мониторинг производительности. План. Что влияет на производительность.

darius
Download Presentation

Решение задачи повышения производительности приложений на базе Caché и Ensemble

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Решение задачи повышения производительности приложений на базе Caché и Ensemble Сергей Кудинов

  2. План Что влияет на производительность Увеличение производительности в приложении Мониторинг производительности

  3. План Что влияет на производительность Увеличение производительности в приложении Мониторинг производительности

  4. Что влияет на производительность • Компоненты Cache’ • Взаимодействие междуОС, диском, сетью, памятью, файловой системой • Дисковая система • Файловая система • Эффективное выделение буферов • Процессоры • Код приложения

  5. Компоненты Cache’ • Как выполняется запись в БД • Достаточно ли быстро выполняется запись – если нет почему? • Unix или VMS? Новый параметр ‘wdstrategy’ • Роль журналирования • Не стоит журналировать все БД • Роль журналирования в ECP • Управление буфером • Как использовать флаг ‘batch’ • Сеть • Задержка и производительность сети

  6. Дисковая система • Вы уже слышали, что это важно… • Это все еще очень важно, потому что… • Что означают различные уровни RAID массива • RAID 10/5 хорошо или плохо? • LUN и диск • Использование OS striping в RAID массивах

  7. Файловая система • Какие есть опции монтирования в Cache’ • Что поддерживается и рекомендуется ? • LVM и дополнительные логические разделы на диске • Striping (распределение по дискам) • Зеркалирование • Управление размером блока

  8. 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

  9. Эффективное выделение буферов • Могут ли слишком большие буферы быть проблемой? • Иногда да…зависит от многих причин • Слишком маленькие буферы – всегда проблема…но что это значит? • Задержки при чтении и записи • Опция блокировки в памяти? • Что это значит и стоит ли ею пользоваться? • Поддержка больших страниц?

  10. Процессоры • Почему слишком большое количество процессоров может быть проблемой • Гоночный автомобиль с шинами от велосипеда • Слишком много процессов создают нагрузку на дисковую систем, которая не успевает их обработать

  11. План Что влияет на производительность Увеличение производительности в приложении Мониторинг производительности

  12. $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 раза быстрее!

  13. $SORTBEGIN/$SORTEND $SORTBEGIN переводит в специальный режим сортировки для указанного глобала, при которомданные сначала пишутся во временный буфер. Set x=$sortbegin(^PatientI) Do ##class(Patient).InsertData() Set x=$sortend(^PatientI,1) $SORTEND завершает решим специальной сортировки. Данные копируются из временного буфера в глобал. Копирование не происходит, если значение аргумента - 0.

  14. Функции работы со списками При большом количестве данных функции работы со списками НАМНОГО быстрее $PIECE. Не возникает проблем с разделителями. Используйте их. ZZDUMP $LISTBUILD("ABC",12,3.4) 0000: 05 01 41 42 43 03 04 0C 04 06 FF 22

  15. Функции работы с коллекциями Использование метода 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’=“”

  16. Использование PrimaryKey Уменьшает # of GlobalReference. Добавьте PrimaryKey в описаниеуникального индекса. В БДс 1,000,000 записейвремя для поиска и открытия 50,000 случайных записей 3.79 секунды без использования PrimaryKey, с использованием 1.28 секунды. Может быть необязательным при использовании IndexOpen методов.

  17. МетодыIndexNameOpen() МетодIndexNameOpen() генерируются для каждого Unique и IDKEY индекса класса. Index StoryIDIndex on StoryID [ Unique ] Для открытия объекта StoryID=1003 Set story=##class(User.Story).StoryIndexOpen(1003)

  18. Методы 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}

  19. Динамические SQL запросы • Старый класс – %Library.ResultSet. • Новый класс – %ResultSet.SQL • %ResultSet.SQL значительно быстрее%Library.ResultSet, сравнимо со встроенным SQL. • %ResultSet.SQL постоянно совершенствуется.

  20. Private Global Что это? Глобальная переменная, которая доступна только процессу создавшему ее. Видна изо всех областей. Удаляется при завершении процесса. Преимущества: Не нужно очищать. Особенно при возникновении ошибок. Не нужен узел $Job. Некоторое преимущество по производительности. Недостаток: Сложнее отлаживать.

  21. Блокировки >LOCK +^data(id)#"s" Несколько процессов могут выполнить разделяемую блокировку. Разделяемая блокировка не дает выполнить эксклюзивную блокировку. Разделяемые эксклюзивные блокировки считаются независимо друг от друга LOCK +var1:0 Результат попытки в $Test

  22. Операции со строками $ZSTRIP Удаляет типы символов/отдельные символы из строки $ZCONVERT (string,mode,trantable,handle) mode = (U,L,T,W,S, I,O) translation table = (Raw, Same, HTML, JS, URL, UTF8, XML) Handle – переменная в которую попадает не преобразованное значение

  23. План Что влияет на производительность Увеличение производительности в приложении Мониторинг производительности

  24. Где узкое место? • Вы знаете, где «узкое» место? • Вы действительно знаете, где «узкое» место? • Какими утилитами пользоваться?

  25. Какие метрики? • Какими утилитами пользоваться?

  26. Встроенные утилиты • ^GLOSTAT, SMP (только интерактивные) • ^Buttons,^pButtons • cstat, планы запросов • ^PERFMON, ^%SYS.MONLBL, ^PROFILE • ^mgstat, ^mpmon • %MONITOR, %SYS.STATS • другие

  27. ^Buttons

  28. ^Buttons Содержит Информацию cconsole.log Системные показатели Простой способ для получения статистики Не содержит приватной информации В 2009.1 ^Buttons создает CACHE.DAT Уменьшенразмер HTML отчета

  29. GLOSTAT / cstat -> mgstat • ^GLOSTAT – показывает параметры работы с глобалами всей системы в целом • cstat – системные показатели • ^mgstat – сочетает параметры ^GLOSTAT и cstat • Взаимодействие междуОС, диском, сетью, памятью, файловой системой • Статистика ECP • csv формат

  30. ^mgstat и Excel

  31. ^PERFMON -> ^mpmon • ^PERFMON • Статистика работы с глобалами и программами по процессам • Набор предопределенных показателей • ^mpmon • Утилита WRC performance team собирающая набор показателей • Вывод в csv

  32. %SYS.MONLBL • Выберите программу(ы) для мониторинга • Отчет в виде времени выполнения INT кода

  33. ^PROFILE • Новая утилита в 2009.1 • Сочетание ^PERFMON & ^%SYS.MONLBL • Интерактивная

  34. %SYS.PTools.SQLStats • Специально для анализа SQL, появилась начиная с 2008.1 • DO SetSQLStats^%apiSQL(flag) • Опция времени компиляции • Необходимо удалить кэшированные запросы и перекомпилировать при включенной статистике • Статистика удаляется при компиляции • Статистика собирается на уровне запросов и модулей • Измеряются параметры выполнения кода, обращений к глобалам, времени выполнения…

  35. SQL оптимизатор • Цель – минимизировать операции I/O, загрузка процессора вторична • TuneTable собирает статистику по данным таблиц, которая используется оптимизатором для порядка обработки условий запроса • Используйте TOP и ORDER BY для скорейшего получения первых записей результата • Используйте %INORDER и %IGNOREINDICES • План запроса позволяет определить логику обработки запроса, недостающие индексы…

  36. Сторонние утилиты • BMC Patrol • SNMP • WMI

  37. Patrol • BMCSoftware’s Performance Manager • Нет необходимости использовать BMC • Сбор параметров в текстовом файле “patrol.dat” в mgr каталоге • Значения могут быть ‘итоговые’, ‘разница’ or ‘% отношение’ • Можно выделить максимально нагруженные процессы.

  38. SNMP & WMI • Простые в настройке инструменты сбора показателей • Требуется включение %Service_Monitor • Существующие показатели • Использование буферов • Блокировки БД • Размер БД • Загрузка WD • ECP • Использование лицензий • …

  39. Утилиты 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-файлы)

  40. WRC • Performance – один из типов WRC-проблем • Существует InterSystems WRC Performance Team • Обращайтесь!!!

  41. Спасибо за внимание! Вопросы? Сергей Кудинов (sergey.kudinov@intersystems.com) +7 (495) 967-0088

More Related