Oracle Statspack - Amazon Relational Database Service

Oracle Statspack

La opción Oracle Statspack instala y activa la característica de estadísticas de desempeño Oracle Statspack. Oracle Statspack es un conjunto de scripts SQL, PL/SQL y SQL*Plus que recopilan, almacenan y muestran datos de desempeño. Para obtener información acerca del uso de Oracle Statspack, consulte Oracle Statspack en la documentación de Oracle.

nota

Oracle ha dejado de dar soporte para Oracle Statspack y lo ha reemplazado por una característica más avanzada: Automatic Workload Repository (AWR). AWR solo está disponible para los clientes de Oracle Enterprise Edition que han adquirido el paquete de diagnósticos. Puede utilizar Oracle Statspack con cualquier motor de base de datos de Oracle en Amazon RDS. No puede ejecutar Oracle Statspack en réplicas de lectura de Amazon RDS.

Configuración de Oracle Statspack

Para ejecutar scripts Statspack, debe agregar la opción Statspack.

Para configurar Oracle Statspack
  1. En un cliente SQL, inicie sesión en Oracle DB con una cuenta administrativa.

  2. Realice una de las siguientes acciones, dependiendo de si Statspack está instalado:

    • Si Statspack está instalado y la cuenta PERFSTAT está asociada con Statspack, vaya al Paso 4.

    • Si Statspack no está instalado y la cuenta PERFSTAT existe, elimínela de la siguiente manera:

      DROP USER PERFSTAT CASCADE;

      De lo contrario, al intentar agregar la opción Statspack se genera un error y RDS-Event-0058.

  3. Agregue la opción Statspack a un grupo de opciones. Consulte Agregar una opción a un grupo de opciones.

    Amazon RDS instala de forma automática los scripts de Statspack en la instancia de base de datos y luego configura la cuenta PERFSTAT.

  4. Restablezca la contraseña usando la siguiente instrucción SQL, reemplazando pwd por su nueva contraseña:

    ALTER USER PERFSTAT IDENTIFIED BY pwd ACCOUNT UNLOCK;

    Puede iniciar sesión con la cuenta de usuario PERFSTAT y ejecutar los scripts de Statspack.

  5. Realice una de las siguientes acciones, dependiendo de la versión del motor de base de datos:

    • Puede omitir este paso si utiliza Oracle Database 12c Versión 2 (12.2) o una versión inferior.

    • Si utiliza Oracle Database 19c o superior, otorgue el privilegio CREATE JOB a la cuenta PERFSTAT mediante la siguiente instrucción:

      GRANT CREATE JOB TO PERFSTAT;
  6. Asegúrese de que los eventos de espera inactiva de la tabla PERFSTAT.STATS$IDLE_EVENT se rellenan.

    Debido al error de Oracle 28523746, es posible que los eventos de espera inactiva en PERFSTAT.STATS$IDLE_EVENT no se rellenen. Para asegurarse de que todos los eventos inactivos están disponibles, ejecute la siguiente instrucción:

    INSERT INTO PERFSTAT.STATS$IDLE_EVENT (EVENT) SELECT NAME FROM V$EVENT_NAME WHERE WAIT_CLASS='Idle' MINUS SELECT EVENT FROM PERFSTAT.STATS$IDLE_EVENT; COMMIT;

Generación de informes de Statspack

Un informe Statspack compara dos instantáneas.

Para generar informes de Statspack
  1. En un cliente SQL, inicie sesión en Oracle DB con la cuenta de PERFSTAT.

  2. Cree una instantánea utilizando cualquiera de las siguientes técnicas:

    • Cree manualmente una instantánea de Statspack.

    • Cree un trabajo que tome una instantánea de Statspack después de un intervalo de tiempo determinado. Por ejemplo, el trabajo siguiente crea una instantánea de Statspack cada hora:

      VARIABLE jn NUMBER; exec dbms_job.submit(:jn, 'statspack.snap;',SYSDATE,'TRUNC(SYSDATE+1/24,''HH24'')'); COMMIT;
  3. Vea las instantáneas mediante la siguiente consulta:

    SELECT SNAP_ID, SNAP_TIME FROM STATS$SNAPSHOT ORDER BY 1;
  4. Ejecute el procedimiento de Amazon RDS rdsadmin.rds_run_spreport, reemplazando begin_snap y end_snap por los ID de instantánea:

    exec rdsadmin.rds_run_spreport(begin_snap,end_snap);

    Por ejemplo, el siguiente comando crea un informe basado en el intervalo entre las instantáneas 1 y 2 de Statspack:

    exec rdsadmin.rds_run_spreport(1,2);

    El nombre de archivo del informe de Statspack incluye el número de las dos instantáneas. Por ejemplo, un archivo de informe creado con las instantáneas 1 y 2 de Statspack se llamaría ORCL_spreport_1_2.lst.

  5. Monitorice la salida en busca de errores.

    Oracle Statspack realiza comprobaciones antes de ejecutar el informe. Por lo tanto, también puede ver mensajes de error en la salida del comando. Por ejemplo, puede intentar generar un informe basado en un rango no válido, donde el valor de instantánea de Statspack inicial es mayor que el valor final. En este caso, la salida muestra el mensaje de error, pero el motor de base de datos no genera un archivo de error.

    exec rdsadmin.rds_run_spreport(2,1); * ERROR at line 1: ORA-20000: Invalid snapshot IDs. Find valid ones in perfstat.stats$snapshot.

    Si utiliza un número no válido de instantánea de Statspack, la salida muestra un error. Por ejemplo, si intenta generar un informe para las instantáneas 1 y 50, pero la instantánea 50 no existe, el resultado muestra un error.

    exec rdsadmin.rds_run_spreport(1,50); * ERROR at line 1: ORA-20000: Could not find both snapshot IDs
  6. (Opcional)

    Para recuperar el informe, llame a los procedimientos del archivo de seguimiento, como se explica en Uso de los archivos de seguimiento de Oracle.

    También puede descargar el informe de Statspack desde la consola de RDS. Vaya a la sección Log (Registro) de los detalles de la instancia de base de datos y elija Download (Descargar):

    Si se produce un error al generar un informe, el motor de base de datos utiliza las mismas convenciones de nomenclatura que para un informe pero con una extensión .err. Por ejemplo, si se produce un error al crear un informe con las instantáneas 1 y 7 de Statspack, el archivo de informe se denominaría ORCL_spreport_1_7.err. Puede descargar el informe de errores mediante las mismas técnicas que para un informe de instantáneas estándar.

Eliminación de instantáneas de Statspack

Para eliminar una variedad de instantáneas de Oracle Statspack, utilice el siguiente comando:

exec statspack.purge(begin snap, end snap);