Perf performance snapshot
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Domaine | Performance |
| Voir aussi | Perf hit ratio system · Perf redo log contention · Perf sga usage |
Perf performance snapshot produit en une seule exécution un petit rapport de synthèse couvrant les principaux indicateurs de performance d'une instance : date de démarrage, hit ratio du buffer cache, hit ratio du dictionnaire de données, hit ratio de la library cache, statistiques du redo log buffer, latches en contention et attentes sur les segments d'annulation. Pratique en premier réflexe de diagnostic, avant d'aller creuser un indicateur précis avec l'un des scripts dédiés de cette catégorie.
Script
SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY OFF
PROMPT
PROMPT +-----------------------------------+
PROMPT | Date/heure de démarrage |
PROMPT +-----------------------------------+
PROMPT
SELECT instance "Instance", open_time "Date/heure d'ouverture"
FROM v$thread
/
PROMPT
PROMPT +-----------------------------------+
PROMPT | Buffer Cache Hit Ratio |
PROMPT +-----------------------------------+
PROMPT
SELECT
TRUNC(
( 1 - ( SUM(DECODE(name, 'physical reads', value, 0))
/ ( SUM(DECODE(name, 'db block gets', value, 0))
+ SUM(DECODE(name, 'consistent gets', value, 0))
)
)
) * 100
) "Buffer Hit Ratio"
FROM v$sysstat
/
SELECT
a.value + b.value "Logical reads"
, c.value "Physical Reads"
, d.value "Physical Writes"
, ROUND(100 * ((a.value + b.value) - c.value) / (a.value + b.value)) "Buffer Hit Ratio"
, ROUND(c.value * 100 / (a.value + b.value)) "% Missed"
FROM
(SELECT value FROM v$sysstat WHERE name = 'db block gets') a
, (SELECT value FROM v$sysstat WHERE name = 'consistent gets') b
, (SELECT value FROM v$sysstat WHERE name = 'physical reads') c
, (SELECT value FROM v$sysstat WHERE name = 'physical writes') d
/
PROMPT
PROMPT +-----------------------------------+
PROMPT | Data Dictionary Hit Ratio |
PROMPT +-----------------------------------+
PROMPT
SELECT
SUM(gets) "Data Dict. Gets"
, SUM(getmisses) "Data Dict. Cache Misses"
, ROUND((1 - (SUM(getmisses) / SUM(gets))) * 100) "Data Dict Cache Hit Ratio"
, ROUND(SUM(getmisses) * 100 / SUM(gets)) "% Missed"
FROM v$rowcache
/
PROMPT
PROMPT +-----------------------------------+
PROMPT | Library Cache Miss Ratio |
PROMPT +-----------------------------------+
PROMPT
SELECT
SUM(pins) "Executions"
, SUM(reloads) "Cache Misses"
, ROUND((1 - (SUM(reloads) / SUM(pins))) * 100) "Library Cache Hit Ratio"
, ROUND(SUM(reloads) * 100 / SUM(pins)) "% Missed"
FROM v$librarycache
/
SELECT
namespace "Namespace"
, TRUNC(gethitratio * 100) "Hit Ratio"
, TRUNC(pinhitratio * 100) "Pin Hit Ratio"
, reloads "Reloads"
, invalidations "Invalidations"
FROM v$librarycache
/
PROMPT
PROMPT +-----------------------------------+
PROMPT | Redo Log Buffer |
PROMPT +-----------------------------------+
PROMPT
SELECT SUBSTR(name, 1, 30) "Name", TO_CHAR(value, '999,999') "Valeur"
FROM v$sysstat
WHERE name = 'redo log space requests'
/
SELECT name "Name", TO_CHAR(bytes, '999,999,999,999') "Bytes"
FROM v$sgastat
WHERE name = 'free memory'
/
SELECT
TO_CHAR(SUM(executions), '999,999,999,999,999,999') "Total SQL depuis démarrage"
, TO_CHAR(SUM(users_executing), '999,999,999,999,999') "SQL en cours d'exécution"
FROM v$sqlarea
/
PROMPT
PROMPT +----------------------------------------------------------+
PROMPT | Si Miss Ratio ou Immd. Miss Ratio > 1 il y a contention |
PROMPT | sur ce latch (revoir le dimensionnement associé) |
PROMPT +----------------------------------------------------------+
PROMPT
SELECT
SUBSTR(ln.name, 1, 30) "Name"
, (misses / (gets + .001)) * 100 "Miss Ratio"
, (immediate_misses / (immediate_gets + .001)) * 100 "Immd. Miss Ratio"
FROM
v$latch l
, v$latchname ln
WHERE
l.latch# = ln.latch#
AND ( ((misses / (gets + .001)) * 100 > .1)
OR ((immediate_misses / (immediate_gets + .001)) * 100 > .1)
)
ORDER BY ln.name
/
PROMPT
PROMPT +-----------------------------------------------------------+
PROMPT | Si ces valeurs représentent plus de 1% du total des |
PROMPT | requêtes de données, des segments d'annulation |
PROMPT | supplémentaires (ou plus grands) sont nécessaires. |
PROMPT +-----------------------------------------------------------+
PROMPT
SELECT class "Class", count "Count"
FROM v$waitstat
WHERE class IN ('free list', 'system undo header', 'system undo block', 'undo header', 'undo block')
GROUP BY class, count
/
PROMPT
PROMPT +-----------------------------------+
PROMPT | Total des requêtes de données |
PROMPT +-----------------------------------+
PROMPT
SELECT TO_CHAR(SUM(value), '999,999,999,999,999') "Total Requests"
FROM v$sysstat
WHERE name IN ('db block gets', 'consistent gets')
/
Correction apportée par rapport au script d'origine : le second calcul de Buffer Hit Ratio utilisait des identifiants numériques figés (statistic# = 37, 38, 39, 40) pour retrouver les compteurs db block gets/consistent gets/physical reads/physical writes. Ces numéros ne sont pas stables d'une version d'Oracle à l'autre (les identifiants de v$sysstat sont réattribués au fil des versions) : la requête ci-dessus les remplace par une sélection sur name, robuste à toute version.
Interprétation
- Voir en détail Perf hit ratio system pour la lecture du Buffer Cache Hit Ratio.
- Data Dictionary Hit Ratio bas (< 95 %) : le cache de dictionnaire (
SHARED_POOL_SIZE) est sous-dimensionné pour le nombre d'objets de la base — impacte le parsing de toutes les requêtes. - Library Cache Hit Ratio bas ou
reloads/invalidationsélevés : requêtes non partagées (absence de bind variables), shared pool trop petit, ou invalidations fréquentes de plans suite à desDDL/statistiques recalculées en pleine activité. - Section latches : reprend le même principe que Perf lru latch contention et Perf redo log contention, mais généralisé à tous les latches de l'instance dépassant le seuil de 0,1 %.
- Attentes sur segments d'annulation (undo/rollback) : sur les versions récentes en mode Automatic Undo Management, ces classes de wait sont rares ; leur présence signale plutôt un tablespace UNDO sous-dimensionné ou une rétention insuffisante (
UNDO_RETENTION) qu'un problème de rollback segments manuels.
Voir aussi
- Perf hit ratio system — détail du hit ratio du buffer cache.
- Perf redo log contention — détail de la contention redo évoquée dans ce rapport.
- Perf sga usage — répartition détaillée de la mémoire SGA.
- Perf shared pool memory — focus sur le shared pool, en lien avec le Data Dictionary et Library Cache Hit Ratio de ce rapport.
- Perf lru latch contention — focus sur un latch spécifique du buffer cache.