Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тихо что-то. "Хозяйке на заметку" - работа БД с профилем нагрузки "преимущественно запись" / 3 сообщений из 3, страница 1 из 1
13.08.2015, 14:34
    #39028699
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тихо что-то. "Хозяйке на заметку" - работа БД с профилем нагрузки "преимущественно запись"
Вроде банальность, но вот всплыло, решил поделиться.

Есть у нас база со странным профилем нагрузки "преимущественно запись". Некоторое приложение пишет в N потоков в базу (фактически - лог).

Понятно, что самым узким местом в такой БД будет журналирование.
По крайней мере за CPU следить легко, dirty pages из буферпулов чистятся быстро, а вот запись в журналы транзакций (да ещё при условии, что разработчики "пока не научились" писать по нескольку событий за транзакцию) будет сериализовать всю нагрузку и будет являться bottleneck'ом.

Возник вопрос - достаточно ли ресурсов и какой запас по производительности.
Для быстрого взгляда "что там вообще с некоторой незнакомой БД" вполне хороша (с 9.7) процедура:
Код: sql
1.
call monreport.dbsummary();


На исследуемой БД в числе прочего честно сказала, что 80-90% Wait time - LOG_DISK_WAIT_TIME.
Из кэша запросов было видно, что всё это время приходится на коммиты (коммит в кэш естественным образом не попадает).

Общее время LOG_DISK_WAIT_TIME за минуту наблюдений - в конкретном примере - 60-65 секунд. Много это или мало? Да бог его знает (неизвестно, сколько коммитов работали в какой-то момент конкурентно, т.е. суммировалось ли время по всем ожидающим в параллель коннектам).

Та же история с CLIENT_IDLE_WAIT_TIME. За счёт наличия простаивающих коннектов (создан пул с большим запасом) параметр абсолютно неинформативен.

Решение - зайти с другой стороны. Смотреть изменение log_write_time_s в SYSIBMADM.SNAPDB за интервал времени (ту же минуту).
Код: sql
1.
2.
3.
4.
5.
6.
SELECT 
  log_write_time_s, log_write_time_ns, log_writes, num_log_write_io
 ,log_read_time_s,  log_read_time_ns,  log_reads,  num_log_read_io
 ,num_log_buffer_full
 ,s.*
FROM SYSIBMADM.SNAPDB s;


Когда общее время записи в журнал велико, значит уже приплыли/находимся на грани. По факту при 40 секундах записи в журналы в минуту - уже упёрлись по производительности ввода-вывода.
...
Рейтинг: 0 / 0
13.08.2015, 15:41
    #39028793
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тихо что-то. "Хозяйке на заметку" - работа БД с профилем нагрузки "преимущественно запись"
CawaSPb,

Начиная с 9.7 можно анализировать "куда уходит время" для разных сущностей с помощью функций: MON_FORMAT_XML_*_TIMES_BY_ROW
Hierarchy of time-spent monitor elements
Они выдают информацию в виде:
родительская_мерика, дочерняя_метрика, счетчики
но, немонго подшаманив, можно получать информацию в более наглядном виде запросом:
Пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 LVL COUNT TOTAL_TIME_VALUE TOTAL_TIME_VALUE_PST METRIC_NAME                 
 --- ----- ---------------- -------------------- ----------------------------------- 
   0  NULL        166833690                  100 CLIENT_IDLE_WAIT_TIME               
   0   107             5991                  100 TOTAL_RQST_TIME                     
   1     4              109                    1   TOTAL_COMMIT_PROC_TIME            
   1    29             1182                   19   TOTAL_COMPILE_PROC_TIME           
   1     0                0                    0   TOTAL_IMPLICIT_COMPILE_PROC_TIME  
   1     0                0                    0   TOTAL_LOAD_PROC_TIME              
   1     0                0                    0   TOTAL_REORG_PROC_TIME             
   1     0                0                    0   TOTAL_ROLLBACK_PROC_TIME          
   1   824             1534                   25   TOTAL_ROUTINE_USER_CODE_PROC_TIME 
   1     0                0                    0   TOTAL_RUNSTATS_PROC_TIME          
   1    36             1548                   25   TOTAL_SECTION_PROC_TIME           
   2    10                6                    0     TOTAL_SECTION_SORT_PROC_TIME    
   1  NULL             1349                   22   TOTAL_WAIT_TIME                   
   2     0                0                    0     AGENT_WAIT_TIME                 
   2     0                0                    0     AUDIT_FILE_WRITE_WAIT_TIME      
   2     0                0                    0     AUDIT_SUBSYSTEM_WAIT_TIME       
   2     0                0                    0     DIAGLOG_WRITE_WAIT_TIME         
   2    46              328                   24     DIRECT_READ_TIME                
   2     3               90                    6     DIRECT_WRITE_TIME               
   2     0                0                    0     FCM_RECV_WAIT_TIME              
   3     0                0                 NULL       FCM_MESSAGE_RECV_WAIT_TIME    
   3     0                0                 NULL       FCM_TQ_RECV_WAIT_TIME         
   2     0                0                    0     FCM_SEND_WAIT_TIME              
   3     0                0                 NULL       FCM_MESSAGE_SEND_WAIT_TIME    
   3     0                0                 NULL       FCM_TQ_SEND_WAIT_TIME         
   2     0                0                    0     IDA_RECV_WAIT_TIME              
   2     0                0                    0     IDA_SEND_WAIT_TIME              
   2     0                0                    0     IPC_RECV_WAIT_TIME              
   2     0                0                    0     IPC_SEND_WAIT_TIME              
   2     0                0                    0     LOCK_WAIT_TIME                  
   2     0                0                    0     LOG_BUFFER_WAIT_TIME            
   2    16               13                    0     LOG_DISK_WAIT_TIME              
   2    83              764                   56     POOL_READ_TIME                  
   2   105              135                   10     POOL_WRITE_TIME                 
   2    70                0                    0     TCPIP_RECV_WAIT_TIME            
   2    70               15                    1     TCPIP_SEND_WAIT_TIME            
   2     0                0                    0     WLM_QUEUE_TIME_TOTAL            
TOTAL_TIME_VALUE_PST здесь - процент времени от родительской метрики.

Такие деревья можно получать по таким объектам (там у всех есть xml поле details):
Код: sql
1.
2.
3.
select routinename
from syscat.routines
where routineschema='SYSPROC' and routinename like 'MON\_GET\_%\_DETAILS' escape '\'


На 9.7 это:

MON_GET_ACTIVITY_DETAILS
MON_GET_CONNECTION_DETAILS
MON_GET_PKG_CACHE_STMT_DETAILS
--MON_GET_DATABASE_DETAILS (начиная с 10.5)
--MON_GET_ROUTINE_DETAILS (начиная с 10.1)
MON_GET_SERVICE_SUBCLASS_DETAILS
MON_GET_UNIT_OF_WORK_DETAILS
MON_GET_WORKLOAD_DETAILS
...
Рейтинг: 0 / 0
13.08.2015, 18:57
    #39029005
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тихо что-то. "Хозяйке на заметку" - работа БД с профилем нагрузки "преимущественно запись"
Mark Barinstein,

Штуки полезные, спасибо!
Но для данного случая не особо помошники. Там, вроде, везде идёт накопительным образом log_disk _wait_ time, который интересен в разрезе конкретного коннекта/сервис класса/... ("сколько мы ждём"), но в своей составляющей фактически имеет "неизвестный множитель" - log_write_time*" среднее число параллельно исполняющихся коммитов ".

В то же время именно запись в лог строго серализуется и log_write_time (доступный в SNAPDB) в отличии от многих других параметров не может быть больше фактического времени наблюдения (для однонодовых конфигураций).


PS Спасибо за рекомендации. "Всё получилось"!
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Тихо что-то. "Хозяйке на заметку" - работа БД с профилем нагрузки "преимущественно запись" / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]