Guía de ajuste de SQL Nota 21: Supervisión de las operaciones de la base de datos

Este artículo son las notas del Capítulo 21 " Supervisión de las operaciones de la base de datos " de la Guía de ajuste de SQL.

Este capítulo describe cómo monitorear SQL y PL/SQL.

conceptos básicos importantes

  • Conjunto de ajuste de SQL (STS)
    Un objeto de base de datos que incluye una o más sentencias SQL junto con sus estadísticas de ejecución y contexto de ejecución.

21.1 Acerca de la supervisión de las operaciones de la base de datos

La supervisión de SQL está habilitada de manera predeterminada cuando el parámetro de inicialización STATISTICS_LEVEL se establece en TYPICAL (el valor predeterminado) o ALL.

Una breve descripción conceptual de las operaciones de base de datos de Oracle Database Concepts

21.1.1 Acerca de las operaciones de la base de datos

Una operación de base de datos es un conjunto de tareas de base de datos. Las tareas típicas pueden ser trabajos por lotes o trabajos de procesamiento de extracción, transformación y carga (ETL).

Las operaciones de la base de datos son simples o complejas.

operaciones simples de base de datos

Una operación de base de datos simple es una instrucción SQL única o una subrutina PL/SQL. Después de habilitar la función SQL Monitor, la base de datos monitoreará automáticamente las operaciones simples de la base de datos cuando se cumpla alguna de las siguientes condiciones:

  • La instrucción SQL o la subrutina PL/SQL consumieron al menos 5 segundos de CPU o tiempo de E/S en una sola ejecución.
  • Las sentencias SQL se ejecutan en paralelo .
  • La instrucción SQL especifica el * /*+ MONITOR / sugerencia .
  • El evento sql_monitor especifica una lista de ID de SQL de declaraciones para monitorear. Por ejemplo, la siguiente instrucción fuerza la supervisión a nivel de instancia para los ID de SQL 5hc07qvt8v737 y 9ht3ba3arrzt3:
ALTER SYSTEM SET EVENTS 'sql_monitor [sql: 5hc07qvt8v737|sql: 9ht3ba3arrzt3] force=true'

En cada paso del plan de ejecución de SQL, la base de datos realiza un seguimiento de las estadísticas en función de las métricas de rendimiento, como el tiempo transcurrido, el tiempo de CPU, las lecturas y escrituras y el tiempo de espera de E/S. Estas métricas están disponibles en informes gráficos e interactivos denominados Informes de actividad de SQL Monitor .

Operaciones de bases de datos compuestas

Las operaciones de la base de datos compuesta son definidas por el usuario. Incluye todas las sentencias SQL o subrutinas PL/SQL ejecutadas en una sesión de base de datos, con puntos de inicio y finalización definidos mediante los procedimientos DBMS_SQL_MONITOR.BEGIN_OPERATION y DBMS_SQL_MONITOR.END_OPERATION. Una operación de base de datos compuesta se identifica de forma única por su nombre e ID de ejecución, y se puede ejecutar varias veces.

Nota: una sesión de base de datos puede participar como máximo en una operación de base de datos a la vez.

Oracle Database monitorea automáticamente las operaciones compuestas cuando se cumple cualquiera de las siguientes condiciones:

  • La operación consumió al menos 5 segundos de CPU o tiempo de E/S.
  • Fuerce las operaciones de seguimiento estableciendo FORCED_TRACKING en Y en DBMS_SQL_MONITOR.BEGIN_OPERATION .

Nota: " Obtener el máximo provecho de SQL Monitor " tiene una breve descripción general de SQL Monitor

21.1.2 Propósito de monitorear las operaciones de la base de datos

Para operaciones simples, el monitoreo de SQL en tiempo real ayuda a determinar dónde pasan el tiempo las declaraciones .

También puede ver desgloses de tiempo y uso de recursos para estados de cuenta completados recientemente . De esta manera, puede determinar mejor por qué una operación en particular es costosa. Los casos de uso para el monitoreo de SQL en tiempo real incluyen:

  • Las sentencias SQL ejecutadas con frecuencia se ejecutan más lentamente de lo normal. Debe determinar la causa raíz de este problema.
  • El rendimiento de la sesión de la base de datos se degrada.
  • Las sentencias SQL paralelas tardan mucho tiempo. Desea determinar cómo los procesos del servidor dividen el trabajo.

En entornos de almacenamiento de datos y OLTP, un trabajo suele ser una agrupación lógica de instrucciones SQL relacionadas. El trabajo puede abarcar varias sesiones simultáneas. Las operaciones de base de datos amplían la supervisión de SQL en tiempo real al permitirle ver un conjunto de declaraciones o procedimientos como una unidad con nombre, identificable de forma única y reejecutable. Los casos de uso para monitorear operaciones incluyen:

  • Un trabajo por lotes periódico que contiene muchas instrucciones SQL debe completarse en un número determinado de horas, pero tarda más de lo esperado.
  • Después de una actualización de la base de datos, aumentó el tiempo de ejecución de un trabajo por lotes crítico. Para resolver este problema, debe recopilar suficientes estadísticas relevantes de los trabajos por lotes antes y después de la actualización, comparar los dos conjuntos de datos y luego identificar los cambios.
  • Empaquetar el conjunto de ajuste de SQL (STS) está tardando mucho más de lo esperado. Para diagnosticar un problema, necesita saber qué se está ejecutando a lo largo del tiempo. Dado que este problema no es fácil de reproducir, debe supervisar el proceso mientras se ejecuta.

Consulte también:
Por qué usar SQL Monitor para ver un video que demuestra algunos de los usos de SQL Monitor

21.1.3 Cómo funciona el monitoreo de la base de datos

El monitoreo SQL en tiempo real es una infraestructura de base de datos integrada que lo ayuda a identificar problemas de rendimiento con sentencias SQL paralelas de ejecución prolongada.

El siguiente diagrama describe la arquitectura de Real-time SQL Monitoring.

Figura 21-1 Arquitectura de monitoreo de la operación de la base de datos
inserte la descripción de la imagen aquí
Como se muestra en la figura anterior, el paquete DBMS_SQL_MONITOR define las operaciones de la base de datos. Cuando el monitoreo está habilitado, la base de datos almacena metadatos sobre las operaciones de la base de datos en AWR, junto con datos en AWR y ASH. La base de datos actualiza las estadísticas de monitoreo casi en tiempo real a medida que se ejecuta cada declaración monitoreada, generalmente cada segundo . La base de datos almacena datos operativos (declaraciones y metadatos) en el SGA. Una vez completada la operación , la base de datos escribe los informes de SQL Monitor en el disco, que se pueden consultar mediante la vista DBA_HIST_REPORTS.

Cada operación de base de datos supervisada tiene una entrada en V$SQL_MONITORla vista . Esta entrada realiza un seguimiento de las métricas de rendimiento clave recopiladas para la ejecución, incluido el tiempo transcurrido, el tiempo de CPU, las lecturas y escrituras, el tiempo de espera de E/S y varios otros tiempos de espera. V$SQL_PLAN_MONITORLas vistas incluyen estadísticas de monitoreo para cada operación en el plan de ejecución de la instrucción SQL monitoreada. Puede acceder a los informes mediante DBMS_SQL_MONITOR.REPORT_SQL_MONITOR, Oracle Enterprise Manager Cloud Control (Cloud Control).

21.1.4 Interfaces de usuario para el monitoreo de operaciones de bases de datos

Real-Time SQL Monitoring es una función de Oracle Database Tuning Pack. Las operaciones de la base de datos están habilitadas cuando el parámetro de inicialización CONTROL_MANAGEMENT_PACK_ACCESS se establece en DIAGNOSTIC+TUNING (el valor predeterminado).

21.1.4.1 Página de ejecuciones SQL supervisadas en Cloud Control

La página Ejecuciones de SQL supervisadas en Cloud Control, también conocida como Monitor de SQL, muestra información detallada sobre las ejecuciones de SQL. SQL Monitor es la interfaz recomendada para informar sobre las operaciones de la base de datos .

Las estadísticas de cada paso del plan de ejecución se rastrean mediante indicadores clave de rendimiento, incluidos el tiempo transcurrido, el tiempo de CPU, las lecturas y escrituras, el tiempo de espera de E/S y varios otros tiempos de espera. Estas métricas permiten a los administradores de bases de datos analizar en profundidad la ejecución de SQL y decidir las estrategias de ajuste más adecuadas para las declaraciones de SQL supervisadas.

SQL Monitor Active Reports proporciona informes interactivos basados ​​en Flash que le permiten guardar datos en archivos HTML. Puede guardar este archivo y verlo sin conexión.

Las ejecuciones de SQL supervisadas muestran información como el ID de SQL, la hora de la base de datos y las solicitudes de E/S.
inserte la descripción de la imagen aquí

21.1.4.2 Paquete DBMS_SQL_MONITOR

El paquete DBMS_SQL_MONITOR define el inicio y el final de las operaciones de bases de datos compuestas y genera informes de operaciones de bases de datos.

Aquí solo se describen las funciones REPORT_SQL_MONITOR más importantes .

Esta función genera un informe detallado que contiene información de supervisión para sentencias SQL, bloques PL/SQL u operaciones de bases de datos.

Para cada operación, proporciona información clave y estadísticas globales relacionadas. Utilice esta función para obtener información de seguimiento detallada de las operaciones de la base de datos.

Las operaciones de la base de datos de destino para este informe pueden ser:

  • La última operación de la base de datos supervisada por la base de datos de Oracle (predeterminado, sin argumentos).
  • La última operación de base de datos realizada en la sesión especificada y supervisada por Oracle Database. Una sesión se identifica por su ID de sesión y número de secuencia opcional (-1 es la sesión actual).
  • La última ejecución de una operación de base de datos específica identificada por su sql_id.
  • Una ejecución específica de una operación de base de datos identificada por la combinación sql_id, sql_exec_start y sql_exec_id.
  • La última ejecución de la operación de base de datos específica identificada por dbop_name.
  • Una ejecución concreta de una operación de base de datos identificada por la combinación dbop_name, dbop_exec_id.

Utilice el parámetro de tipo para especificar el tipo de salida: TEXTO (predeterminado), HTML, ACTIVO o XML.

21.1.4.3 Atributos de operaciones de base de datos compuestas

La función DBMS_SQL_MONITOR.BEGIN_OPERATION define una operación de base de datos.

Una operación de base de datos compuesta se identifica de forma única mediante la siguiente información:

  • Nombre de la operación de la base de datos
    Este es un nombre creado por el usuario, como informe_de_ventas_diario. El nombre de la operación para un trabajo es el mismo incluso si se ejecuta simultáneamente en diferentes sesiones o en diferentes bases de datos. Los nombres de las operaciones de la base de datos no residen en diferentes espacios de nombres.
  • ID de ejecución de operación de base de datos
    Dos o más eventos de la misma operación de base de datos pueden ejecutarse simultáneamente, con el mismo nombre pero diferentes ID de ejecución . Este ID numérico identifica de forma única diferentes ejecuciones de la misma operación de base de datos.
    Cuando inicia una operación de base de datos, la base de datos crea automáticamente una ID de ejecución. También puede especificar ID de ejecución creados por el usuario.

Opcionalmente, puede especificar el ID de sesión y el número de secuencia de sesión en el que iniciar la operación de la base de datos. Por lo tanto, una sesión de base de datos puede iniciar operaciones de base de datos definidas en diferentes sesiones de base de datos.

La base de datos utiliza el siguiente valor de triplete para identificar cada instrucción SQL y PL/SQL monitoreada en la vista V$SQL_MONITOR, ya sea que la instrucción esté involucrada o no en una operación de la base de datos:

  • El identificador SQL (SQL_ID) que identifica la sentencia SQL
  • Marca de tiempo de inicio de ejecución (SQL_EXEC_START)
  • Identificador generado internamente para garantizar que esta clave principal sea realmente única (SQL_EXEC_ID)

Puede utilizar cero o más atributos adicionales para describir e identificar las características de una operación de base de datos compuesta. Cada propiedad tiene un nombre y un valor. Por ejemplo, para la operación de base de datos daily_sales_report, puede definir el atributo db_name y asignarle el valor prod.

21.1.4.4 Sugerencias MONITOR y NO_MONITOR

Puede usar las sugerencias MONITOR y NO_MONITOR para controlar el seguimiento de declaraciones individuales.

La sugerencia MONITOR fuerza la supervisión SQL en tiempo real de las consultas, incluso si la declaración no es de ejecución prolongada. Este mensaje solo es válido cuando el parámetro CONTROL_MANAGEMENT_PACK_ACCESS se establece en DIAGNOSTIC+TUNING.

21.1.4.5 Vistas para monitorear e informar sobre las operaciones de la base de datos

Puede utilizar las vistas de diccionario de datos y V$ para obtener estadísticas sobre las operaciones de la base de datos.

La siguiente tabla resume estos puntos.

Tabla 21-2 Vista de monitoreo de operación de la base de datos

vista describir
DBA_HIST_REPORTS Esta vista muestra metadatos sobre informes XML capturados en el repositorio de carga de trabajo automatizado (AWR). Cada informe XML contiene información detallada sobre alguna actividad del componente.
DBA_HIST_REPORTS_DETALLES Esta vista muestra información detallada sobre cada informe capturado en AWR. Los metadatos de cada informe se muestran en la vista DBA_HIST_REPORTS, mientras que los informes reales están disponibles en la vista DBA_HIST_REPORTS_DETAILS.
V$SQL_MONITOR Esta vista contiene información global de alto nivel sobre operaciones de bases de datos simples y compuestas.
V$SQL_MONITOR_SESSTAT Esta vista contiene estadísticas de todas las sesiones involucradas en las operaciones de la base de datos.
V$SQL_PLAN_MONITOR Esta vista contiene estadísticas de monitoreo para cada paso en el plan de ejecución de la instrucción SQL monitoreada.

Puede combinar las vistas de V$ anteriores con las siguientes vistas para obtener información adicional sobre las ejecuciones supervisadas:

  • V$ACTIVE_SESSION_HISTORY
  • V$SESIÓN
  • V$SESSION_LONGOPS
  • V$SQL
  • V$SQL_PLAN

21.1.5 Tareas básicas en el monitoreo de operaciones de base de datos

Las tareas básicas son las siguientes:

  • "Habilitación y deshabilitación de la supervisión de las operaciones de la base de datos"
    Esta tarea explica cómo habilitar la supervisión automática de las operaciones de la base de datos a nivel del sistema y de la declaración.

  • "Definición de operaciones de bases de datos compuestas"
    Esta sección describe cómo usar PL/SQL para definir el comienzo y el final de una operación de base de datos.

  • "Generación y acceso a informes de SQL Monitor"
    Esta sección describe cómo generar e interpretar informes sobre las operaciones de la base de datos.

21.2 Habilitación y deshabilitación del monitoreo de las operaciones de la base de datos

Use parámetros de inicialización para habilitar o deshabilitar el monitoreo.

21.2.1 Habilitación del monitoreo de las operaciones de la base de datos a nivel del sistema

La supervisión de SQL está habilitada de manera predeterminada cuando el parámetro de inicialización STATISTICS_LEVEL se establece en TYPICAL (el valor predeterminado) o ALL. La supervisión de SQL se inicia automáticamente para todas las consultas de ejecución prolongada.

Requisito previo:
debido a que SQL Monitoring es una función de Oracle Database Tuning Pack, el parámetro de inicialización CONTROL_MANAGEMENT_PACK_ACCESS debe establecerse en DIAGNOSTIC+TUNING (el valor predeterminado).

Este tutorial asume lo siguiente:

  • El parámetro de inicialización STATISTICS_LEVEL se establece en BASIC.
  • Desea habilitar la supervisión automática de las operaciones de la base de datos.
SQL> SHOW PARAMETER statistics_level
 
NAME                                TYPE        VALUE
----------------------------------- ----------- -----
statistics_level                    string      BASIC

SQL> ALTER SYSTEM SET STATISTICS_LEVEL='TYPICAL';

21.2.2 Habilitación y deshabilitación del monitoreo de las operaciones de la base de datos a nivel de declaración

Cuando el parámetro de inicialización CONTROL_MANAGEMENT_PACK_ACCESS se establece en DIAGNOSTIC+TUNING, puede usar sugerencias para habilitar o deshabilitar la supervisión de instrucciones SQL específicas.

La base de datos monitorea automáticamente las sentencias SQL o las subrutinas PL/SQL cuando consumen al menos 5 segundos de CPU o tiempo de E/S en una sola ejecución . La sugerencia MONITOR es útil para forzar la supervisión de declaraciones o subprogramas que no cumplen con los criterios de tiempo.

Hay dos sugerencias a nivel de declaración que se pueden usar para forzar o evitar que la base de datos supervise las declaraciones de SQL. Para forzar el monitoreo de SQL, use la sugerencia MONITOR:

SELECT /*+ MONITOR */ SYSDATE FROM DUAL;

Esta sugerencia solo es válida cuando el parámetro CONTROL_MANAGEMENT_PACK_ACCESS se establece en DIAGNOSTIC+TUNING. Para evitar que se supervisen las instrucciones SQL sugeridas, utilice la sugerencia inversa NO_MONITOR.

21.3 Definición de una operación de base de datos compuesta

Definir una operación de base de datos implica proporcionar un nombre y especificar su hora de inicio y finalización.

Use la función DBMS_SQL_MONITOR.BEGIN_OPERATION para iniciar una operación de base de datos y use el procedimiento DBMS_SQL_MONITOR.END_OPERATION para finalizarla.

Para iniciar la operación en una sesión diferente, especifique una combinación de session_id y serial_num. La función BEGIN_OPERATION devuelve el ID de ejecución de la operación de la base de datos. Si dbop_exec_id está vacío, la base de datos genera un valor único.

Hay un único espacio de nombres para las operaciones de la base de datos, lo que significa que son posibles las colisiones de nombres. Oracle recomienda la siguiente convención de nomenclatura: nombre_componente.nombre_subcomponente.nombre de operación. Para operaciones dentro de la base de datos, Oracle recomienda utilizar ORA como nombre del componente. Por ejemplo, una actualización de vista materializada podría llamarse ORA.MV.refresh. La función de nómina de E-Business Suite puede llamarse EBIZ.nómina.

Cree una operación de base de datos en la sesión actual:

VARIABLE exec_id NUMBER; 
BEGIN 
  :exec_id := DBMS_SQL_MONITOR.BEGIN_OPERATION ( dbop_name => 'ORA.sales.agg' ); 
END; 
/

-- Execute the SQL statements or PL/SQL programs that you want to monitor.

BEGIN
  DBMS_SQL_MONITOR.END_OPERATION ( dbop_name => 'ORA.sales.agg', dbop_eid => :exec_id );
END;
/

Crear operaciones de base de datos en otras sesiones:

-- SH 用户登录
-- SYSTEM 用户, T1
SELECT SID, SERIAL# FROM   V$SESSION WHERE  USERNAME = 'SH';

       SID    SERIAL#
---------- ----------
       121      13397

VARIABLE eid NUMBER

BEGIN
:eid:=DBMS_SQL_MONITOR.BEGIN_OPERATION
      ('sh_count', null, null,
       null, '121', '13397');
END;
/

PRINT eid

       EID
----------
         2
-- SH 用户执行操作

-- SYSTEM用户
BEGIN 
  DBMS_SQL_MONITOR.END_OPERATION
        ('sh_count',:eid);
END;
/
...

21.4 Generación y acceso a informes de SQL Monitor

De manera predeterminada, AWR captura automáticamente los informes de monitoreo de SQL en formato XML.

Estos informes solo capturan sentencias SQL que no se ejecutaron o pusieron en cola y cuya ejecución se completó desde el último ciclo de captura . AWR solo captura informes de las declaraciones más costosas en función del tiempo de ejecución transcurrido. La política de retención de SQL Monitor está controlada por la política AWR. Puede cambiar la política de retención utilizando el procedimiento DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS.

La página Ejecución de SQL supervisada en Enterprise Manager Cloud Control (Cloud Control) resume la actividad de las declaraciones supervisadas. Puede usar esta página para profundizar y obtener detalles adicionales sobre una declaración específica. La página Detalles de ejecuciones de SQL supervisadas utiliza datos de varias vistas, entre las que se incluyen:

  • GV$SQL_MONITOR
  • GV$SQL_PLAN_MONITOR
  • GV$SQL_MONITOR_SESSTAT
  • GV$SQL
  • GV$SQL_PLAN
  • GV$ACTIVE_SESSION_HISTORY
  • GV$SESSION_LONGOPS
  • DBA_HIST_REPORTS
  • DBA_HIST_REPORTS_DETALLES

Nota: A partir de Oracle Database 19c, Oracle Database incluye la vista V$ no documentada, que permite a los usuarios de bases de datos sin SELECT_CATALOG_ROLE ver planes y estadísticas para operaciones simples de bases de datos (sentencias SQL y PL/SQL simples) realizadas en una sesión. Los usuarios sin SELECT_CATALOG_ROLE no pueden ver las estadísticas y los detalles de ejecución de SQL de otros usuarios.

El usuario sh está ejecutando la siguiente consulta paralela de ejecución prolongada para las ventas de cada cliente:

SELECT c.cust_id, c.cust_last_name, c.cust_first_name, 
       s.prod_id, p.prod_name, s.time_id
FROM   sales s, customers c, products p
WHERE  s.cust_id = c.cust_id
AND    s.prod_id = p.prod_id
ORDER BY c.cust_id, s.time_id;

Desea asegurarse de que las consultas anteriores no consuman recursos excesivos. A medida que se ejecuta la declaración , desea determinar las estadísticas básicas sobre las operaciones de la base de datos, como el nivel de paralelismo, el tiempo total de la base de datos y la cantidad de solicitudes de E/S.

Utiliza Cloud Control para monitorear la ejecución de declaraciones.

Nota: Para generar un informe de monitor SQL desde la línea de comandos, ejecute la función REPORT_SQL_MONITOR desde el paquete DBMS_SQLTUNE, como se muestra en el siguiente script SQL*Plus de ejemplo:

VARIABLE my_rept CLOB
BEGIN
  :my_rept :=DBMS_SQLTUNE.REPORT_SQL_MONITOR();
END;
/
PRINT :my_rept

inserte la descripción de la imagen aquí
La primera fila es la instrucción SQL que se va a monitorear, haga clic en su columna ID.
inserte la descripción de la imagen aquí
La consulta se ha estado ejecutando durante 1,4 minutos.
El informe anterior muestra el plan de ejecución y las estadísticas relacionadas con la ejecución de sentencias. Por ejemplo, la columna Línea de tiempo muestra cuándo está activo cada paso del plan de ejecución. Los tiempos se muestran en relación con el inicio y el final de la ejecución de la sentencia. La columna Ejecuciones muestra cuántas veces se ejecutó la operación.

En la sección Información general, haga clic en el vínculo junto al texto de SQL para mostrar la declaración de SQL completa.

En la sección Estadísticas de tiempo y espera, junto a Tiempo de la base de datos, mueva el cursor sobre la parte más grande del gráfico de barras.
inserte la descripción de la imagen aquí
El tiempo de la base de datos mide el tiempo que la base de datos dedica a procesar esta instrucción SQL. Este valor incluye la CPU y el tiempo de espera, como el tiempo de E/S. El gráfico de barras se divide en secciones codificadas por colores para resaltar los recursos de la CPU, los recursos de E/S del usuario y otros recursos. Puede mover el cursor sobre cualquier sección para ver el valor porcentual del total.

En la columna Solicitudes de E/S de la sección Estadísticas de E/S, mueva el cursor sobre Solicitudes de E/S para ver el valor porcentual del total.
inserte la descripción de la imagen aquí
En la figura anterior, el mensaje de solicitudes de E/S muestra el número total de solicitudes de lectura emitidas por el SQL monitoreado. El mensaje muestra que las solicitudes de lectura representan el 80 % del total de solicitudes de E/S.

21.5 Supervisión de las operaciones de la base de datos: escenarios

21.5.1 Informes sobre una operación de base de datos simple: escenario

En este caso, se esperaba que la consulta se completara en unos segundos, pero continuó ejecutándose.

En este ejemplo, suponga que ha iniciado sesión en la base de datos como usuario sh y ejecute la siguiente consulta:

SELECT /*+ MONITOR */ s.prod_id, c.cust_last_name FROM sales s, customers c ORDER BY prod_id

La consulta no se completó. A partir de Oracle Database 19c, los usuarios con pocos privilegios, como sh, pueden generar informes de SQL Monitor para operaciones de base de datos simples (sentencias SQL y PL/SQL individuales) dentro de sus sesiones. Para determinar el origen del problema, use SQL Monitor para diagnosticar, de la siguiente manera:

  1. Cancelar consulta.
  2. Obtenga un informe de texto llamando a DBMS_SQL_MONITOR.REPORT_SQL_MONITOR:
SET LONG 1000000
VARIABLE my_rept CLOB;
BEGIN
  :my_rept := DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(
                report_level => 'ALL', 
                TYPE         => 'text');
END;
/
PRINT :my_rept

El resultado anterior es difícil de leer debido al formato. Decide crear un informe gráfico de actividad de SQL Monitor.

  1. Cree un script SQL que contenga los siguientes comandos y ejecútelo en SQL Plus:
SET FEEDBACK OFF
SET TERMOUT OFF
SET TRIMSPOOL ON
SET TRIM ON
SET PAGES 0
SET LINESIZE 1000
SET LONG 1000000
SET LONGCHUNKSIZE 1000000

SPOOL /tmp/long_sql.htm
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR(
         report_level => 'ALL', 
         TYPE         => 'active') 
FROM   DUAL;
SPOOL OFF

inserte la descripción de la imagen aquí

La causa del problema de rendimiento se muestra en la línea 2: unión cartesiana. El autor de la consulta omitió sin darse cuenta una cláusula WHERE. La consulta devolvió 50 millones de filas antes de la cancelación en lugar de alrededor de 1 millón como la combinación interna de ventas y clientes. Ordenar los datos unidos en las dos tablas consume la mayor parte del tiempo de la base de datos (fila 1).

21.5.2 Informes sobre el funcionamiento de la base de datos compuesta: escenario

Este escenario usa DBMS_SQL_MONITOR para definir operaciones de base de datos y generar informes de actividad.

Su objetivo es agrupar las cuatro consultas de las tablas en el esquema sh en una sola operación y luego generar un informe.

  1. En SQL Plus, inicie sesión como usuario administrativo SAM. Inicie una operación denominada TIENDA (especifique el seguimiento_forzado para garantizar que SQL Monitor realice un seguimiento de SQL), ejecute cuatro consultas y finalice la operación de la siguiente manera:
VARIABLE exec_id NUMBER;
BEGIN
  :exec_id := DBMS_SQL_MONITOR.BEGIN_OPERATION ( dbop_name => 'SHOP', forced_tracking => 'Y' );
END;
/

SELECT COUNT(*) FROM sh.sales;
SELECT COUNT(*) FROM sh.customers;

SELECT prod_id, cust_id 
FROM   sh.sales 
WHERE  prod_id < 26 
ORDER BY prod_id;

SELECT cust_id, cust_first_name, cust_last_name, cust_city 
FROM   sh.customers 
WHERE  cust_id < 30000 
ORDER BY cust_id;

BEGIN
  DBMS_SQL_MONITOR.END_OPERATION ( dbop_name => 'SHOP', dbop_eid => :exec_id );
END;
/
  1. Para obtener metadatos sobre una operación, incluido su estado y metadatos, consulte V$SQL_MONITOR (resultado de muestra incluido):
COL STATUS FORMAT a10
COL DBOP_NAME FORMAT a10
COL CON_NAME FORMAT a5

SELECT STATUS, SQL_ID, DBOP_NAME, DBOP_EXEC_ID,
       TO_CHAR(ELAPSED_TIME/1000000,'000.00') AS ELA_SEC 
FROM   V$SQL_MONITOR
WHERE  DBOP_NAME = 'SHOP';

STATUS     SQL_ID        DBOP_NAME  DBOP_EXEC_ID ELA_SEC
---------- ------------- ---------- ------------ -------
DONE                     SHOP                  3  001.34
  1. Para obtener metadatos sobre los informes de SQL Monitor, llame a DBMS_SQL_MONITOR.REPORT_SQL_MONITOR (salida de muestra incluida):
SET LONG 10000000
SET LONGCHUNKSIZE 10000000 
SET PAGES 0
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR( 
  dbop_name => 'SHOP', type => 'TEXT', report_level => 'ALL') AS rpt
FROM DUAL;

SQL Monitoring Report

Global Information
------------------------------
 Status              :  DONE
 Instance ID         :  1
 Session             :  SAM (87:6406)
 DBOP Name           :  SHOP
 DBOP Execution ID   :  3
 First Refresh Time  :  10/03/2017 07:33:32
 Last Refresh Time   :  10/03/2017 07:34:24
 Duration            :  52s
 Module/Action       :  sqlplus@myhost (TNS V1-V3)/-
 Service             :  MYSERVICE
 Program             :  sqlplus@myhost (TNS V1-V3)

Global Stats
========================================================
| Elapsed |   Cpu   |    IO    | Buffer | Read | Read  |
| Time(s) | Time(s) | Waits(s) |  Gets  | Reqs | Bytes |
========================================================
|    1.36 |    1.34 |     0.02 |    202 |  583 |  27MB |
========================================================
  1. Para generar un informe HTML de la actividad, pase el nombre de la operación a DBMS_SQL_MONITOR.REPORT_SQL_MONITOR:
SET LONG 10000000
SET LONGCHUNKSIZE 10000000 
SET PAGES 0
SELECT DBMS_SQL_MONITOR.REPORT_SQL_MONITOR( 
  dbop_name => 'SHOP', type => 'TEXT', report_level => 'ALL') AS rpt
FROM DUAL;

SQL Monitoring Report

Global Information
------------------------------
 Status              :  DONE
 Instance ID         :  1
 Session             :  SAM (87:6406)
 DBOP Name           :  SHOP
 DBOP Execution ID   :  3
 First Refresh Time  :  10/03/2017 07:33:32
 Last Refresh Time   :  10/03/2017 07:34:24
 Duration            :  52s
 Module/Action       :  sqlplus@myhost (TNS V1-V3)/-
 Service             :  MYSERVICE
 Program             :  sqlplus@myhost (TNS V1-V3)

Global Stats
========================================================
| Elapsed |   Cpu   |    IO    | Buffer | Read | Read  |
| Time(s) | Time(s) | Waits(s) |  Gets  | Reqs | Bytes |
========================================================
|    1.36 |    1.34 |     0.02 |    202 |  583 |  27MB |
========================================================

La siguiente imagen muestra el informe de actividad:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/stevensxiao/article/details/128908347
Recomendado
Clasificación