410 likes | 648 Views
Производительность Cach é Оптимизация и мониторинг. Дмитрий Носов «Школа Инноваций InterSystems 2007». Производительность. Аппаратное обеспечение. Операционная система. Caché. Приложение. Аппаратное обеспечение. Чем быстрее, тем лучше Память Процессоры Ввод/вывод
E N D
Производительность 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))/(# of CPU clock ticks / second) На машине с 1 Ггц процессором задержка в чтении 1 блока составит 0.24 милисекунды
Caché- память • OS~ ??? Мб • Ядро Caché~ 16 Мб • ??? Мб на процесс * количество процессов = ??? • от 2Мб до 48Mб на процесс • Буфер программ – 32Кб/программу, max=64Кб • ^GLOSTAT - Routine Buffer Transfers • «Куча» (Heap) – системные таблицы Caché • Буфер для 8-ми и 2-х Кб баз данных
1 2 3 Optimal Caché- память • Буфер глобалов и виртуальная память
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 LogBlkRd -------------- ------------------- --------- --------- --------- --------- --------- --------- --------- --------- --------- Other 0.0 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 0.3 rOBJ ...ta\mgr\cachelib\ 7892.0 64.2 0.0 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 0.0 TIB.QueueIN d:\lehman\ 1753.8 14.3 1753.8 0.0 10.0 0.0 0.0 10.0 1793.8 SUPPORT.Mess...d:\lehman\ 876.9 7.1 0.0 0.0 0.0 0.0 0.0 0.0 886.3 TIMINGS d:\lehman\ 880.9 7.2 880.1 0.0 0.0 0.0 0.0 0.0 877.1 OBFillsD d:\lehman\ 2.4 0.0 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 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 set cnt = $i(^TIMINGS("OrderActionMessage","Records")) 341 10000 .12743 if cnt > 1000 { 342 9 .000319 set ^TIMINGS("OrderActionMessage","Records") = 0 343 9 .000227 set SClock = $get(^TIMINGS("OrderActionMessage","LClock")) 344 9 .000207 set EClock = $piece($ztimestamp,",",2) 345 9 .000096 if SClock '= "" { 346 8 .000131 set ClockDelta = EClock - SClock 347 8 .000195 if ClockDelta > 0 { 348 8 .000499 set ^TIMINGS("OrderActionMessage","Results",$i(^TIMINGS("OrderActionMessage","Results"))) = (jnk-1)/ClockDelta 349 8 .000094 } else { 350 0 0 set ^TIMINGS("OrderActionMessage","Results",$i(^TIMINGS("OrderActionMessage","Results"))) = "<No Time>" 351 0 0 } 352 8 .000068 } 353 9 .000251 set ^TIMINGS("OrderActionMessage","LClock") = EClock 354 9 .000086 } 355 10000 .094112 ;; Measurements <<< 356 10000 .094363 ;; Measurements <<< 357 10000 .106838 set BuyFlag = "BUY" 358 10000 .098118 set SellFlag = "SELL" 359 10000 .10122 set AskFlag = "ASK" 360 10000 .094529 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 • SELECTSUM(f) FROMt • использует bitsliceindex по 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»