Vous êtes sur la page 1sur 8

Introduction à l'exécution parallèle

L'exécution parallèle permet l'application de plusieurs ressources CPU et E/S à


l'exécution d'une seule opération de base de données. Il réduit considérablement
le temps de réponse pour les opérations gourmandes en données sur de grandes
bases de données généralement associées à un système d'aide à la décision
(DSS) et à des entrepôts de données. Vous pouvez également mettre en œuvre
une exécution parallèle sur un système de traitement des transactions en ligne
(OLTP) pour le traitement par lots ou les opérations de maintenance de schéma
telles que la création d'index. L'exécution parallèle est parfois appelée
parallélisme.

Le parallélisme est l'idée de décomposer une tâche de sorte qu'au lieu qu'un
processus fasse tout le travail dans une requête, plusieurs processus fassent une
partie du travail en même temps. Un exemple de ceci est lorsque quatre
processus se combinent pour calculer les ventes totales pour une année, chaque
processus gère un trimestre de l'année au lieu d'un seul processus traitant les
quatre trimestres par lui-même. L'amélioration des performances peut être assez
importante. L'exécution parallèle améliore le traitement pour :

 Requêtes nécessitant des analyses de table volumineuses, des jointures ou


des analyses d'index partitionné
 Création de grands index
 Création de grandes tables (y compris les vues matérialisées)
 Insertions, mises à jour, fusions et suppressions en masse

Si les processus de serveur parallèle nécessaires ne sont pas disponibles pour


une exécution parallèle, une instruction SQL est mise en file d'attente lorsque la
règle de degré parallèle est définie sur automatique. Une fois les ressources
nécessaires disponibles, l'instruction SQL est retirée de la file d'attente et
autorisée à s'exécuter. leLa file d'attente d'instructions parallèles fonctionne par
défaut comme une file d'attente premier entré, premier sorti. Si la requête devant
la file d'attente ne peut pas être planifiée, aucune des requêtes de la file d'attente
ne peut être planifiée même si des ressources sont disponibles dans le système
pour garantir que la requête en tête de la file d'attente dispose des ressources
adéquates. Cependant, si vous configurez et mettez en place un plan de
ressources, vous pouvez contrôler l'ordre dans lequel les instructions parallèles
sont retirées de la file d'attente et le nombre de serveurs parallèles utilisés par
chaque charge de travail ou groupe de consommateurs. Pour plus d'informations,
reportez-vous à " About Managing Parallel Statement Queuing with Oracle
Database Resource Manager " .

Cette section contient les sujets suivants :


 Quand mettre en œuvre l'exécution parallèle
 Quand ne pas implémenter l'exécution parallèle
 Exigences matérielles fondamentales
Quand mettre en œuvre l'exécution parallèle
L'exécution parallèle profite aux systèmes présentant toutes les caractéristiques
suivantes :

 Smultiprocesseurs symétriques (SMP), clusters ou systèmes massivement


parallèles

 Suffisant E/S bande passante

 Processeurs sous-utilisés ou utilisés par intermittence (par exemple, les


systèmes où L'utilisation du processeur est généralement inférieure à
30 %)

 Mémoire suffisante pour prendre en charge des processus supplémentaires


gourmands en mémoire, tels que le tri, le hachage et les tampons d'E/S

Si votre système ne possède pas l'une de ces caractéristiques, l'exécution


parallèle peut ne pas améliorer considérablement les performances. En fait,
l'exécution parallèle peut réduire les performances du système sur des systèmes
surutilisés ou des systèmes avec une faible bande passante d'E/S.

Les avantages de l'exécution parallèle peuvent être observés dans les


environnements DSS et d'entrepôt de données. Les systèmes OLTP peuvent
également bénéficier d'une exécution parallèle lors du traitement par lots et lors
des opérations de maintenance de schéma telles que la création d'index. Le DML
simple moyen ou les SELECT instructions qui caractérisent les applications
OLTP n'auraient aucun avantage à être exécutés en parallèle.

Quand ne pas implémenter l'exécution parallèle


L'exécution parallèle n'est généralement pas utile pour :

 Environnements dans lesquels la requête ou la transaction typique est très


courte (quelques secondes ou moins).

Cela inclut la plupart des systèmes de transaction en ligne. L'exécution


parallèle n'est pas utile dans ces environnements car il y a un coût associé
à la coordination des serveurs d'exécution parallèles ; pour les transactions
courtes, le coût de cette coordination peut l'emporter sur les avantages du
parallélisme.

 Environnements dans lesquels les ressources CPU, mémoire ou E/S sont


fortement utilisées.

L'exécution parallèle est conçue pour exploiter les ressources matérielles


supplémentaires disponibles ; si aucune de ces ressources n'est disponible,
l'exécution parallèle n'apporte aucun avantage et peut même nuire aux
performances.

Exigences matérielles fondamentales


L'exécution parallèle est conçue pour utiliser efficacement plusieurs processeurs
et disques pour répondre rapidement aux requêtes. Il est très gourmand en E/S
par nature. Pour obtenir des performances optimales, chaque composant de la
configuration matérielle doit être dimensionné pour maintenir le même niveau
de débit : des processeurs et des adaptateurs de bus hôte (HBA) dans les nœuds
de calcul, aux commutateurs et au sous-système d'E/S , y compris les contrôleurs
de stockage et les disques physiques. Si le système est un système Oracle Real
Application Clusters (Oracle RAC), l'interconnexion doit également être
dimensionnée de manière appropriée. Le maillon le plus faible va limiter les
performances et l'évolutivité des opérations dans une configuration.

Il est recommandé de mesurer les performances d'E/S maximales qu'une


configuration matérielle peut atteindre sans Oracle Database. Vous pouvez
utiliser cette mesure comme référence pour les futures évaluations des
performances du système. N'oubliez pas qu'il n'est pas possible pour l'exécution
parallèle d'obtenir un meilleur débit d'E/S que le matériel sous-jacent ne peut
supporter. Oracle Database fournit un outil d'étalonnage gratuit appelé Orion,
conçu pour mesurer les performances d'E/S d'un système en simulant les charges
de travail d'E/S Oracle. Une exécution parallèle effectue généralement de
grandes E/S aléatoires.

Lors d'une création de table basée sur une sous-requête ( CREATE ... AS
SELECT), les deux parties de l'ordre CREATE et SELECT peuvent être traités
en parallèle.
La partie CREATE peut être parallélisée si l'une des conditions suivante est
vérifiée :

 La clause PARALLEL est incluse dans l'ordre CREATE TABLE


 Vous avez préalablement spécifié l'instruction ALTER SESSION FORCE
PARALLEL DLL

La partie SELECT peut être parallélisée si toutes les conditions suivantes sont
vérifiées :

 L’ordre SQL contient un indicateur (hint) PARALLEL ou


PARALLEL_INDEX ou la partie CREATE contient une clause
PARALLEL ou la (les) table(s) de référence ont été déclarées avec la
clause PARALLEL
 Au moins une table spécifiée dans la partie SELECT requiert soit un full
table scan, soit un index range scan distribué sur plusieurs partitions

Si vous parallélisez la création d'une table, tous les ordres de manipulation


suivants seront également parallélisés si cela est possible.

exemple
CREATE TABLE hr.emp2
PARALLEL
AS SELECT * FROM hr.emp;

Degrée de parallélisme (DOP) :


Create table parallel……….
Le degré de parallélisme correspond au nombre de process esclaves utilisé pour
une instruction en mode parallèle.
Par exemple la commande ci-dessous crée une table TOTO en mode parallèle
avec un DOP de 8. Cela veut dire que 8 process « slaves » (donc 8 CPU) seront
utilisées pour les requêtes effectuées sur cette table :

CREATE TABLE TOTO (c1 NUMBER, c2 VARCHAR2(100)) PARALLEL


8;

Vous pouvez vérifier qu’une table est définie en mode parallèle ou pas en
interrogeant la colonne DEGREE de la vue USER_TABLES :

SQL> select table_name, degree from user_tables where table_name='TOTO';

TABLE_NAME DEGREE
------------------------------ ----------
TOTO 8

Si la clause PARALLEL est utilisée sans spécifier le degré de parallélisme, le


DOP utilisée sera alors le résultat de la multiplication suivante :

CPU_COUNT * PARALLEL_THREAD_PER_CPU
CPU_COUNT est le paramètre d’initialisation de la base indiquant le nombre de
CPU disponibles et PARALLEL_THREAD_PER_CPU est le paramètre
indiquant le nombre de process « slaves » possibles pour un CPU.

Lorsque vous utilisez le parallélisme je recommande de ne pas définir la table en


mode parallèle mais plutôt d’utiliser le hint PARALLEL pour les requêtes que
vous voulez vraiment paralléliser.

Chaque type d’instructions SQL parallélisable fera l’objet d’un post


prochainement :
- Les SELECT en mode parallèle (Parallel Query)
- Les DML en mode parallèle (PDML ou Parallel DML)
- Les DDL en mode parallèle (PDDL ou Parallel DDL)
Optimiser les performances en créant des index en
parallèle
Plusieurs processus peuvent fonctionner simultanément pour créer un index. En
divisant le travail nécessaire pour créer un index entre plusieurs processus
serveur, Oracle Database peut créer l'index plus rapidement que si un seul
processus serveur créait l'index en série.

Parallèle La création d'index fonctionne à peu près de la même manière qu'un


parcours de table avec une ORDER BY clause. La table est échantillonnée au
hasard et un ensemble de clés d'index est trouvé qui divise également l'index en
le même nombre de pièces que le DOP. Un premier ensemble de processus
d'interrogation parcourt la table, extrait les paires clé-ligne et envoie chaque
paire à un processus dans un second ensemble de processus d'interrogation sur la
base d'une clé. Chaque processus du deuxième ensemble trie les clés et construit
un index de la manière habituelle. Une fois que toutes les pièces d'index sont
construites, le coordinateur d'exécution parallèle concatène simplement les
pièces (qui sont ordonnées) pour former l'index final.

Local parallèle la création d'index utilise un seul ensemble de serveurs. Chaque


processus serveur de l'ensemble se voit attribuer une partition de table à analyser
et pour laquelle créer une partition d'index. Étant donné que la moitié des
processus serveur sont utilisés pour un DOP donné, la création d'index local
parallèle peut être exécutée avec un DOP plus élevé. Cependant, le DOP est
limité à un nombre inférieur ou égal au nombre de partitions d'index que vous
souhaitez créer. Pour éviter cette limitation, vous pouvez utiliser
le DBMS_PCLXUTIL package.

Vous pouvez éventuellement spécifier qu'aucune journalisation de


rétablissement et d'annulation ne doit se produire lors de la création de
l'index. Cela peut améliorer considérablement les performances, mais rend
temporairement l'index irrécupérable. La récupération est restaurée après la
sauvegarde du nouvel index. Si votre application peut tolérer une fenêtre où la
récupération de l'index nécessite sa recréation, alors vous devriez envisager
d'utiliser la NOLOGGING clause.

La PARALLEL clause de l'CREATE INDEX instruction est le seul moyen de


spécifier le DOP pour la création de l'index. Si le DOP n'est pas spécifié dans la
clause parallèle de l'CREATE INDEX instruction, le nombre de CPU est utilisé
comme DOP. S'il n'y a pas de PARALLEL clause, la création d'index se fait en
série.

Lors de la création d'un index en parallèle, la STORAGE clause fait référence au


stockage de chacun des sous-index créés par les processus du serveur de
requêtes. Par conséquent, un index créé avec une INITIAL valeur de 5 Mo et un
DOP de 12 consomme au moins 60 Mo de stockage lors de la création de
l'index, car chaque processus démarre avec une étendue de 5 Mo. Lorsque le
processus de coordinateur de requête combine les sous-index triés, certaines
extensions peuvent être rognées et l'index résultant peut-être inférieur aux 60
Mo demandés.

Lorsque vous ajoutez ou activez une contrainte UNIQUE ou PRIMARY KEY


sur une table, vous ne pouvez pas créer automatiquement l'index requis en
parallèle. Au lieu de cela, créez manuellement un index sur les colonnes
souhaitées, à l'aide de l'CREATE INDEX instruction et d'une PARALLEL
clause appropriée, puis ajoutez ou activez la contrainte. Oracle Database utilise
ensuite l'index existant lors de l'activation ou de l'ajout de la contrainte.

Plusieurs contraintes sur la même table peuvent être activées simultanément et


en parallèle si toutes les contraintes sont dans l'ENABLE NOVALIDATE
état. Dans l'exemple suivant, l'ALTER TABLE ENABLE CONSTRAINT
instruction effectue le balayage de table qui vérifie la contrainte en parallèle :

CREATE TABLE a (a1 NUMBER CONSTRAINT ach CHECK (a1 > 0)


ENABLE NOVALIDATE) PARALLEL;
INSERT INTO a values (1);

COMMIT;

ALTER TABLE a ENABLE CONSTRAINT ach;

Vous aimerez peut-être aussi