Dba top segments

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Administration
Voir aussi Dba tablespaces · Dba tablespaces 8

Dba top segments affiche les 100 plus gros segments de la base (tables, index, partitions…), classés par taille décroissante et regroupés par type de segment. Utile en complément de Dba tablespaces pour identifier rapidement quels objets consomment le plus d'espace dans un tablespace qui se remplit.

Script

Le classement des 100 plus gros segments est fait dans une sous-requête triée par bytes desc puis limitée avec rownum ; l'affichage final regroupe ensuite ces 100 lignes par segment_type avec un sous-total de taille par type (BREAK + COMPUTE sum).

-- Top 100 des segments par taille, regroupés par type de segment

SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT rpad(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Top Segments                                                |
PROMPT | Instance : &current_instance                                           |
PROMPT +------------------------------------------------------------------------+

SET ECHO        OFF
SET FEEDBACK    6
SET HEADING     ON
SET LINESIZE    180
SET PAGESIZE    50000
SET TIMING      OFF
SET TRIMOUT     ON
SET TRIMSPOOL   ON
SET VERIFY      OFF

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

COLUMN segment_type    FORMAT A20                HEADING 'Segment Type'
COLUMN owner           FORMAT A15                HEADING 'Owner'
COLUMN segment_name    FORMAT A30                HEADING 'Segment Name'
COLUMN partition_name  FORMAT A30                HEADING 'Partition Name'
COLUMN tablespace_name FORMAT A20                HEADING 'Tablespace Name'
COLUMN bytes           FORMAT 9,999,999,999,999  HEADING 'Size (in bytes)'
COLUMN extents         FORMAT 999,999,999        HEADING 'Extents'

BREAK ON segment_type SKIP 1

COMPUTE sum OF bytes ON segment_type

SELECT
    a.segment_type
  , a.owner
  , a.segment_name
  , a.partition_name
  , a.tablespace_name
  , a.bytes
  , a.extents
FROM
    ( SELECT
          b.segment_type
        , b.owner
        , b.segment_name
        , b.partition_name
        , b.tablespace_name
        , b.bytes
        , b.extents
      FROM
          dba_segments b
      ORDER BY
          b.bytes DESC
    ) a
WHERE
    rownum < 101
ORDER BY
    segment_type, bytes DESC, owner, segment_name
/

Voir aussi