{"id":1408,"date":"2026-09-02T15:38:49","date_gmt":"2026-09-02T21:38:49","guid":{"rendered":"https:\/\/folken-it.com\/?p=1408"},"modified":"2026-09-02T15:55:47","modified_gmt":"2026-09-02T21:55:47","slug":"como-generar-y-analizar-un-reporte-awr-en-oracle-database-19c-y-21c","status":"publish","type":"post","link":"https:\/\/folken-it.com\/?p=1408","title":{"rendered":"C\u00f3mo generar y analizar un reporte AWR en Oracle Database 19c y 21c"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cuando una base de datos Oracle presenta lentitud, consumo elevado de CPU, problemas de I\/O, bloqueos o tiempos de respuesta inconsistentes, uno de los recursos m\u00e1s importantes para un DBA es el reporte AWR.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AWR, o <em>Automatic Workload Repository<\/em>, conserva estad\u00edsticas hist\u00f3ricas sobre la carga y el rendimiento de la base de datos. Un reporte AWR compara dos snapshots y muestra lo ocurrido durante ese intervalo: carga, sesiones, SQL costoso, eventos de espera, uso de CPU, actividad de I\/O, memoria, bloqueos, redo, undo y otros indicadores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta gu\u00eda explica c\u00f3mo generar el reporte y, sobre todo, c\u00f3mo interpretarlo para diagnosticar incidentes y prevenir problemas en Oracle Database 19c y 21c.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Importante:<\/strong> El uso de AWR requiere una licencia v\u00e1lida de <strong>Oracle Diagnostics Pack<\/strong>. Antes de generar, consultar o automatizar reportes AWR, verifica las licencias contratadas por tu organizaci\u00f3n. Si no cuentas con Diagnostics Pack, considera utilizar Statspack y las vistas din\u00e1micas permitidas por tu licencia.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">1. \u00bfC\u00f3mo funciona AWR?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle recopila peri\u00f3dicamente estad\u00edsticas de rendimiento y las almacena en snapshots dentro del repositorio AWR.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De forma predeterminada, Oracle genera un snapshot cada 60 minutos y conserva la informaci\u00f3n durante ocho d\u00edas. Tanto el intervalo como la retenci\u00f3n pueden modificarse, aunque aumentar la retenci\u00f3n incrementa el espacio utilizado en el tablespace <code>SYSAUX<\/code>. La documentaci\u00f3n oficial describe este funcionamiento para <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/tgdba\/gathering-database-statistics.html\">Oracle Database 19c<\/a> y <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/21\/tgdba\/gathering-database-statistics.html\">Oracle Database 21c<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El reporte no muestra el estado actual de la base de datos. Presenta los valores acumulados o las diferencias registradas entre dos snapshots.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por esta raz\u00f3n, la selecci\u00f3n del intervalo es fundamental. Si el incidente ocurri\u00f3 entre las 10:15 y las 10:40, un reporte de todo el d\u00eda puede diluir el problema. Lo recomendable ser\u00eda generar un reporte que cubra aproximadamente de las 10:00 a las 11:00 y compararlo con otro intervalo saludable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Requisitos previos<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de generar el reporte, valida:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Que la edici\u00f3n y las licencias contratadas permitan utilizar Diagnostics Pack.<\/li>\n\n\n\n<li>Que <code>STATISTICS_LEVEL<\/code> se encuentre en <code>TYPICAL<\/code> o <code>ALL<\/code>.<\/li>\n\n\n\n<li>Que existan snapshots para el periodo del incidente.<\/li>\n\n\n\n<li>Que el usuario tenga permisos administrativos suficientes.<\/li>\n\n\n\n<li>Que la hora del incidente est\u00e9 correctamente identificada.<\/li>\n\n\n\n<li>Que no haya ocurrido un reinicio de la instancia dentro del intervalo.<\/li>\n\n\n\n<li>Que est\u00e9s conectado al contenedor, PDB o instancia correctos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Comprueba el nivel de estad\u00edsticas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW PARAMETER statistics_level;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n puedes consultarlo mediante SQL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT name, value\nFROM v$parameter\nWHERE name = 'statistics_level';\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Un valor <code>BASIC<\/code> deshabilita varias funciones autom\u00e1ticas de recopilaci\u00f3n de estad\u00edsticas y no es apropiado para el uso normal de AWR.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Revisar la configuraci\u00f3n de snapshots<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La vista <code>DBA_HIST_WR_CONTROL<\/code> muestra el intervalo y la retenci\u00f3n configurados:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT dbid,\n       snap_interval,\n       retention,\n       topnsql\nFROM dba_hist_wr_control;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle documenta <code>DBA_HIST_WR_CONTROL<\/code> como la vista de control del Workload Repository, incluyendo el intervalo y la retenci\u00f3n de snapshots. Consulta la <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/DBA_HIST_WR_CONTROL.html\">referencia oficial de Oracle 19c<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para listar los snapshots disponibles:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT snap_id,\n       dbid,\n       instance_number,\n       begin_interval_time,\n       end_interval_time,\n       startup_time,\n       snap_flag,\n       error_count\nFROM dba_hist_snapshot\nORDER BY snap_id DESC;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Las columnas m\u00e1s importantes son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SNAP_ID<\/code>: identificador del snapshot.<\/li>\n\n\n\n<li><code>INSTANCE_NUMBER<\/code>: instancia a la que pertenece.<\/li>\n\n\n\n<li><code>BEGIN_INTERVAL_TIME<\/code>: inicio del intervalo.<\/li>\n\n\n\n<li><code>END_INTERVAL_TIME<\/code>: fin del intervalo.<\/li>\n\n\n\n<li><code>STARTUP_TIME<\/code>: hora de inicio de la instancia.<\/li>\n\n\n\n<li><code>ERROR_COUNT<\/code>: errores encontrados al crear el snapshot.<\/li>\n\n\n\n<li><code>SNAP_FLAG<\/code>: indica si fue autom\u00e1tico, manual, importado o creado bajo otra condici\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La definici\u00f3n completa est\u00e1 disponible en la documentaci\u00f3n de <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/DBA_HIST_SNAPSHOT.html\"><code>DBA_HIST_SNAPSHOT<\/code><\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Generar un snapshot manual<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un snapshot manual es \u00fatil antes y despu\u00e9s de:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Una prueba de carga.<\/li>\n\n\n\n<li>Un despliegue importante.<\/li>\n\n\n\n<li>La ejecuci\u00f3n de un proceso batch.<\/li>\n\n\n\n<li>Un cambio de configuraci\u00f3n.<\/li>\n\n\n\n<li>Una ventana de mantenimiento.<\/li>\n\n\n\n<li>La reproducci\u00f3n controlada de un problema.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para crearlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n puede especificarse el nivel de recopilaci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN\n    DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(\n        flush_level =&gt; 'TYPICAL'\n    );\nEND;\n\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El nivel <code>ALL<\/code> recopila m\u00e1s informaci\u00f3n, pero puede generar una carga y un volumen de datos mayores:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>BEGIN\n    DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(\n        flush_level =&gt; 'ALL'\n    );\nEND;\n\/\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No es recomendable utilizar <code>ALL<\/code> continuamente sin evaluar su impacto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Generar el reporte AWR con SQL*Plus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con\u00e9ctate a la base de datos utilizando SQL*Plus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Localiza el directorio de scripts administrativos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW PARAMETER oracle_home;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ejecuta el script principal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@$ORACLE_HOME\/rdbms\/admin\/awrrpt.sql\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El script solicitar\u00e1:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>El formato del reporte: <code>html<\/code> o <code>text<\/code>.<\/li>\n\n\n\n<li>El n\u00famero de d\u00edas de snapshots que deben mostrarse.<\/li>\n\n\n\n<li>El snapshot inicial.<\/li>\n\n\n\n<li>El snapshot final.<\/li>\n\n\n\n<li>El nombre del archivo.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter value for report_type: html\nEnter value for num_days: 1\nEnter value for begin_snap: 15420\nEnter value for end_snap: 15421\nEnter value for report_name: awr_prod_15420_15421.html\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para facilitar la lectura, normalmente conviene seleccionar <code>html<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Scripts relacionados<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle incluye diferentes scripts para situaciones espec\u00edficas:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Script<\/th><th>Uso principal<\/th><\/tr><\/thead><tbody><tr><td><code>awrrpt.sql<\/code><\/td><td>Reporte AWR est\u00e1ndar<\/td><\/tr><tr><td><code>awrrpti.sql<\/code><\/td><td>Permite seleccionar expl\u00edcitamente DBID e instancia<\/td><\/tr><tr><td><code>awrgrpt.sql<\/code><\/td><td>Reporte global para Oracle RAC<\/td><\/tr><tr><td><code>awrgrpti.sql<\/code><\/td><td>Reporte RAC seleccionando DBID<\/td><\/tr><tr><td><code>awrddrpt.sql<\/code><\/td><td>Compara dos periodos AWR<\/td><\/tr><tr><td><code>awrddrpi.sql<\/code><\/td><td>Comparaci\u00f3n seleccionando DBID e instancia<\/td><\/tr><tr><td><code>awrgdrpt.sql<\/code><\/td><td>Comparaci\u00f3n global de periodos en RAC<\/td><\/tr><tr><td><code>ashrpt.sql<\/code><\/td><td>Reporte de Active Session History<\/td><\/tr><tr><td><code>addmrpt.sql<\/code><\/td><td>Reporte de Automatic Database Diagnostic Monitor<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La disponibilidad exacta de algunos scripts puede depender de la versi\u00f3n y del Release Update instalado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Generar un reporte mediante PL\/SQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n puede generarse directamente con <code>DBMS_WORKLOAD_REPOSITORY<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reporte HTML<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SET LONG 10000000\nSET LONGCHUNKSIZE 10000000\nSET PAGESIZE 0\nSET LINESIZE 32767\nSET TRIMSPOOL ON\nSET FEEDBACK OFF\nSET HEADING OFF\n\nSPOOL awr_report.html\n\nSELECT output\nFROM TABLE(\n    DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML(\n        l_dbid     =&gt; 123456789,\n        l_inst_num =&gt; 1,\n        l_bid      =&gt; 15420,\n        l_eid      =&gt; 15421\n    )\n);\n\nSPOOL OFF\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Reporte en texto<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SET LINESIZE 200\nSET PAGESIZE 0\nSET LONG 10000000\nSET LONGCHUNKSIZE 10000000\n\nSPOOL awr_report.txt\n\nSELECT output\nFROM TABLE(\n    DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(\n        l_dbid     =&gt; 123456789,\n        l_inst_num =&gt; 1,\n        l_bid      =&gt; 15420,\n        l_eid      =&gt; 15421\n    )\n);\n\nSPOOL OFF\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El <code>DBID<\/code> puede obtenerse con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT dbid, name\nFROM v$database;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y el n\u00famero de instancia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT instance_number, instance_name\nFROM v$instance;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">7. Consideraciones para Oracle RAC<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En RAC no basta con revisar una sola instancia si el problema afect\u00f3 a todo el servicio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debemos determinar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En qu\u00e9 instancia se ejecut\u00f3 la mayor parte de la carga.<\/li>\n\n\n\n<li>Si existi\u00f3 desequilibrio entre instancias.<\/li>\n\n\n\n<li>Si el servicio estaba distribuido correctamente.<\/li>\n\n\n\n<li>Si hubo esperas relacionadas con Global Cache.<\/li>\n\n\n\n<li>Si existieron problemas en la interconexi\u00f3n.<\/li>\n\n\n\n<li>Si una instancia concentr\u00f3 sesiones o SQL costoso.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para una revisi\u00f3n completa utiliza <code>awrgrpt.sql<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@$ORACLE_HOME\/rdbms\/admin\/awrgrpt.sql\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Entre los indicadores espec\u00edficos de RAC deben revisarse:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>gc cr request<\/code><\/li>\n\n\n\n<li><code>gc current request<\/code><\/li>\n\n\n\n<li><code>gc buffer busy acquire<\/code><\/li>\n\n\n\n<li><code>gc buffer busy release<\/code><\/li>\n\n\n\n<li>Global Cache transfer time<\/li>\n\n\n\n<li>Bloques recibidos por Cache Fusion<\/li>\n\n\n\n<li>Interconnect traffic<\/li>\n\n\n\n<li>Distribuci\u00f3n de servicios y sesiones<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una cantidad alta de eventos <code>gc<\/code> puede indicar acceso remoto excesivo a bloques, mala afinidad de servicios, objetos \u201ccalientes\u201d, secuencias, \u00edndices con contenci\u00f3n o un problema de red entre nodos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Consideraciones para CDB y PDB<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En arquitecturas multitenant es necesario confirmar si el an\u00e1lisis se realizar\u00e1 en:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>CDB$ROOT<\/code><\/li>\n\n\n\n<li>Una PDB concreta<\/li>\n\n\n\n<li>Toda la CDB<\/li>\n\n\n\n<li>Una instancia espec\u00edfica de RAC<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Comprueba el contenedor actual:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW CON_NAME;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lista los contenedores:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT con_id, name, open_mode\nFROM v$containers\nORDER BY con_id;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">En Oracle 19c y 21c, la recopilaci\u00f3n autom\u00e1tica de AWR a nivel PDB puede depender de la configuraci\u00f3n de:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW PARAMETER awr_pdb_autoflush_enabled;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si la recopilaci\u00f3n a nivel PDB no estaba habilitada antes del incidente, conectarse posteriormente a la PDB no crear\u00e1 de manera retroactiva los datos faltantes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al analizar una CDB, presta atenci\u00f3n a <code>CON_ID<\/code>, ya que permite relacionar la actividad con el contenedor correspondiente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. C\u00f3mo interpretar las secciones m\u00e1s importantes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">9.1 Report Summary<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La cabecera confirma:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DBID y nombre de la base.<\/li>\n\n\n\n<li>N\u00famero y nombre de instancia.<\/li>\n\n\n\n<li>Versi\u00f3n de Oracle.<\/li>\n\n\n\n<li>Plataforma.<\/li>\n\n\n\n<li>Cantidad de CPU.<\/li>\n\n\n\n<li>Memoria.<\/li>\n\n\n\n<li>Snapshots seleccionados.<\/li>\n\n\n\n<li>Duraci\u00f3n del periodo.<\/li>\n\n\n\n<li>Tiempo que la instancia estuvo activa.<\/li>\n\n\n\n<li>N\u00famero de sesiones.<\/li>\n\n\n\n<li>Cantidad de cores y sockets.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de continuar, valida que el reporte corresponda exactamente a la base, instancia y periodo del incidente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>Startup Time<\/code> cambia entre los snapshots, la instancia fue reiniciada. Comparar contadores a trav\u00e9s de un reinicio puede producir resultados incompletos o poco representativos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.2 DB Time y DB CPU<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>DB Time<\/code> representa el tiempo acumulado consumido por las sesiones activas en llamadas de base de datos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incluye:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tiempo utilizando CPU.<\/li>\n\n\n\n<li>Tiempo esperando eventos no idle.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No es equivalente al tiempo transcurrido. Si diez sesiones trabajan simult\u00e1neamente durante un minuto, pueden acumular aproximadamente diez minutos de DB Time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una relaci\u00f3n \u00fatil es:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DB Time = DB CPU + tiempo de espera no idle\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Interpretaci\u00f3n general:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>DB CPU<\/code> cerca de <code>DB Time<\/code>: carga principalmente limitada por CPU.<\/li>\n\n\n\n<li><code>DB Time<\/code> muy superior a <code>DB CPU<\/code>: la base pasa una parte significativa del tiempo esperando.<\/li>\n\n\n\n<li>Incremento repentino de <code>DB Time<\/code>: mayor carga, degradaci\u00f3n de SQL, bloqueo o contenci\u00f3n.<\/li>\n\n\n\n<li><code>DB Time<\/code> elevado con pocas transacciones: cada transacci\u00f3n se volvi\u00f3 m\u00e1s costosa.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9.3 Load Profile<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Load Profile<\/code> muestra la carga por segundo y por transacci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Incluye normalmente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB Time.<\/li>\n\n\n\n<li>DB CPU.<\/li>\n\n\n\n<li>Redo generado.<\/li>\n\n\n\n<li>Logical reads.<\/li>\n\n\n\n<li>Physical reads.<\/li>\n\n\n\n<li>Physical writes.<\/li>\n\n\n\n<li>User calls.<\/li>\n\n\n\n<li>Parses.<\/li>\n\n\n\n<li>Hard parses.<\/li>\n\n\n\n<li>Logons.<\/li>\n\n\n\n<li>Executes.<\/li>\n\n\n\n<li>Rollbacks.<\/li>\n\n\n\n<li>Transactions.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No deben analizarse \u00fanicamente los valores absolutos. Lo m\u00e1s \u00fatil es compararlos con un periodo normal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ejemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e1s <code>Logical reads<\/code> con el mismo volumen de negocio puede indicar un plan de ejecuci\u00f3n menos eficiente.<\/li>\n\n\n\n<li>M\u00e1s <code>Hard parses<\/code> puede se\u00f1alar SQL sin variables bind, presi\u00f3n en shared pool o invalidaciones.<\/li>\n\n\n\n<li>Mucho redo puede relacionarse con cargas masivas, commits excesivos o actualizaciones innecesarias.<\/li>\n\n\n\n<li>Muchos logons por segundo pueden indicar falta de pool de conexiones.<\/li>\n\n\n\n<li>Un incremento en rollbacks puede revelar errores de aplicaci\u00f3n o transacciones fallidas.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9.4 Instance Efficiency Percentages<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta secci\u00f3n incluye ratios como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buffer Nowait.<\/li>\n\n\n\n<li>Buffer Hit.<\/li>\n\n\n\n<li>Library Hit.<\/li>\n\n\n\n<li>Soft Parse.<\/li>\n\n\n\n<li>Execute to Parse.<\/li>\n\n\n\n<li>Parse CPU to Parse Elapsed.<\/li>\n\n\n\n<li>Non-Parse CPU.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Estos porcentajes pueden orientar, pero no deben utilizarse como diagn\u00f3stico aislado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, un Buffer Cache Hit Ratio alto no demuestra que la base tenga buen rendimiento. Una consulta que lea millones de bloques desde memoria puede seguir siendo muy costosa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En an\u00e1lisis L3 deben priorizarse DB Time, eventos de espera, SQL, planes de ejecuci\u00f3n y carga real.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.5 Top Foreground Events<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Esta es una de las secciones m\u00e1s importantes. Muestra d\u00f3nde consumieron tiempo las sesiones de usuario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Eventos comunes:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Evento<\/th><th>Posible interpretaci\u00f3n<\/th><\/tr><\/thead><tbody><tr><td><code>DB CPU<\/code><\/td><td>Procesamiento intensivo, SQL costoso o saturaci\u00f3n de CPU<\/td><\/tr><tr><td><code>db file sequential read<\/code><\/td><td>Lecturas individuales, com\u00fanmente accesos por \u00edndice<\/td><\/tr><tr><td><code>db file scattered read<\/code><\/td><td>Lecturas multibloque, frecuentemente full scans<\/td><\/tr><tr><td><code>direct path read<\/code><\/td><td>Lecturas directas, operaciones paralelas o scans grandes<\/td><\/tr><tr><td><code>direct path read temp<\/code><\/td><td>Lectura desde TEMP por spill de memoria<\/td><\/tr><tr><td><code>direct path write temp<\/code><\/td><td>Escritura en TEMP por sorts o hash joins<\/td><\/tr><tr><td><code>log file sync<\/code><\/td><td>Sesiones esperando confirmaci\u00f3n de commits<\/td><\/tr><tr><td><code>log file parallel write<\/code><\/td><td>Escritura de redo por LGWR<\/td><\/tr><tr><td><code>enq: TX - row lock contention<\/code><\/td><td>Bloqueos entre transacciones<\/td><\/tr><tr><td><code>buffer busy waits<\/code><\/td><td>Contenci\u00f3n por bloques<\/td><\/tr><tr><td><code>library cache lock<\/code><\/td><td>Contenci\u00f3n o cambios sobre objetos compartidos<\/td><\/tr><tr><td><code>cursor: pin S wait on X<\/code><\/td><td>Contenci\u00f3n sobre cursores<\/td><\/tr><tr><td><code>SQL*Net more data to client<\/code><\/td><td>Transferencia elevada de datos al cliente<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Una espera alta no siempre significa un problema en Oracle. Debe correlacionarse con el SQL, el volumen de trabajo, el almacenamiento, el sistema operativo y el comportamiento de la aplicaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.6 Host CPU y m\u00e9tricas del sistema operativo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Revisa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u00famero de CPUs.<\/li>\n\n\n\n<li>Load average.<\/li>\n\n\n\n<li>User CPU.<\/li>\n\n\n\n<li>System CPU.<\/li>\n\n\n\n<li>Idle CPU.<\/li>\n\n\n\n<li>I\/O wait.<\/li>\n\n\n\n<li>OS statistics.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Se\u00f1ales de alerta:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU idle cercana a cero durante periodos prolongados.<\/li>\n\n\n\n<li>Load average muy superior a la capacidad de CPU.<\/li>\n\n\n\n<li>Alto consumo de system CPU.<\/li>\n\n\n\n<li>Alta espera de I\/O.<\/li>\n\n\n\n<li><code>DB CPU<\/code> elevado y run queue alta.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">AWR presenta la perspectiva de Oracle, pero debe correlacionarse con herramientas del sistema operativo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>top\nvmstat 1\niostat -xz 1\nsar -u 1\nsar -q 1\npidstat 1\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9.7 SQL ordered by Elapsed Time<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Muestra el SQL que m\u00e1s tiempo total consumi\u00f3.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Debes revisar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Elapsed Time<\/code>.<\/li>\n\n\n\n<li><code>Executions<\/code>.<\/li>\n\n\n\n<li>Tiempo por ejecuci\u00f3n.<\/li>\n\n\n\n<li>Porcentaje del DB Time.<\/li>\n\n\n\n<li>CPU Time.<\/li>\n\n\n\n<li>I\/O Wait.<\/li>\n\n\n\n<li>SQL ID.<\/li>\n\n\n\n<li>Module.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un SQL puede aparecer arriba por dos razones:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Se ejecuta pocas veces, pero cada ejecuci\u00f3n es muy lenta.<\/li>\n\n\n\n<li>Cada ejecuci\u00f3n es r\u00e1pida, pero se ejecuta miles o millones de veces.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">La soluci\u00f3n es diferente en cada caso.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.8 SQL ordered by CPU Time<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ayuda a identificar sentencias que consumen CPU.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Posibles causas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Full scans innecesarios.<\/li>\n\n\n\n<li>Joins costosos.<\/li>\n\n\n\n<li>Funciones ejecutadas fila por fila.<\/li>\n\n\n\n<li>Predicados no selectivos.<\/li>\n\n\n\n<li>\u00cdndices ausentes o inadecuados.<\/li>\n\n\n\n<li>Planes de ejecuci\u00f3n degradados.<\/li>\n\n\n\n<li>Exceso de logical reads.<\/li>\n\n\n\n<li>Operaciones paralelas no controladas.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9.9 SQL ordered by Gets y Reads<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Buffer Gets<\/code> representa lecturas l\u00f3gicas. Un n\u00famero elevado suele indicar que el SQL visita demasiados bloques, incluso si estos est\u00e1n en memoria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>Physical Reads<\/code> muestra lecturas que necesitaron acceder al almacenamiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Analiza ambos indicadores:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Muchos gets y pocas lecturas f\u00edsicas: SQL ineficiente ejecut\u00e1ndose principalmente desde cach\u00e9.<\/li>\n\n\n\n<li>Muchas lecturas f\u00edsicas: working set mayor que la cach\u00e9, scans grandes o presi\u00f3n de I\/O.<\/li>\n\n\n\n<li>Pocas ejecuciones con millones de gets por ejecuci\u00f3n: candidato prioritario para tuning.<\/li>\n\n\n\n<li>Muchas ejecuciones con pocos gets: posible optimizaci\u00f3n desde la aplicaci\u00f3n o reducci\u00f3n de llamadas.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle conserva estad\u00edsticas hist\u00f3ricas del SQL superior en <code>DBA_HIST_SQLSTAT<\/code> y las complementa con texto, entorno del optimizador y planes. Consulta la documentaci\u00f3n de <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/DBA_HIST_SQLSTAT.html\"><code>DBA_HIST_SQLSTAT<\/code><\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.10 SQL ordered by Parse Calls y Version Count<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Estas secciones ayudan a identificar problemas de parsing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se\u00f1ales importantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hard parses elevados.<\/li>\n\n\n\n<li>Parse calls cercanos al n\u00famero de ejecuciones.<\/li>\n\n\n\n<li>Version count alto.<\/li>\n\n\n\n<li>Invalidaciones frecuentes.<\/li>\n\n\n\n<li>Baja reutilizaci\u00f3n de cursores.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Posibles causas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ausencia de variables bind.<\/li>\n\n\n\n<li>Diferencias en par\u00e1metros de sesi\u00f3n.<\/li>\n\n\n\n<li>Cambios de NLS.<\/li>\n\n\n\n<li>Objetos recompilados.<\/li>\n\n\n\n<li>Privilegios diferentes.<\/li>\n\n\n\n<li>Bind mismatch.<\/li>\n\n\n\n<li>Cambios en estad\u00edsticas.<\/li>\n\n\n\n<li>Shared pool insuficiente.<\/li>\n\n\n\n<li>C\u00f3digo que abre y cierra cursores innecesariamente.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9.11 Segments by Logical Reads, Physical Reads y Buffer Busy Waits<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Estas secciones identifican objetos con mayor carga:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tablas.<\/li>\n\n\n\n<li>\u00cdndices.<\/li>\n\n\n\n<li>Particiones.<\/li>\n\n\n\n<li>LOB.<\/li>\n\n\n\n<li>Segmentos temporales.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La informaci\u00f3n hist\u00f3rica por segmento se encuentra en <code>DBA_HIST_SEG_STAT<\/code>, que conserva estad\u00edsticas de los segmentos superiores capturados desde <code>V$SEGSTAT<\/code>. Consulta la <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/DBA_HIST_SEG_STAT.html\">referencia oficial<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un segmento con mucha actividad no necesariamente est\u00e1 mal. Puede ser el objeto central de la aplicaci\u00f3n. Lo importante es determinar si la actividad coincide con el volumen de negocio y si presenta contenci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.12 I\/O Statistics<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Revisa estad\u00edsticas por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tablespace.<\/li>\n\n\n\n<li>Datafile.<\/li>\n\n\n\n<li>Funci\u00f3n.<\/li>\n\n\n\n<li>Tipo de archivo.<\/li>\n\n\n\n<li>N\u00famero y tama\u00f1o de lecturas.<\/li>\n\n\n\n<li>N\u00famero y tama\u00f1o de escrituras.<\/li>\n\n\n\n<li>Tiempo promedio de servicio.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Busca:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Datafiles con latencia notablemente superior.<\/li>\n\n\n\n<li>Tablespaces que concentran la mayor carga.<\/li>\n\n\n\n<li>TEMP con actividad excesiva.<\/li>\n\n\n\n<li>Lecturas peque\u00f1as y aleatorias con alta latencia.<\/li>\n\n\n\n<li>Escrituras de redo lentas.<\/li>\n\n\n\n<li>Desequilibrio entre discos o diskgroups.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si se utiliza ASM, complementa el an\u00e1lisis con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT name,\n       total_mb,\n       free_mb,\n       usable_file_mb,\n       type,\n       state\nFROM v$asm_diskgroup;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9.13 PGA y uso de TEMP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Las secciones de PGA muestran:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memoria asignada.<\/li>\n\n\n\n<li>Work areas ejecutadas en modo optimal.<\/li>\n\n\n\n<li>Operaciones one-pass.<\/li>\n\n\n\n<li>Operaciones multipass.<\/li>\n\n\n\n<li>Uso de memoria para sorts y hash joins.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Interpretaci\u00f3n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Optimal<\/code>: la operaci\u00f3n se complet\u00f3 en memoria.<\/li>\n\n\n\n<li><code>One-pass<\/code>: fue necesario escribir y leer una vez desde TEMP.<\/li>\n\n\n\n<li><code>Multipass<\/code>: se requirieron m\u00faltiples pasadas por TEMP.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una cantidad significativa de operaciones multipass puede indicar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PGA insuficiente.<\/li>\n\n\n\n<li>SQL con joins o sorts demasiado grandes.<\/li>\n\n\n\n<li>Mala cardinalidad.<\/li>\n\n\n\n<li>Falta de filtros.<\/li>\n\n\n\n<li>Paralelismo excesivo.<\/li>\n\n\n\n<li>Plan de ejecuci\u00f3n inadecuado.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">No aumentes <code>PGA_AGGREGATE_TARGET<\/code> autom\u00e1ticamente. Primero identifica el SQL responsable y valida el consumo total del servidor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9.14 SGA, Buffer Cache y Shared Pool<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">AWR permite observar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buffer cache.<\/li>\n\n\n\n<li>Shared pool.<\/li>\n\n\n\n<li>Large pool.<\/li>\n\n\n\n<li>Java pool.<\/li>\n\n\n\n<li>Cach\u00e9 de cursores.<\/li>\n\n\n\n<li>Reloads.<\/li>\n\n\n\n<li>Invalidations.<\/li>\n\n\n\n<li>Actividad del library cache.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Posibles se\u00f1ales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Shared pool reloads elevados.<\/li>\n\n\n\n<li>Invalidaciones frecuentes.<\/li>\n\n\n\n<li>Fallos de asignaci\u00f3n.<\/li>\n\n\n\n<li>Hard parsing alto.<\/li>\n\n\n\n<li>Presi\u00f3n en buffer cache.<\/li>\n\n\n\n<li>Cambios frecuentes de tama\u00f1o bajo administraci\u00f3n autom\u00e1tica.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de modificar la SGA, correlaciona esta informaci\u00f3n con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT component,\n       current_size,\n       min_size,\n       max_size,\n       user_specified_size,\n       last_oper_type,\n       last_oper_mode\nFROM v$sga_dynamic_components;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9.15 Redo, commits y <code>log file sync<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando <code>log file sync<\/code> aparece entre las principales esperas, revisa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Commits por segundo.<\/li>\n\n\n\n<li>Redo size.<\/li>\n\n\n\n<li>Redo writes.<\/li>\n\n\n\n<li>Tiempo de <code>log file parallel write<\/code>.<\/li>\n\n\n\n<li>Tama\u00f1o y frecuencia de log switches.<\/li>\n\n\n\n<li>Rendimiento del almacenamiento de redo.<\/li>\n\n\n\n<li>Comportamiento transaccional de la aplicaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>log file parallel write<\/code> tambi\u00e9n es lento, puede existir un problema de almacenamiento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>log file parallel write<\/code> es r\u00e1pido, pero <code>log file sync<\/code> es alto, investiga:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Commits demasiado frecuentes.<\/li>\n\n\n\n<li>Scheduling de CPU.<\/li>\n\n\n\n<li>LGWR.<\/li>\n\n\n\n<li>Contenci\u00f3n interna.<\/li>\n\n\n\n<li>Aplicaciones que hacen commit por cada fila.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">9.16 Undo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La secci\u00f3n de undo ayuda a detectar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Consumo elevado.<\/li>\n\n\n\n<li>Transacciones largas.<\/li>\n\n\n\n<li>Riesgo de <code>ORA-01555: snapshot too old<\/code>.<\/li>\n\n\n\n<li>Retenci\u00f3n insuficiente.<\/li>\n\n\n\n<li>Bloques no expirados reutilizados.<\/li>\n\n\n\n<li>Incrementos anormales en la tasa de generaci\u00f3n de undo.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Consulta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT begin_time,\n       end_time,\n       undoblks,\n       txncount,\n       maxquerylen,\n       ssolderrcnt,\n       nospaceerrcnt\nFROM v$undostat\nORDER BY begin_time DESC;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9.17 Advisory Sections<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El reporte puede incluir recomendaciones para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Buffer cache.<\/li>\n\n\n\n<li>Shared pool.<\/li>\n\n\n\n<li>PGA.<\/li>\n\n\n\n<li>Java pool.<\/li>\n\n\n\n<li>Streams pool.<\/li>\n\n\n\n<li>SGA Target.<\/li>\n\n\n\n<li>DB cache.<\/li>\n\n\n\n<li>MTTR.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Estas secciones son estimaciones, no instrucciones que deban ejecutarse autom\u00e1ticamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una recomendaci\u00f3n de aumentar memoria debe validarse contra:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memoria f\u00edsica disponible.<\/li>\n\n\n\n<li>Uso de swap.<\/li>\n\n\n\n<li>L\u00edmite de PGA.<\/li>\n\n\n\n<li>HugePages.<\/li>\n\n\n\n<li>Otras instancias en el mismo servidor.<\/li>\n\n\n\n<li>Beneficio estimado.<\/li>\n\n\n\n<li>SQL ineficiente que origin\u00f3 la presi\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">10. M\u00e9todo de an\u00e1lisis recomendado para un incidente<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un DBA L3 puede seguir esta secuencia:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 1: Confirmar el periodo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Identifica la hora exacta del incidente y selecciona snapshots que lo cubran sin incluir demasiadas horas normales.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 2: Validar el contexto<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comprueba:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Base e instancia.<\/li>\n\n\n\n<li>CDB o PDB.<\/li>\n\n\n\n<li>Versi\u00f3n.<\/li>\n\n\n\n<li>Reinicios.<\/li>\n\n\n\n<li>Duraci\u00f3n.<\/li>\n\n\n\n<li>N\u00famero de sesiones.<\/li>\n\n\n\n<li>Cambios recientes.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 3: Determinar d\u00f3nde se consumi\u00f3 el DB Time<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Revisa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB CPU.<\/li>\n\n\n\n<li>Top Foreground Events.<\/li>\n\n\n\n<li>Wait Classes.<\/li>\n\n\n\n<li>Average Active Sessions.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 4: Identificar el principal consumidor<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Determina si el problema fue ocasionado por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQL.<\/li>\n\n\n\n<li>CPU.<\/li>\n\n\n\n<li>Almacenamiento.<\/li>\n\n\n\n<li>Bloqueos.<\/li>\n\n\n\n<li>Redo.<\/li>\n\n\n\n<li>Parsing.<\/li>\n\n\n\n<li>TEMP\/PGA.<\/li>\n\n\n\n<li>RAC\/Cache Fusion.<\/li>\n\n\n\n<li>Conexiones.<\/li>\n\n\n\n<li>Objetos espec\u00edficos.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 5: Correlacionar<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Relaciona el hallazgo con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQL ID.<\/li>\n\n\n\n<li>Plan hash value.<\/li>\n\n\n\n<li>M\u00f3dulo y acci\u00f3n.<\/li>\n\n\n\n<li>Servicio.<\/li>\n\n\n\n<li>Usuario.<\/li>\n\n\n\n<li>Segmento.<\/li>\n\n\n\n<li>Instancia.<\/li>\n\n\n\n<li>Evento de espera.<\/li>\n\n\n\n<li>M\u00e9tricas del sistema operativo.<\/li>\n\n\n\n<li>Alert log.<\/li>\n\n\n\n<li>Deployments o procesos batch.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 6: Comparar con una l\u00ednea base<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Genera otro AWR para un periodo saludable con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Mismo d\u00eda de la semana.<\/li>\n\n\n\n<li>Horario equivalente.<\/li>\n\n\n\n<li>Carga de negocio similar.<\/li>\n\n\n\n<li>Misma configuraci\u00f3n, si es posible.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La comparaci\u00f3n mediante <code>awrddrpt.sql<\/code> puede mostrar cambios en carga, eventos, SQL y consumo de recursos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 7: Aplicar una correcci\u00f3n controlada<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La acci\u00f3n podr\u00eda incluir:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Corregir el SQL.<\/li>\n\n\n\n<li>Estabilizar un plan.<\/li>\n\n\n\n<li>Modificar un \u00edndice.<\/li>\n\n\n\n<li>Reducir commits.<\/li>\n\n\n\n<li>Ajustar el pool de conexiones.<\/li>\n\n\n\n<li>Redistribuir servicios RAC.<\/li>\n\n\n\n<li>Corregir bloqueos desde la aplicaci\u00f3n.<\/li>\n\n\n\n<li>Ajustar memoria.<\/li>\n\n\n\n<li>Revisar el almacenamiento.<\/li>\n\n\n\n<li>Limitar paralelismo.<\/li>\n\n\n\n<li>Corregir estad\u00edsticas.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Paso 8: Verificar despu\u00e9s del cambio<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Crea snapshots antes y despu\u00e9s del cambio y compara:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tiempo por ejecuci\u00f3n.<\/li>\n\n\n\n<li>DB Time.<\/li>\n\n\n\n<li>Buffer gets.<\/li>\n\n\n\n<li>Lecturas f\u00edsicas.<\/li>\n\n\n\n<li>CPU.<\/li>\n\n\n\n<li>Eventos de espera.<\/li>\n\n\n\n<li>Throughput.<\/li>\n\n\n\n<li>Experiencia real de la aplicaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">11. Qu\u00e9 problemas puede ayudar a prevenir<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un an\u00e1lisis peri\u00f3dico de AWR puede detectar tendencias antes de que se conviertan en incidentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Crecimiento progresivo del DB Time.<\/li>\n\n\n\n<li>Aumento de CPU por transacci\u00f3n.<\/li>\n\n\n\n<li>SQL con planes inestables.<\/li>\n\n\n\n<li>Incremento de hard parsing.<\/li>\n\n\n\n<li>Saturaci\u00f3n de procesos o sesiones.<\/li>\n\n\n\n<li>Mayor uso de TEMP.<\/li>\n\n\n\n<li>Redo generado de forma anormal.<\/li>\n\n\n\n<li>Aumento de commits por segundo.<\/li>\n\n\n\n<li>Degradaci\u00f3n de la latencia de I\/O.<\/li>\n\n\n\n<li>Segmentos con contenci\u00f3n.<\/li>\n\n\n\n<li>Desequilibrio entre instancias RAC.<\/li>\n\n\n\n<li>Crecimiento de la carga sin capacidad suficiente.<\/li>\n\n\n\n<li>Procesos batch que comienzan a exceder su ventana.<\/li>\n\n\n\n<li>Mayor consumo de PGA o SGA.<\/li>\n\n\n\n<li>Cambios en patrones de conexi\u00f3n.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Para prevenci\u00f3n, no basta con archivar reportes. Conviene registrar indicadores clave y comparar periodos equivalentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Errores comunes al analizar AWR<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Generar un reporte demasiado amplio<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un reporte de 24 horas puede ocultar un problema que dur\u00f3 diez minutos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Analizar \u00fanicamente ratios<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un hit ratio alto no garantiza buen rendimiento.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Asumir que el evento superior es la causa ra\u00edz<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">El evento puede ser un s\u00edntoma. Debe correlacionarse con SQL, objetos y comportamiento de la aplicaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Optimizar por tiempo total sin revisar ejecuciones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un SQL puede consumir mucho tiempo porque se ejecuta millones de veces, no porque una ejecuci\u00f3n sea lenta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cambiar memoria sin revisar el SQL<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Aumentar SGA o PGA puede ocultar temporalmente el problema sin corregirlo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ignorar la aplicaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bloqueos, commits excesivos, falta de pooling y SQL repetitivo frecuentemente se originan fuera de la base.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Comparar periodos con cargas diferentes<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Comparar cierre de mes contra un d\u00eda normal puede producir conclusiones incorrectas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ignorar RAC o el contenedor<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un reporte de la instancia o PDB incorrecta puede no mostrar el problema real.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">13. Consultas complementarias<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">SQL hist\u00f3rico por elapsed time<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT sql_id,\n       plan_hash_value,\n       executions_delta,\n       elapsed_time_delta \/ 1000000 AS elapsed_seconds,\n       cpu_time_delta \/ 1000000 AS cpu_seconds,\n       buffer_gets_delta,\n       disk_reads_delta,\n       rows_processed_delta\nFROM dba_hist_sqlstat\nWHERE snap_id BETWEEN :begin_snap AND :end_snap\nORDER BY elapsed_time_delta DESC\nFETCH FIRST 20 ROWS ONLY;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Consultar el texto de un SQL<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT sql_id,\n       dbms_lob.substr(sql_text, 4000, 1) AS sql_text\nFROM dba_hist_sqltext\nWHERE sql_id = '&amp;sql_id';\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Planes hist\u00f3ricos<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT sql_id,\n       plan_hash_value,\n       id,\n       parent_id,\n       operation,\n       options,\n       object_owner,\n       object_name\nFROM dba_hist_sql_plan\nWHERE sql_id = '&amp;sql_id'\nORDER BY plan_hash_value, id;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Consumo hist\u00f3rico de procesos y sesiones<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT s.end_interval_time,\n       r.resource_name,\n       r.current_utilization,\n       r.max_utilization,\n       r.initial_allocation,\n       r.limit_value\nFROM dba_hist_resource_limit r\nJOIN dba_hist_snapshot s\n  ON s.snap_id = r.snap_id\n AND s.dbid = r.dbid\n AND s.instance_number = r.instance_number\nWHERE r.resource_name IN ('processes', 'sessions')\nORDER BY s.end_interval_time;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La vista <code>DBA_HIST_RESOURCE_LIMIT<\/code> conserva informaci\u00f3n hist\u00f3rica sobre l\u00edmites y consumo de recursos. Consulta la <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/DBA_HIST_RESOURCE_LIMIT.html\">documentaci\u00f3n oficial<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un reporte AWR no debe interpretarse como una lista autom\u00e1tica de problemas. Es una fotograf\u00eda hist\u00f3rica del trabajo realizado por Oracle entre dos snapshots.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Su mayor valor aparece cuando el DBA combina:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB Time.<\/li>\n\n\n\n<li>Eventos de espera.<\/li>\n\n\n\n<li>SQL y planes.<\/li>\n\n\n\n<li>Estad\u00edsticas de objetos.<\/li>\n\n\n\n<li>CPU e I\/O.<\/li>\n\n\n\n<li>Memoria.<\/li>\n\n\n\n<li>Redo y undo.<\/li>\n\n\n\n<li>Informaci\u00f3n de RAC o multitenant.<\/li>\n\n\n\n<li>M\u00e9tricas del sistema operativo.<\/li>\n\n\n\n<li>Comportamiento de la aplicaci\u00f3n.<\/li>\n\n\n\n<li>Comparaci\u00f3n contra una l\u00ednea base.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">El objetivo no es encontrar un porcentaje \u201cincorrecto\u201d, sino responder cuatro preguntas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u00bfEn qu\u00e9 se consumi\u00f3 el tiempo?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 SQL, objeto, sesi\u00f3n o recurso origin\u00f3 el consumo?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 cambi\u00f3 respecto a un periodo saludable?<\/li>\n\n\n\n<li>\u00bfQu\u00e9 correcci\u00f3n puede aplicarse y c\u00f3mo se medir\u00e1 su resultado?<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Utilizado correctamente, AWR permite diagnosticar incidentes con mayor rapidez, justificar t\u00e9cnicamente los cambios y detectar tendencias antes de que afecten la operaci\u00f3n diaria de una base de datos Oracle.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando una base de datos Oracle presenta lentitud, consumo elevado de CPU, problemas de I\/O, bloqueos o tiempos de respuesta inconsistentes, uno [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1409,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"C\u00f3mo generar y analizar un reporte AWR en Oracle Database 19c y 21c","jetpack_seo_html_title":"C\u00f3mo generar y analizar un reporte AWR en Oracle Database 19c y 21c","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1408","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/folken-it.com\/wp-content\/uploads\/2026\/09\/AWR.png?fit=1672%2C941&ssl=1","_links":{"self":[{"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/posts\/1408","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/folken-it.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1408"}],"version-history":[{"count":1,"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/posts\/1408\/revisions"}],"predecessor-version":[{"id":1410,"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/posts\/1408\/revisions\/1410"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/folken-it.com\/index.php?rest_route=\/wp\/v2\/media\/1409"}],"wp:attachment":[{"href":"https:\/\/folken-it.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1408"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/folken-it.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1408"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/folken-it.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}