Ожидание buffer busy waits в некластерном окружении

Что по сути представляет из себя сиЕ ожиданиЕ справедливо отмечено в документации: Wait until a buffer becomes available — лучше не скажешь!

Практически все возможные причины хорошо отражает диаграмма ожиданий, удачно подсмотренная на живой продакшн системе версии 11.1.0.7 (с патчАми):

SQL> @ash_wait_tree "event = 'buffer busy waits'"

LVL INST_ID BLOCKING_TREE     EVENT                    WAITS_COUNT SESS_COUNT AVG_WA
--- ------- ----------------- ------------------------ ----------- ---------- ------
  1       1 FOREGROUND        buffer busy waits                217         69    848 -- ожидающие сессии, ниже - дерево блокирующих сессий по след.причинам:
  2       1   FOREGROUND      buffer exterminate               224         11     11 --   агрессивный ASMM в версии 11.1, основная причина buffer busy waits
  2       1   FOREGROUND      db file sequential read           15          5     17 --   буфер уже читается в кэш другой сессией
  2       1   FOREGROUND      On CPU / runqueue                  6          5      0 --   буфер в н.м. меняется в кэше другой сессией, т.е. находится в incompatible mode
  2       1   FOREGROUND      buffer busy waits                  3          1    874 --   циклическое ожидание
  3       1     FOREGROUND    buffer exterminate                 6          1     11

Кроме наглядной иллюстрации списка причин, вызывающих ожидание, обращает внимание основное блокирующее ожидание buffer exterminate, заметное при активном динамическом изменении размеров компонентов SGA: в основном, DB CACHE BUFFER, Shared Pool Size, что, в свою очередь, является следствие недостаточно отрегулированного в 11.1 механизма Oracle Automatic Shared Memory Management (ASMM) и хорошо отражается в отчёте AWR за проблемный период:

Top 5 Timed Foreground Events
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                           Avg
                                                          wait   % DB
Event                                 Waits     Time(s)   (ms)   time  Wait Class
------------------------------ ------------ ----------- ------ ------ -----------
db file sequential read           4,612,773      76,410     17   66.5 User I/O
DB CPU                                           15,692          13.7
read by other session               482,743       7,804     16    6.8 User I/O
buffer exterminate                  264,420       2,912     11    2.5 Other       -- ожидание как индикатор проблемы
buffer busy waits                   295,335       2,567      9    2.2 Concurrency  -- сходное по профилю зависимое ожидание
...
SGA breakdown difference
-> ordered by Pool, Name
-> N/A value for Begin MB or End MB indicates the size of that Pool/Name was
   insignificant, or zero in that snapshot

Pool   Name                                 Begin MB         End MB  % Diff
------ ------------------------------ -------------- -------------- -------
java   free memory                             256.0          256.0    0.00
large  free memory                             254.1          254.1    0.00
shared CCursor                                 279.2          298.5    6.90
shared KGH: NO ACCESS                        4,857.3        5,113.1    5.27 -- наличие значительных проблемных/неиспользуемых областей shared pool
shared KGL handle                              130.4          137.4    5.32
shared PCursor                                 241.2          251.1    4.11
shared free memory                           4,365.8        4,323.5   -0.97 -- , активно/многократно меняющихся в течение snapshot-а
shared sql area                              1,487.0        1,498.1    0.75
       buffer_cache                         20,480.0       20,480.0    0.00
       fixed_sga                                 2.1            2.1    0.00
       log_buffer                              381.9          381.9    0.00
          -------------------------------------------------------------

или напрямую из статистики SGA / топа компонентов shared pool (+ частота/список операций V$SGA_RESIZE_OPS):

SQL> select * from (
  2  select name, round(bytes/1024/1024) as MB
  3  from v$sgastat
  4  where pool = 'shared pool'
  5  order by BYTES desc
  6  ) where rownum <= 6
  7  /

NAME                               MB
-------------------------- ----------
free memory                      4599 -- *
KGH: NO ACCESS                   4090 -- *
sql area                         1547
CCursor                           287
PCursor                           210
KGL handle                        129
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s