CPU élevé
Le CPU du serveur est saturé. Vérifiez d'abord que c'est bien la base qui le consomme, puis suivez les branches jusqu'à la cause racine : requêtes mal planifiées, régression de plan, concurrence excessive ou processus hors base.
La base consomme-t-elle réellement le CPU ?
Vérifiez côté système d'exploitation quel processus consomme le CPU. L'essentiel de la charge est-il dans les processus de la base, ou dans un processus voisin (sauvegarde, antivirus, autre application) ? Cela divise l'analyse en deux.
-- OS side: top -o %CPU (or: top -c)
-- DB-side verification:
SELECT ROUND(value,1) AS host_cpu_util_pct FROM v$sysmetric WHERE metric_name='Host CPU Utilization (%)' AND rownum=1;- Oui, les processus de la base consomment le CPU
- Non, un processus voisin / un job de sauvegarde le consomme
Comment la charge est-elle apparue ?
Si la base consomme le CPU, identifiez le schéma : quelques requêtes lourdes dominent-elles, le problème a-t-il commencé soudainement après un changement, ou y a-t-il une forte concurrence/contention de connexions ?
- Quelques requêtes lourdes consomment le CPU
- Apparu soudainement ; il y a eu un déploiement / changement de paramètre récent
- Nombreuses connexions / contention de concurrence
Trouver les requêtes qui consomment le plus de CPU
Récupérez les requêtes en tête par consommation CPU totale. Puis déterminez si chacune est lourde par appel (mauvais plan) ou peu coûteuse par appel mais appelée très fréquemment.
SELECT sql_id, executions, ROUND(cpu_time/1e6,1) AS cpu_sec, ROUND(cpu_time/GREATEST(executions,1)/1000,2) AS cpu_ms_per_exec, sql_text
FROM v$sql ORDER BY cpu_time DESC FETCH FIRST 10 ROWS ONLY;- Lourde par appel ; mauvais plan / full scan
- Peu coûteuse par appel mais appelée très fréquemment
Cause racine : des requêtes mal planifiées consomment le CPU
Quelques requêtes consomment un CPU excessif par appel à cause de full scans ou d'un mauvais ordre de jointure. Corriger leurs plans est la solution principale.
Cause racine : fréquence d'appel excessive
Les requêtes sont individuellement peu coûteuses mais appelées des milliers de fois par seconde ; c'est de là que vient le coût CPU total. Généralement un schéma N+1 ou un chemin critique sans cache.
Cause racine : régression de plan / statistiques obsolètes
Le système était normal hier ; le CPU a grimpé après un déploiement, un changement de paramètre ou un chargement de données. L'optimiseur a peut-être basculé vers un plan moins bon.
Cause racine : forte concurrence / contention de connexions
Les requêtes individuelles sont acceptables, mais trop de sessions s'exécutent en même temps ; plus de sessions actives que de cœurs CPU provoque des changements de contexte et une contention latch/spin.
Cause racine : un processus hors base consomme le CPU
Ce n'est pas la base mais un processus voisin qui consomme le CPU : un job de sauvegarde/compression, un scan antivirus, un expéditeur de logs ou une autre application sur la même machine.