Sur Oracle Exadata (11gR2), nous avons une base de données relativement solide.
- cpu_count a 24 ans
- parallel_server_instances est 2
- parallel_threads_per_cpu vaut 2
Nous avons remarqué, en observant dans Oracle Enterprise Manager (OEM), que les performances étaient terribles en raison des requêtes exécutées en série. Pour résoudre ce problème, toutes les tables, vues matérialisées et index ont été modifiés pour tirer parti du parallélisme. par exemple:
ALTER TABLE SOME_TABLE PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT);
Le système a été modifié pour activer la parallélisation:
ALTER SYSTEM SET PARALLEL_DEGREE_POLICY = 'AUTO';
Cela a entraîné de meilleures performances, mais nous avons parfois observé dans OEM qu'une seule requête bloquait un DOP de 96 (toutes les ressources disponibles). Cela a entraîné la rétrogradation des requêtes suivantes à un DOP de 1 (pas de parallélisation). Il en résulte des performances médiocres jusqu'à la fin de la requête de monopolage.
Pour résoudre ce problème, nous avons essayé de limiter le DOP disponible à toute requête avec:
ALTER SYSTEM SET PARALLEL_DEGREE_LIMIT = 24;
Cela n'a eu aucun effet. Nous observons fréquemment des requêtes qui utiliseront plus que la limite (généralement 48 ou 96, mais aucun modèle réel).
Comment empêcher une seule requête de monopoliser toutes les ressources disponibles?
la source