Artículo publicado en Oracle Technology Network (OTN) en español - febrero de 2018
Introducción
Desde su aparición en Oracle Database 10g, Automatic Workload Repository (AWR) ha ido evolucionando constantemente con el correr de las versiones.
Oracle 12c introdujo un gran cambio en la arquitectura de la base de datos incorporando el concepto de “multitenant”. En el primer release de 12c, los reportes de AWR solamente pueden ser generados a nivel “Container Database” (CDB). Esto nos impide, en cierta manera, poder analizar en profundidad el comportamiento de determinadas PDBs puntuales.
La versión 12.2 introduce una notable mejora en AWR, la capacidad de poder correr snapshots tanto a nivel CDB como de PDB cuando trabajamos en ambientes “multitenant”.
La versión 12.2 introduce una notable mejora en AWR, la capacidad de poder correr snapshots tanto a nivel CDB como de PDB cuando trabajamos en ambientes “multitenant”.
Esta nueva característica nos permite un diagnóstico más granular de problemas de performance focalizados en una PDB en particular, situación que resulta sumamente interesante y útil en soluciones DBaaS donde se espera que el rol de DBA tienda a ser el de un “pDBA” ( Pluggable Database Administrator), es decir un DBA responsable de la administración de una o varias PDBs en particular, pero que a nivel físico comparten recursos con otras en el mismo CDB.
Los reportes AWR a nivel PDB, están basados en la recolección de estadísticas que resultan útiles para evaluar el desempeño de una “Pluggable Database”, estos datos son recopilados siempre y cuando dicha PDB esté abierta en la base de datos “Container” (CDB) al momento de la toma del snapshot.
La información de AWR a nivel CDB es almacenada en el tablespace SYSAUX del CDB$ROOT y los snapshots de cada PDB en su correspondiente tablespace SYSAUX.
Podríamos decir entonces, que a partir de ahora tenemos en “multitenant” dos niveles de visualización e información en los reportes de AWR, uno a nivel general de “Container” y otro particular para cada PDB.
Los snapshots a nivel CDB incluyen estadísticas correspondientes al CDB, adicionando además información de todas las PDBs que éste contiene, por ejemplo: “ASH”, “SQL statistics”, “file statistics”, etc.
Los snapshots a nivel CDB incluyen estadísticas correspondientes al CDB, adicionando además información de todas las PDBs que éste contiene, por ejemplo: “ASH”, “SQL statistics”, “file statistics”, etc.
A nivel PDB, los snapshots de AWR recopilan estadísticas de la “Pluggable Database” y suman también algunas estadísticas globales que pueden resultar útiles para el diagnóstico de problemas puntuales en esa base de datos. El administrador de la PDB puede realizar determinadas operaciones de gestión a ese nivel, por ejemplo configurar el periodo de retención, agendar y depurar snapshots, realizar capturas manuales, etc.
Algunas tareas de administración de snapshots a nivel CDB o PDB, como por ejemplo creación y depuración, pueden ser realizadas tanto de forma “manual” como “automática”.
En un ambiente “multitenant”, podemos entonces crear manualmente snapshots en cualquiera de los dos niveles según sea necesario.
En un ambiente “multitenant”, podemos entonces crear manualmente snapshots en cualquiera de los dos niveles según sea necesario.
En este artículo, vamos a ejemplificar operaciones de captura de snapshots y generación de reportes utilizando un “Container Database” llamado CDB12CR2 el cual contiene dentro una PDB con nombre PDB12CR2.
La siguiente salida muestra la estructura de la misma con sus correspondientes IDs:
SQL> select name, con_id, dbid, con_uid, guid from v$containers
order by con_id;
NAME CON_ID DBID CON_UID GUID
-------- ---------- ---------- ---------- --------------------------------
CDB$ROOT 1 2233049298 1 4700A987085A3DFAE05387E5E50A8C7B
PDB$SEED 2 806654536 806654536 4B07A0A8F95D27C7E053B800A8C0A206
PDB12CR2 3 2086124034 2086124034 4B07B077947A2E0AE053B800A8C0F1F0
Por defecto, los snapshots automáticos de AWR sólo están configurados para correr a nivel CDB. Oracle recomienda que en los PDBs sean ejecutados de forma manual, y sólo en los intervalos de tiempo donde sea necesario realizar el análisis (ver nota Doc ID 2295998.1 de MOS).
No obstante esto, es posible automatizar “captura” en las PBDs configurando el parámetro AWR_PDB_AUTOFLUSH_ENABLED en TRUE (por defecto se encuentra deshabilitado).
No obstante esto, es posible automatizar “captura” en las PBDs configurando el parámetro AWR_PDB_AUTOFLUSH_ENABLED en TRUE (por defecto se encuentra deshabilitado).
Generación de snapshots
Veamos entonces como realizar la toma de snapshots AWR utilizando ambos métodos (automático y manual):
1-Método Automático:
1) Configuramos primero el parámetro awr_pdb_autoflush_enabled=true a nivel PDB:
Nos conectamos a la PDB:
SQL> alter session set container=PDB12CR2; Session altered.
Verificamos el valor del parámetro:
SQL> show parameter awr_pdb_autoflush_enabled NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ awr_pdb_autoflush_enabled boolean FALSE
Modificamos el valor:
SQL> alter system set awr_pdb_autoflush_enabled=true; System altered. SQL> show parameter awr_pdb_autoflush_enabled NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ awr_pdb_autoflush_enabled boolean TRUE
2) Configuramos correctamente el intervalo de los snapshots de AWR (Si bien esto es algo que no está muy difundido en notas técnicas, resulta un aspecto crítico):
SQL> select * from cdb_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID ---------- ----------------- ----------------- -------- ------ 2086124034 +40150 00:01:00.0 +00008 00:00:00.0 DEFAULT 3 SQL> execute dbms_workload_repository.modify_snapshot_settings(interval => 60); PL/SQL procedure successfully completed. SQL> select * from cdb_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID ---------- ----------------- ----------------- -------- ------ 2086124034 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT 3
3) Establecemos también AWR_SNAPSHOT_TIME_OFFSET en 1000000 para evitar problemas de performance cuando múltiples “Pluggable Databases” estén creando snapshots en simultáneo.
Podemos ver más información en la documentación: “Oracle Database 12c Release 2 Database Reference (1.26 AWR_SNAPSHOT_TIME_OFFSET)”
http://docs.oracle.com/database/122/REFRN/AWR_SNAPSHOT_TIME_OFFSET.htm#REFRN10325
http://docs.oracle.com/database/122/REFRN/AWR_SNAPSHOT_TIME_OFFSET.htm#REFRN10325
Debemos tener en cuenta que esta modificación hay que realizarla a nivel del CDB$ROOT.
SQL> alter session set container=CDB$ROOT; Session altered. SQL> alter system set AWR_SNAPSHOT_TIME_OFFSET=1000000; System altered.
No hay comentarios:
Publicar un comentario