ASMr snapshots dbtime

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine AWR – snapshots / DB Time
Voir aussi Awr snapshots dbtime xls

ASMr snapshots dbtime – malgré son préfixe, ce script ne concerne pas le stockage ASM : il s'agit d'un script AWR (Automatic Workload Repository) qui liste tous les snapshots disponibles et calcule, pour chacun, le DB Time consommé pendant l'intervalle (temps total passé par les sessions dans la base de données, hors idle), ainsi que sa part par rapport à la durée réelle de l'intervalle. C'est un indicateur rapide de charge globale, à examiner avant de creuser un rapport AWR détaillé sur un intervalle suspect.

Une variante avec sortie tabulée pour tableur existe : Awr snapshots dbtime xls.

Script

-- Rapport AWR : DB Time consomme par intervalle de snapshot (dba_hist_snapshot)

SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT RPAD(SYS_CONTEXT('USERENV', 'INSTANCE_NAME'), 17) current_instance FROM dual;
SET TERMOUT ON

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Rapport   : AWR Snapshots (DB Time)                                    |
PROMPT | Instance  : &current_instance                                         |
PROMPT +------------------------------------------------------------------------+

SET ECHO      OFF
SET FEEDBACK  6
SET HEADING   ON
SET LINESIZE  256
SET PAGESIZE  50000
SET VERIFY    OFF

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

COLUMN instance_name_print FORMAT a13                HEADING 'Instance Name'
COLUMN snap_id              FORMAT 9999999             HEADING 'Snap ID'
COLUMN startup_time          FORMAT a21                 HEADING 'Instance Startup Time'
COLUMN begin_interval_time    FORMAT a20                 HEADING 'Begin Interval Time'
COLUMN end_interval_time       FORMAT a20                 HEADING 'End Interval Time'
COLUMN elapsed_time             FORMAT 999,999,999,999.99 HEADING 'Elapsed Time (min)'
COLUMN db_time                   FORMAT 999,999,999,999.99 HEADING 'DB Time (min)'
COLUMN pct_db_time                 FORMAT 999999999          HEADING '% DB Time'
COLUMN cpu_time                     FORMAT 999,999,999.99     HEADING 'CPU Time (min)'

BREAK ON instance_name_print ON startup_time

DEFINE spool_file = awr_snapshots_dbtime.lst

SPOOL &spool_file

SELECT
    i.instance_name                                                                       instance_name_print
  , s.snap_id                                                                              snap_id
  , TO_CHAR(s.startup_time, 'mm/dd/yyyy HH24:MI:SS')                                       startup_time
  , TO_CHAR(s.begin_interval_time, 'mm/dd/yyyy HH24:MI:SS')                                begin_interval_time
  , TO_CHAR(s.end_interval_time, 'mm/dd/yyyy HH24:MI:SS')                                  end_interval_time
  , ROUND(EXTRACT(DAY    FROM s.end_interval_time - s.begin_interval_time) * 1440 +
          EXTRACT(HOUR   FROM s.end_interval_time - s.begin_interval_time) * 60 +
          EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) +
          EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60, 2)        elapsed_time
  , ROUND((e.value - b.value) / 1000000 / 60, 2)                                           db_time
  , ROUND((((e.value - b.value) / 1000000 / 60) /
           (EXTRACT(DAY    FROM s.end_interval_time - s.begin_interval_time) * 1440 +
            EXTRACT(HOUR   FROM s.end_interval_time - s.begin_interval_time) * 60 +
            EXTRACT(MINUTE FROM s.end_interval_time - s.begin_interval_time) +
            EXTRACT(SECOND FROM s.end_interval_time - s.begin_interval_time) / 60) * 100), 2) pct_db_time
FROM
    dba_hist_snapshot       s
  , gv$instance             i
  , dba_hist_sys_time_model e
  , dba_hist_sys_time_model b
WHERE
    i.instance_number = s.instance_number
AND e.snap_id         = s.snap_id
AND b.snap_id         = s.snap_id - 1
AND e.stat_id         = b.stat_id
AND e.instance_number = b.instance_number
AND e.instance_number = s.instance_number
AND e.stat_name       = 'DB time'
ORDER BY
    i.instance_name, s.snap_id;

SPOOL OFF

PROMPT Rapport ecrit dans &spool_file

Colonnes / sortie

  • DB Time (min) – DB Time cumulé sur l'intervalle, en minutes ; calculé par différence entre deux snapshots successifs (snap_id et snap_id - 1) sur la statistique DB time de dba_hist_sys_time_model.
  • % DB Time – rapport DB Time / durée réelle de l'intervalle. Une valeur largement supérieure à 100% (fréquent sur base multi-cœurs très active) est normale : le DB Time cumule le temps de toutes les sessions actives en parallèle.
  • Nécessite une licence Diagnostics Pack (accès à dba_hist_*).

Voir aussi