Увеличение производительности приложений на

advertisement
Производительность 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»
Download