Oracle Database 12.2: Reportes AWR a nivel PDB
Por Sebastián D’Alessandro
Publicado en Febrero 2018
Revisado por Lorenzo Mota
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”.
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.
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 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).
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
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.
4) Finalmente, al ya estar configurada la ejecución automática, debemos esperar 1-2 horas para que los “snaps” sean tomados. Luego, si podemos generar un reporte.
SQL> select SNAP_ID, DBID, STARTUP_TIME, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME, CON_ID from awr_pdb_snapshot; SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME, CON_ID ---------- ---------- ------------------------------ ------------------------------ ------------------------------ ---------- 1 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.35.35.929 PM 04-JAN-18 03.52.44.978 PM 3 2 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.52.44.978 PM 04-JAN-18 04.54.52.399 PM 3
2-Método Manual:
1) Nos conectamos a la PDB:
SQL> connect / as sysdba Connected. SQL> alter session set container= PDB12CR2; Session altered.
2) Ejecutamos el procedimiento para la creación manual del snapshot:
SQL> exec dbms_workload_repository.create_snapshot(); PL/SQL procedure successfully completed.
En la siguiente salida podemos ver el “snap” generado:
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME CON_ID ---------- ---------- ------------------------------ ------------------------------ ------------------------------ ---------- 1 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.35.35.929 PM 04-JAN-18 03.52.44.978 PM 3 2 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 03.52.44.978 PM 04-JAN-18 04.54.52.399 PM 3 3 2086124034 04-JAN-18 08.53.03.000 AM 04-JAN-18 04.54.52.399 PM 04-JAN-18 04.57.02.760 PM 3
Es importante tener en cuenta que los ID de snapshots generados a nivel PDB, pueden llegar a diferir de los generados en el CDB cuando la captura a nivel PDB es realizada de forma manual.
Podemos ver entonces los datos de AWR a nivel CDB en las vistas AWR_ROOT_xxx y a nivel PDB (“Pluggable Databases” abiertas en el momento de la captura del snapshot) en las vistas AWR_PDB_xxx;
Una PDB tiene la capacidad de poder transportar sus propios datos de AWR cuando se realiza una operación de “unplug/plug” desde un CDB a otro. Los “Container Databases” targets tiene la capacidad de diferenciar entre los datos antiguos de AWR (que son transportados junto con la PDB) y los nuevos datos AWR capturados después de la operación de “plug”.
Los “snaps” propios de una PDB tienen un ID único, el cual no está relacionado con los snapshots del CDB.
De esta manera las operaciones de “pluging” y “unpluging” de una PDB en un “Container Database” no afectan la información de AWR almacenada en la PDB.
Gestión de la seguridad
El administrador del CDB, si lo cree conveniente, puede llegar a utilizar “PDB lockdown profiles” para deshabilitar la funcionalidad de AWR en una o varias PDBs puntuales.
La manera de realizar esto, es ejecutando la siguiente sentencia en la PDB :
SQL> alter lockdown profile profile_name disable feature=('AWR_ACCESS');
Una vez deshabilitada la funcionalidad en una PDB, ya no se podrán realizar operaciones relacionadas con snapshots en ella.
Si se requiere habilitar nuevamente AWR a nivel PDB, se debe ejecutar la sentencia que mostramos a continuación:
SQL> alter lockdown profile profile_name enable feature=('AWR_ACCESS');
Generación de reportes AWR
Existen varias maneras de obtener un reporte de AWR, tanto a nivel CDB como PDB. La dos principales son utilizando “Cloud Control” y los scripts correspondientes provistos durante la instalación del motor.
En nuestro caso veremos ejemplos de cómo utilizar los scripts desde línea de comando.
Tal como mencionamos anteriormente, podemos generar reportes tanto a nivel CDB como PDB. El informe AWR obtenido en un PDB, no difiere mucho a un reporte que haya sido generado en la CDB original. Simplemente la información que contiene está acotada a esa base de datos en particular.
Veamos primero como se genera un reporte a nivel CDB (Similar a 12cR1).
Generación del reporte en el CDB:
Nos conectamos al root del CDB y ejecutamos el script “awrrpt”.
Principalmente debemos indicar:
- Tipo de reporte: (tenemos tres opciones):
- 'html': HTML format (default)
- 'text': Text format
- 'active-html': Includes Performance Hub active report
- Intervalo de “snaps” a utilizar
- Nombre del reporte
SQL> @?/rdbms/admin/awrrpt Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ AWR reports can be generated in the following formats. Please enter the name of the format at the prompt. Default value is 'html'. 'html' HTML format (default) 'text' Text format 'active-html' Includes Performance Hub active report Enter value for report_type: html old 1: select 'Type Specified: ',lower(nvl('&&report_type','html')) report_type from dual new 1: select 'Type Specified: ',lower(nvl('html','html')) report_type from dual Type Specified: html old 1: select '&&report_type' report_type_def from dual new 1: select 'html' report_type_def from dual old 1: select '&&view_loc' view_loc_def from dual new 1: select 'AWR_PDB' view_loc_def from dual Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance Container Name -------------- -------------- -------------- -------------- -------------- 2233049298 CDB12CR2 1 cdb12cr2 CDB$ROOT Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ * 2233049298 1 CDB12CR2 cdb12cr2 server01.loc Using 2233049298 for database Id Using 1 for instance number Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n)days of snapshots being listed. Pressingwithout specifying a number lists all completed snapshots. Enter value for num_days: Listing all Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- cdb12cr2 CDB12CR2 18 03 Jan 2018 10:13 1 19 03 Jan 2018 11:00 1 20 03 Jan 2018 11:54 1 21 03 Jan 2018 13:00 1 22 03 Jan 2018 14:00 1 23 03 Jan 2018 15:00 1 24 03 Jan 2018 16:00 1 25 03 Jan 2018 17:00 1 26 03 Jan 2018 18:00 1 27 03 Jan 2018 19:00 1 28 04 Jan 2018 09:04 1 29 04 Jan 2018 10:00 1 30 04 Jan 2018 11:00 1 31 04 Jan 2018 12:00 1 32 04 Jan 2018 13:00 1 33 04 Jan 2018 14:00 1 34 04 Jan 2018 15:00 1 35 05 Jan 2018 05:59 1 36 05 Jan 2018 08:11 1 37 05 Jan 2018 09:00 1 38 05 Jan 2018 10:00 1 39 05 Jan 2018 11:00 1 40 05 Jan 2018 12:00 1 41 05 Jan 2018 13:01 1 42 05 Jan 2018 14:00 1 43 05 Jan 2018 15:00 1 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 42 Begin Snapshot Id specified: 42 Enter value for end_snap: 43 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrrpt_1_42_43.html. To use this name, press to continue, otherwise enter an alternative. Enter value for report_name: cdb12cr2_42_43.html ####### ####### < parte de la salida suprimida > ####### Report written to cdb12cr2_42_43.html SQL>
Generación a nivel PDB:
En el reporte a nivel PDB, la cabecera del mismo identifica la PDB desde la cual se está emitiendo el reporte. Además como ocurre en los reportes tradicionales, se indica cuáles son los snapshots involucrados, los que en este caso corresponden a la “pluggable” y no al “root”.
Los snapshosts pueden ser mantenidos (creados y depurados) de la misma manera que ocurre con los snapshots del CDB.
Es importante aclarar, que la información relacionada con los snaps de AWR para la PDB se encuentra en la vista AWR_PDB_SNAPSHOT y no en la DBA_HIST_SNAPSHOT.
Para le generación del reporte, es necesario estar explícitamente conectado a la PDB en cuestión:
Procedimiento
Nos conectamos primero a la PDB:
SQL> alter session set container= PDB12CR2; Session altered.Verificamos:
SQL> show con_name NAME_COL_PLUS_PDB_CONTAINER ------------------------------------------------------------------------------ PDB12CR2
Luego ejecutamos el script de generación al igual que en el caso anterior:
Nuevamente indicamos los tres datos principales que nos son solicitados:
- Tipo de reporte:
- 'html': HTML format (default)
- 'text': Text format
- 'active-html': Includes Performance Hub active report
- Intervalo de snaps
- Nombre del reporte.
En la Figura 1 vemos de que forma nos es requerida esa especificación:
Specify the location of AWR Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ AWR_ROOT - Use AWR data from root (default) AWR_PDB - Use AWR data from PDB Enter value for awr_location: AWR_PDB
Figura 1. Indicar “location” de los datos de AWR en AWR_PDB
Ejecutamos el script awrrpt:
SQL> @?/rdbms/admin/awrrpt Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ AWR reports can be generated in the following formats. Please enter the name of the format at the prompt. Default value is 'html'. 'html' HTML format (default) 'text' Text format 'active-html' Includes Performance Hub active report Enter value for report_type: html Type Specified: html Specify the location of AWR Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ AWR_ROOT - Use AWR data from root (default) AWR_PDB - Use AWR data from PDB Enter value for awr_location: AWR_PDB Location of AWR Data Specified: AWR_PDB Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance Container Name -------------- -------------- -------------- -------------- -------------- 2086124034 CDB12CR2 1 cdb12cr2 PDB12CR2 Root DB Id Container DB Id AWR DB Id --------------- --------------- --------------- 2233049298 2086124034 2086124034 Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ 2086124034 1 CDB12CR2 cdb12cr2 server01.loc Using 2086124034 for database Id Using 1 for instance number Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. PressingNota: En el caso que la PDB desde la cual queremos emitir el reporte no se encuentre abierta, recibiremos el siguiente error:without specifying a number lists all completed snapshots. Enter value for num_days: 1 Listing the last day's Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- cdb12cr2 CDB12CR2 4 04 Jan 2018 15:35 1 5 04 Jan 2018 15:52 1 6 04 Jan 2018 16:04 1 7 04 Jan 2018 16:11 1 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 6 Begin Snapshot Id specified: 6 Enter value for end_snap: 7 End Snapshot Id specified: 7 Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrrpt_1_6_7.html. To use this name, press to continue, otherwise enter an alternative. Enter value for report_name: pdb12cr2_6_7.html #### #### < parte de la salida suprimida > #### Report written to pdb12cr2_6_7.html
ERROR at line 59: ORA-06550: line 59, column 52: PL/SQL: ORA-01219: database or pluggable database not open: queries allowed on fixed tables or views only ORA-06550: line 56, column 5: PL/SQL: SQL Statement ignored SP2-0556: Invalid file name.
Para extraer el reporte AWR debemos abrirla. Esto lo hacemos de la siguiente manera:
SQL> alter pluggable database open;
Verificación de los reportes generados:
Una vez terminada la ejecución del script (o el método de generación que hayamos elegido) vamos a tener nuestro reporte en el formato seleccionado.
Reporte a nivel CDB:
En el caso de un reporte a nivel CDB, no vamos a encontrar modificaciones significativas con respecto a versiones anteriores.
Podemos ver que nos indica que se trata del “root container” y nos muestra el correspondiente “container DB ID”. También vemos que los snap Id corresponden a los tomados en el CDB (Figura 2). Una novedad en la salida del reporte, la encontramos en la sección “SQL Statistics” (Figura 3) donde por cada diferente lista se incluye la columna “PDB Name” indicando justamente a que PDB corresponde el SQL (Figura 4).
Figura 2. Cabecera de reporte AWR a nivel CDB.
Figura 3. Sección “SQL Statistics” en reporte AWR.
Figura 4. En cada opción de “SQL Statistics” se puede ver la nueva columna “PDB Name”.
Reporte a nivel PDB:
En el caso del reporte generado en la PDB, fundamentalmente veremos que se indica que se trata de un reporte AWR de PDB, podemos ver también en la cabecera el nombre del CDB, y la PDB (indicada como “container”) y su correspondiente “container DBID” (Figura 5).
El resto de los datos del “header” son bastante generales y no difieren mucho.
Más abajo en el reporte, podemos ver de cual servicio se trata, en este caso pdb12cr2.localdomain (Figura 6).
Figura 5. Cabecera de reporte AWR a nivel PDB.
Figura 6. Sección “Service Statistics”. Se puede ver que se trata de la PDB únicamente.
No hay comentarios:
Publicar un comentario