[ 2018-06-13 ]

El evento de espera: "Buffer Exterminate"

Dias atrás, analizando un problema de performance en una sentencia SQL, me encontré con un evento de espera a tope de un reporte ASH el cual no es muy común ver:  "buffer exterminate".
Profundizando un poco más sobre la causa de este evento, su origen y su impacto, pude allanar bastante el camino hacia la resolución del caso.
El reporte mostraba los siguientes indicadores:

"Buffer Exterminate" es un evento de espera que  ocurre cuando en una base de datos configurada en modo "Automatic Memory Management" (AMM),  el tamaño de un componente de la SGA cambia dinámicamente, como por ejemplo el “data buffer cache”, en  este caso el proceso MMON realiza un shrink del “data buffer cache” o  re-asigna RAM a otra región de la SGA. 
La espera "buffer exterminate" ocurre si parte del buffer cache se reduce de forma dinámica y una sesión requiere acceder a un bloque de datos dentro del mismo, ubicado en alguno de los gránulos elegidos para liberarse. La sesión entonces queda en espera hasta resolverse el evento.
Una vez liberado el buffer (l“buffer cache hash chain”, “LRU chain”, etc), las sesiones que se encuentran en “espera” pueden sin problema volver a subir ese bloque a memoria, en alguno de los gránulos restantes en el data buffer cache, y eventualmente cualquier otro proceso podrá encontrar  la nueva dirección del búfer para ese bloque utilizando el hash para su búsqueda.

Existen varias vistas que podemos utilizar para verificar si se han realizado operaciones de redimensionamiento de componentes de la  SGA:

V$SGA_DYNAMIC_COMPONENTS: muestra información sobre los componentes SGA dinámicos. Esta vista resume la información basada en todas las operaciones de cambio de tamaño SGA completadas desde el inicio de la instancia.

V$SGA_CURRENT_RESIZE_OPS: muestra información sobre las operaciones de cambio de tamaño SGA que están actualmente en progreso. Una operación puede ser un crecimiento o una reducción de un componente SGA dinámico.

V$SGA_DYNAMIC_FREE_MEMORY: muestra información sobre la cantidad de memoria SGA disponible para futuras operaciones dinámicas de cambio de tamaño SGA

En este ejemplo, podemos ver como que el día 10/6 en el cual se detectó la baja performance y se realizó el análisis, ocurrió un GROW de la “shared pool” y SHRINK del “DEAFULT buffer cache” en el mismo horario y coincidente con la ocurrencia del evento de espera  "Buffer Exterminate".

SQL> select component, current_size, min_size, max_size, oper_count, last_oper_type, last_oper_time
     from v$sga_dynamic_components;

COMPONENT                      CURRENT_SIZE   MIN_SIZE   MAX_SIZE OPER_COUNT LAST_OPER_TYPE LAST_OPER_TIME
------------------------------ ------------ ---------- ---------- ---------- -------------- --------------
shared pool                      3489660928 1308622848 3724541952         79 GROW           10/6/2018 15:0
large pool                        234881024  234881024  436207616          1 SHRINK         29/1/2018 05:2
java pool                          33554432   33554432  201326592          5 SHRINK         20/2/2018 22:1
streams pool                       33554432          0   67108864          5 SHRINK         18/4/2018 22:0    
DEFAULT buffer cache             4563402752 4294967296 6375342080         89 SHRINK         10/6/2018 15:0    
KEEP buffer cache                         0          0          0          0 STATIC                                          
RECYCLE buffer cache                      0          0          0          0 STATIC                                          
DEFAULT 2K buffer cache                   0          0          0          0 STATIC                                          
DEFAULT 4K buffer cache                   0          0          0          0 STATIC                                          
DEFAULT 8K buffer cache                   0          0          0          0 STATIC                                           
DEFAULT 16K buffer cache                  0          0          0          0 STATIC                                          
DEFAULT 32K buffer cache                  0          0          0          0 STATIC                                          
Shared IO Pool                            0          0          0          0 STATIC                                          
ASM Buffer Cache                          0          0          0          0 STATIC                                          


14 rows selected

Espero les resulte de utilidad.

No hay comentarios:

Publicar un comentario