SGA usage
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Voir aussi | SGA · Instance · Sp auto |
SGA usage est un script de diagnostic qui affiche l'occupation mémoire réelle de la SGA
d'une instance, zone par zone (cache de buffers, shared pool, large pool, java pool, tampon
de redo, SGA fixe), puis le détail du shared pool (library cache, dictionary cache, mémoire
libre, zone SQL). Complète la page SGA, qui présente l'architecture et les paramètres de
dimensionnement, avec un outil pour observer les valeurs effectivement allouées via
v$sgastat.
(à vérifier selon version) : ce script date d'une période où le nom de la statistique
associée au cache de buffers dans v$sgastat était db_block_buffers
— sur des versions plus récentes (l'allocation moderne du cache passe par
db_cache_size/sga_target), ce nom peut avoir changé côté
v$sgastat et la première requête peut ne rien remonter pour cette ligne. En cas
de résultat vide sur la ligne « DB Buffer Cache », inspecter directement
select * from v$sgastat where pool is null; pour retrouver le nom courant, ou
utiliser plus simplement v$sgainfo/v$sga pour une vue d'ensemble
moderne indépendante de la version.
Script
SET ECHO OFF
SET FEEDBACK OFF
SET LINESIZE 512
PROMPT --------------------------------
PROMPT - Occupation mémoire de la SGA -
PROMPT --------------------------------
COLUMN dummy NOPRINT
COLUMN area FORMAT a20 HEADING 'Zones principales de la SGA'
COLUMN name FORMAT a20
COLUMN pool FORMAT a20
COLUMN bytes FORMAT 999,999,999,999
COLUMN "sum(bytes)" FORMAT 999,999,999,999
BREAK ON report
COMPUTE SUM OF "sum(bytes)" ON report
SELECT
1 dummy,
'DB Buffer Cache' area,
name,
sum(bytes)
FROM
v$sgastat
WHERE
pool IS NULL
AND
name = 'db_block_buffers'
GROUP BY
name
UNION ALL
SELECT
2,
'Shared Pool',
pool,
sum(bytes)
FROM
v$sgastat
WHERE
pool = 'shared pool'
GROUP BY
pool
UNION ALL
SELECT
3,
'Large Pool',
pool,
sum(bytes)
FROM
v$sgastat
WHERE
pool = 'large pool'
GROUP BY
pool
UNION ALL
SELECT
4,
'Java Pool',
pool,
sum(bytes)
FROM
v$sgastat
WHERE
pool = 'java pool'
GROUP BY
pool
UNION ALL
SELECT
5,
'Redo Log Buffer',
name,
sum(bytes)
FROM
v$sgastat
WHERE
pool IS NULL
AND
name = 'log_buffer'
GROUP BY
name
UNION ALL
SELECT
6,
'Fixed SGA',
name,
sum(bytes)
FROM
v$sgastat
WHERE
pool IS NULL
AND
name = 'fixed_sga'
GROUP BY
name
ORDER BY
4 DESC;
COLUMN area FORMAT a20 HEADING 'Détail du Shared Pool'
PROMPT ----------------------------
PROMPT -- Détail du pool partagé --
PROMPT ----------------------------
SELECT
'Shared Pool' area,
name,
sum(bytes)
FROM
v$sgastat
WHERE
pool = 'shared pool'
AND
name IN ('library cache','dictionary cache','free memory','sql area')
GROUP BY
name
UNION ALL
SELECT
'Shared Pool' area,
'miscellaneous',
sum(bytes)
FROM
v$sgastat
WHERE
pool = 'shared pool'
AND
name NOT IN ('library cache','dictionary cache','free memory','sql area')
GROUP BY
pool
ORDER BY
3 DESC;