Parallele Serversätze : PARALLEL_DEGREE_LIMIT begrenzt den Grad der Parallelität. Wenn Ihre Abfrage jedoch sortiert oder gruppiert, kann die Anzahl der parallelen Prozesse doppelt so hoch sein (zwei Serversätze, um die Parallelität zwischen Prozessen zu ermöglichen). Dies erklärt, warum Sie 48 parallele Prozesse auch bei einem Limit von 24 sehen. Dies geschieht auch, wenn Sie den Ressourcenmanager verwenden, um den DOP zu begrenzen.
Parallele Hinweise: PARALLEL_DEGREE_LIMIT gilt nur für Anweisungen, die den automatischen Parallelitätsgrad verwenden. Alle Anweisungen, die einen fest codierten Grad oder sogar einen parallelen Hinweis auf Objektebene verwenden, ignorieren das Limit. Wenn Sie diese Hinweise haben, könnte dies erklären, warum Sie 96 manchmal sehen.
E / A kalibrieren: Möglicherweise wird kein automatischer DOP verwendet, und daher wird der Grenzwert nicht eingehalten, da die E / A nicht kalibriert wurde . Diese Abfrage zeigt an, ob das E / A kalibriert wurde:
select * from V$IO_CALIBRATION_STATUS;
Ich habe gesehen, dass dies Probleme verursacht, aber mein aktuelles System ist nicht kalibriert und der automatische DOP scheint gut zu funktionieren. Ob dies wirklich ein Problem ist, können Sie im Abschnitt Notizen des Erklärungsplans erkennen. Wenn du so etwas - automatic DOP: Computed Degree of Parallelism is 2
siehst, geht es dir gut, aber du willst es nicht sehen automatic DOP: skipped because of IO calibrate statistics are missing
.
PARALLEL_MAX_SERVERS erhöhen: Anstatt sich Sorgen zu machen, dass die parallelen Server ausgehen, würde ich empfehlen, PARALLEL_MAX_SERVERS erheblich zu erhöhen. Sie sollten mindestens versuchen, zum Standardwert PARALLEL_THREADS_PER_CPU x CPU_COUNT x concurrent_parallel_users x 5 zwischen 240 und 960 zurückzukehren, abhängig von Ihren Speichereinstellungen.
Diese hohen Zahlen klingen für viele Datenbankadministratoren lächerlich, machen aber aus folgenden Gründen sehr viel Sinn:
- Oracle-Parallelserver sind leichter als die meisten Leute annehmen. (Und kaum jemand testet es jemals, sie finden nur eine Situation, in der ein großer DOP ein Problem verursacht, und gehen davon aus, dass ein hoher DOP immer schlecht ist.)
- Es ist üblich, eine Ad-hoc-Abfrage in einem GUI-Tool auszuführen, das nur die ersten 50 Zeilen abruft, aber immer noch Dutzende paralleler Server verwendet. Diese Abfragen verbrauchen KEINE signifikanten Ressourcen, es sei denn, PARALLEL_MAX_SERVERS ist zu niedrig. Dann werden die Leute angeschrien, weil sie absolut vernünftige Abfragen ausführen, was zu hässlichen Situationen führen kann.
- Ein sehr großer DOP für eine einzelne Abfrage ist nicht immer schlecht. Jeder geht davon aus, dass der Overhead zu hoch wird und die Leistung erheblich sinkt, wenn Sie den DOP weiter erhöhen. Aber auf vielen Systemen habe ich festgestellt, dass selbst ein lächerlich hoher DOP zu einer besseren Leistung führt, obwohl die Renditen definitiv sinken und es gegenüber anderen Sitzungen sehr unfair sein kann. Aber raten Sie nicht nur, testen Sie es; Nehmen Sie eine Abfrage und führen Sie sie mit allen Arten von DOPs aus, bis zu 1000. Sie werden überrascht sein.
- Ja, zu viel Parallelität kann schlecht sein. Aber was ist schlimmer für das System, wenn es etwas mehr als die optimale Anzahl von Sitzungen hat oder eine Abfrage auf seriell erzwingt und im Grunde genommen einen wichtigen Job beendet? Sie sollten das System überwachen, bevor Sie beliebige Grenzwerte einführen.