Производительность Caché Оптимизация и мониторинг Дмитрий Носов «Школа Инноваций InterSystems 2007» Производительность Аппаратное обеспечение Операционная система Caché Приложение Аппаратное обеспечение • Чем быстрее, тем лучше – Память – Процессоры – Ввод/вывод • 64-х разрядные платформы – Позволяют адресовать буферный пул > 2Гб – НО ! Вычисления могут работать даже медленней, чем на 32-х разрядных платформах Производительность Аппаратное обеспечение Операционная система Caché Приложение Операционная система • Виртуальная память – Фиксированный размер – Разные диски • Фоновые и активные задачи – Режим «Background Services» для Windows • Монитор производительности – Task Manager – perfmon.exe – Продукты третьих фирм (BMC Patrol, WMI) • Файловая система: производительность, надежность, размер файла – Для Windows – NTFS – Для Unix – выбор за Вами Производительность Аппаратное обеспечение Операционная система Caché Приложение Caché • Дисковая система • Память • Мониторинг • Дополнительно Caché - дисковая подсистема • Разбиение по контроллерам и дискам. – – – – Баз данных WIJ файл Журнал База данных CACHETEMP • Заранее установленный размер CACHE.DAT Caché – шифрование БД Шифрование базы данных ((# of blocks read) * (8192 bytes / block) * (30 CPU clock ticks / byte)) clock ticks / second) / (# of CPU На машине с 1 Ггц процессором задержка в чтении 1 блока составит 0.24 милисекунды Caché- память • OS ~ ??? Мб • Ядро Caché ~ 16 Мб • ??? Мб на процесс * количество процессов = ??? – от 2Мб до 48 Mб на процесс • Буфер программ – 32Кб/программу, max=64Кб – ^GLOSTAT - Routine Buffer Transfers • «Куча» (Heap) – системные таблицы Caché • Буфер для 8-ми и 2-х Кб баз данных Caché - память • Буфер глобалов и виртуальная память 1 2 Optimal 3 Caché - память • Буфер глобалов выделяется автоматически, но можно и вручную Caché - мониторинг • Портал управления Caché + Task Manager + perfmon.exe • ^GLOSTAT • ^PERFMON • ^%SYS.MONLBL • ^mgstat • $SYSTEM.Monitor object - пользовательские параметры • CSTAT.exe Caché - мониторинг • Caché с версии 5.1 имеет Caché System Monitor – Сервис для сбора статистики – Генерация предупреждений – Оповещение по Email • Оповещение о системных ошибках – ~ 50 вариантов ошибочных ситуаций, например: ошибки записи в БД, ошибки журнала и т.п. • Позволяет создавать пользовательские классы для мониторинга ^GLOSTAT • Сбор статистики или куммулятивных или посекундных метрик производительности: – # обращений к глобалам – # журнальных записей – эффективность использования кеша ^GLOSTAT Statistics Total ------------------------------------------Global references (all): 418,122 Global update references: 28,797 Routine calls: 27,600 Routine buffer loads and saves: 279 Routine lines: 44,481 Routine not cached: 408 Logical block requests: 128,029 Block reads: 650 Block writes: 128 WIJ writes: 58 Cache Efficiency: 537 Journal Entries: 9,036 Journal Block Writes: 16 ^PERFMON ^PERFMON • Сбор метрик по – – – – Процессам Глобалам Программам Сети ^PERFMON - пример Global Activity by Global Started: 06/24/2004 02:43:30PM Collected: 06/24/2004 02:45:22PM Name Directory TotRefs % Refs GloSet GloKill BlkAlloc JrnEntry PhyBlkRd PhyBlkWrt LogB -------------- ------------------- --------- --------- --------- --------- --------- --------- --------- --------- ---Other 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 SYS d:\cxxbeta\mgr\ 0.3 0.0 0.1 0.2 0.0 0.0 0.0 0.1 rOBJ ...ta\mgr\cachelib\ 7892.0 64.2 0.0 0.0 0.0 0.0 0.0 0.0 ME.BalanceD d:\lehman\ 876.9 7.1 0.0 0.0 0.0 0.0 0.0 0.0 TIB.QueueIN d:\lehman\ 1753.8 14.3 1753.8 0.0 10.0 0.0 0.0 10.0 1 SUPPORT.Mess...d:\lehman\ 876.9 7.1 0.0 0.0 0.0 0.0 0.0 0.0 TIMINGS d:\lehman\ 880.9 7.2 880.1 0.0 0.0 0.0 0.0 0.0 OBFillsD d:\lehman\ 2.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 OBChangesD d:\lehman\ 2.4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ^PERFMON - пример Routine Activity by Routine Started: 06/24/2004 02:43:30PM Collected: 06/24/2004 02:45:22PM Name Directory M Lines % Lines RtnLoads RtnFetch Line/Load -------------- ------------------- --------- --------- --------- --------- --------Other 0.0 0.0 0.0 0.0 0 PERFMON d:\cxxbeta\mgr\ 3.2 0.0 0.0 0.0 0 ME.Messages.1 d:\lehman\ 12285.3 20.0 2630.6 0.0 4.7 ME.Tools.1 d:\lehman\ 13153.5 21.4 876.9 0.0 15.0 SUPPORT.Tools.1d:\lehman\ 6144.7 10.0 876.9 0.0 7.0 ME.OrderReply.1d:\lehman\ 17537.5 28.6 6138.1 0.0 2.9 %ooLibrary.L......ta\mgr\cachelib\ 10522.5 17.1 3507.5 0.0 3.0 %ooLibrary.L......ta\mgr\cachelib\ 1753.8 2.9 1753.8 0.0 1.0 ^%SYS.MONLBL • Сбор статистики – по времени исполнения каждой строки кода – # обращений к глобалу – # чтений блоков данных ^%SYS.MONLBL Routine ^ME.Messages.1 ... Line RtnLine Time 340 10000 .514164 341 10000 .12743 342 9 .000319 343 9 .000227 344 9 .000207 345 9 .000096 346 8 .000131 347 8 .000195 348 8 .000499 349 8 .000094 350 0 0 351 0 0 352 8 .000068 353 9 .000251 354 9 .000086 355 10000 .094112 356 10000 .094363 357 10000 .106838 358 10000 .098118 359 10000 .10122 360 10000 .094529 set cnt = $i(^TIMINGS("OrderActionMessage","Records")) if cnt > 1000 { set ^TIMINGS("OrderActionMessage","Records") = 0 set SClock = $get(^TIMINGS("OrderActionMessage","LClock")) set EClock = $piece($ztimestamp,",",2) if SClock '= "" { set ClockDelta = EClock - SClock if ClockDelta > 0 { set ^TIMINGS("OrderActionMessage","Results",$i(^TIMINGS("OrderActio } else { set ^TIMINGS("OrderActionMessage","Results",$i(^TIMINGS("OrderAct } } set ^TIMINGS("OrderActionMessage","LClock") = EClock } ;; Measurements <<< ;; Measurements <<< set BuyFlag = "BUY" set SellFlag = "SELL" set AskFlag = "ASK" set BidFlag = "BID" ^mgstat • Можно посмотреть статистику в течении дня s f="c:\a\c.txt" o f:"NW" w !,"opend" u f d ^mgstat Caché - мониторинг • BMC Patrol – www.bmc.com – Обеспечивает сбор и мониторинг общекорпоративной статистики, в т.ч. и статистики Caché Caché - мониторинг • Simple Network Management Protocol – SNMP • Windows Management Instrumentation - WMI Caché - дополнительно • ^GCOMPACT • Журналирование выделенных глобалов (до версии 5.1) • Partial WIJ (до версии 5.1) • 8 Кб базы данных • Масштабирование системы – – – – Кластеры (Open VMS, Tru64Unix) Многопроцессорные системы ECP Shadow Server для аналитической обработки данных Производительность Аппаратное обеспечение Операционная система Caché Приложение Приложение • Блоки данных • Блокировки • Программы • Локалы или глобалы? • Синтаксис COS • Objects • SQL Блоки данных • Распределение данных по глобалам – не хранить обычные и агрегированные данные в одной глобали • Расщепление блоков (Block Split) – 8k и 2k блоки – $SortBegin & $SortEnd • CACHETEMP – In-Memory Database – Временные данные – Нет журналирования • Пакетные задания, вымывание буфера – $ZU(68,25,…) • Приоритет процессов – %PRIO Блокировки • «Горячие» блокировки • $Increment • %OpenId(id,Concurency) • Shared & Exclusive lock • Immediate unlock Программы • Внутренний вызов намного быстрее внешнего • В Caché 2007.1 полностью переработан механизм обработки стека программ и повышена производительность обработки стека программ – Наиболее часто используемые ищутся быстрей – Изменено управление буфером программ – Изменено управление стеком программ (возврат по стеку возвращает управление старому коду, если он менялся) Переменные • Локальные или глобальные ? • Если много, то – ^CacheTempXXX($j,…) – ^mtempXXX($j,…) • Process Private Globals - ^||globals – – – – Глобалы, видные только процессам, их породившим Удаляются вместе с процессом Производительность глобалов, смепированных в CACHTEMP Размер неограничен в отличии от локальных переменных Новый синтаксис • $Increment • $ListBuild vs $Piece • $Case • ||, && • $Order • Минимизация количества строк • $ListNext – $ListNext(list, ptr, val) быстрее в 400 раз, чем цикл с $List Caché Objects • Новое в 5.2 - Version Checking – Позволяет определить свойство, которое будет хранить версию объекта через параметр класса VERSIONPROPERTY – Полезно для оптимистической конкуренции многопользовательского доступа к объектам Caché SQL • Индексы, BitMap – SSN FROM MyTable WHERE Name LIKE :Param1 AND Age>:Param2 • Индексы по Name & Age увеличат скорость выбора, но уменьшат скорость транзакций • Bitslicing Index – SELECT SUM(f) FROM t • использует bitslice index по t.f в 5.1 • В 2007.1 к этому добавятся дополнительные запросы. Caché SQL Selectivity, ExtentSize - $system.SQL.TuneTable() • Selectivity = % строк или количество, которые удовлетворяют заданному значению. • Selectivity поля Gender (род) будет = 50% • Selectivity для уникального значения = 1 • В таблице из 100 записей SSN будет = 1% • Extent Size = ориентировочное количество строк в таблице – INNER JOIN для двух таблиц ищет таблицу с минимальным количеством строк. • Два варианта настроить Selectivity & ExtentSize 1) Портал управления 2) Do $system.SQL.TuneTable("Index.Person",1,1) – Значения, возвращаемые TuneTable могут быть перезаписаны приложением Caché SQL - TuneTable USER>d $system.SQL.TuneTable("Index.Person",1,1) TABLE: Index.Person Current Extentsize = 100000 Calculated Extentsize = 20 Updated FIELD: Boss Current Selectivity = <Not Specified> Calculated Selectivity = 50.0000% Table definition updated. Class definition updated. FIELD: City Current Selectivity = <Not Specified> Calculated Selectivity = 9.0909% Table definition updated. Class definition updated. Caché SQL • %FULL, %INORDER (5.0) • %inorder указывает оптимизаторупуть выполнения операции JOIN в необходимом порядке. • %full дает задачу оптимизатору проверить все возможные альтернативы путей выполнения запросов. • Рекомендуется для Embedded SQL и Class’ SQL Queries, где время компиляции не столь критично Caché SQL • %NOCHECK, %NOLOCK, %NOINDEX, %NOTRIGGER – Рекомендуется применять в случаях массовой загрузки данных в однопользовательском режиме в случае гарантированной целостности создаваемых данных Caché SQL • Просмотр кода кэшируемых запросов - Query Analysis Tool – Позволяет посмотреть план выполнения SQL запроса Caché SQL • Хранимые процедуры + прямой доступ – Используя прямой доступ в хранимых процедурах можно в несколько раз повысить производительность получения данных Спасибо за внимание! Вопросы? Дмитрий Носов «Школа Инноваций InterSystems 2007»