Le L’utilisation de la mémoire par Oracle 10g
Les zones mémoire utilisées par Oracle 10g
Comme toute base de données multi-utilisateur, Oracle 10g a besoin de mémoire pour assurer diverses fonctions, à savoir : • mettre en mémoire, à la disposition de multiples utilisateurs, un maximum d’informations et de données provenant de la base ; • permettre aux programmes qui gèrent la base Oracle 10g (le processus et ses threads) de fonctionner en mémoire ; • assurer la transmission des données entre la base Oracle 10g et les threads des utilisateurs ; • assurer la liaison avec l’application qui utilise les données. En outre, la mémoire doit accueillir tous les processus nécessaires au fonctionnement de Windows. Les paramètres statiques et dynamiques Toutes les bases Oracle utilisent un fichier d’initialisation pour démarrer. Il peut être local (sous forme d’un fichier texte modifiable) ou avoir la forme d’un fichier binaire persistant. Ce point est détaillé au chapitre 23, Gestion de l’espace disque et des fichiers. Parmi les paramètres définis dans le fichier d’initialisation figurent tous ceux qui concernent l’allocation mémoire d’Oracle. Pour assurer une plus grande disponibilité, les valeurs d’allocation mémoire des instances sont maintenant presque toutes dynamiques, c’est-à-dire qu’elles peuvent être modifiées alors que la base fonctionne : alter system set paramètre=valeur scope= memory ; Les valeurs ainsi fixées peuvent avoir un impact sur la mémoire, être enregistrées dans le fichier d’initialisation persistant ou les deux actions à la fois : alter system set paramètre=valeur scope= memory ; alter system set paramètre=valeur scope= spfile ; alter system set paramètre=valeur scope= both ; S’il s’agit d’un fichier d’initialisation au format texte, il faut le modifier manuellement pour que la nouvelle valeur soit prise en compte au prochain démarrage. Le fichier d’initialisation persistant est géré directement par Oracle. Il est situé en C:\oracle\ product\10.1.0\db_1\database, mais c’est un fichier « caché ». Bien qu’il soit lisible, aucune intervention manuelle n’est permise pour éviter de le corrompre. Les paramètres d’initialisation dynamiques et ceux qui ne le sont pas sont consultables par la vue V$PARAMETER. La zone SGA (System Global Area) La SGA (System Global Area) représente la zone mémoire déterminante d’une instance, tant par sa taille que par son rôle. C’est elle qui assure le partage des données entre les utilisateurs Toute donnée lue ou modifiée transite par la SGA. Même si la totalité du fonctionnement propre à la SGA n’est pas entièrement divulguée par Oracle, il est important d’en comprendre les fonctions majeures, pour faire face à des problèmes de performance ou à un événement inattendu. Le contenu de la SGA est très structuré. Pour mieux en cerner les différentes zones, nous allons les présenter une par une : • le cache des blocs de données (buffer cache) ; • les buffers redo-log ; • la Shared Pool ; • la Java Pool ; • une zone de communication inter-processus ; • des espaces partagés si l’option Multi-Thread est activée.
Le cache des blocs de données
Cette zone comporte toutes les données en provenance de la base ou destinées à y être écrites (données lues par un SELECT ou modifiées par un UPDATE, INSERT, DELETE). Cette zone mémoire est d’une taille fixe, bien inférieure à la dimension de votre base de données. Il est nécessaire que des mécanismes libèrent de l’espace pour permettre à de nouveaux blocs de « monter » en mémoire. C’est le rôle du processus DBWR et du processus utilisateur. Le processus DBWR libère de l’espace en écrivant sur disque les blocs de données modifiés. Dans le cas où seuls des blocs de données non modifiés sont présents en mémoire, DBWR ne peut agir. C’est alors qu’intervient le processus utilisateur, créé automatiquement pour chaque connexion à une base Oracle 10g. Ce processus utilisateur obéit à un algorithme qui remplace les blocs non modifiés et inutilisés par des blocs provenant d’une lecture disque. Il lui incombe également de traiter les ordres SQL envoyés par le programme utilisateur et de lui retourner les données. Comme Oracle 10g n’échange pas des informations mais des blocs d’informations (d’une taille fixe, choisie lors de la création de la base), d’autres données présentes dans ce bloc accompagnent celle à laquelle on a accédé ou qu’on a modifié. Il s’agit là d’un facteur d’amélioration des performances, car ces informations complémentaires seront peut-être utilisées et, dans ce cas, il ne sera pas nécessaire de provoquer un accès disque pour les atteindre. Pour augmenter ou diminuer la taille du cache mémoire, il faut modifier le paramètre d’initialisation DB_CACHE_SIZE. Ce paramètre est dynamique. La valeur affectée est adaptée pour être un multiple du DB_BLOCK_SIZE. Nous vous conseillons de consulter le chapitre 28, Optimisation et performances, avant de modifier les paramètres d’initialisation d’une instance. =Briard.Livre Page 127 Mardi, 21. février 2006 1:46 13 Principes de fonctionnement d’Oracle 10g PARTIE II 128 Pour visualiser la taille de la SGA, vous pouvez lancer sous le compte administrateur SYSTEM la commande SQL : show sga ou select * from v$sga; NAME VALUE ——————– —————— Fixed Size 279600 bytes Variable Size 167772160 bytes Database Buffers 67108864 bytes Redo Buffers 532480 bytes ——————– —————— Total System Global Area 235693104 bytes Ici, le cache de données (Database Buffers) est d’environ 65 Mo pour une SGA de quelques 220 Mo. Cet ordre SQL permet de récupérer la taille des autres zones de la SGA, comme la taille allouée à l’environnement Java ou aux buffers redo-log. Ces valeurs peuvent être modifiées dynamiquement ou dans le fichier d’initialisation. La SGA est un élément clé des performances d’Oracle. Il faut absolument éviter qu’elle « sorte » de la mémoire vive et qu’elle soit paginée. Le paramètre d’initialisation LOCK_SGA permet « d’accrocher » la SGA en mémoire vive.
Les paramètres de base et les paramètres avancés
Oracle 10g apporte une simplification de son paramétrage. Il existe maintenant deux types de paramètres : • les paramètres de base ; • les paramètres avancés. Oracle indique que la plupart des bases de données nécessitent uniquement l’utilisation des paramètres de base pour fonctionner correctement. Ces paramètres sont : CLUSTER_DATABASE COMPATIBLE CONTROL_FILES DB_BLOCK_SIZE DB_CREATE_FILE_DEST DB_CREATE_ONLINE_LOG_DEST_n DB_DOMAIN DB_NAME Vous pouvez également utiliser l’ancien paramètre DB_BLOCK_BUFFER qui présente l’inconvénient de ne pas être dynamique. Il s’exprime en nombre de blocs mémoire et non en taille mémoire. En interrogeant le dictionnaire de données d’Oracle, d’autres ordres SQL permettent d’entrer plus précisément dans le détail des différentes zones mémoire. =Briard.Livre Page 128 Mardi, 21. février 2006 1:46 DB_RECOVERY_FILE_DEST DB_RECOVERY_FILE_DEST_SIZE DB_UNIQUE_NAME INSTANCE_NUMBER JOB_QUEUE_PROCESSES LOG_ARCHIVE_DEST_n LOG_ARCHIVE_DEST_STATE_n NLS_LANGAGE NLS_TERRITORY PGA_AGGREGATE_TARGET PROCESSES REMOTE_LISTENER REMOTE_LOGIN_PASSWORDFILE ROLLBACK_SEGMENTS SESSIONS SGA_TARGET SHARED_SERVERS START_TRANSFORMATION_ENABLED UNDO_MANAGEMENT UNDO_TABLESPACE Consultez l’index de cet ouvrage pour identifier la page où sont abordés ces différents paramètres. Pour les autres, reportez-vous à la documentation Oracle. Le tuning automatique de la SGA Oracle 10g apporte une nouveauté : l’Automatic Shared Memory Management (ASMM) et son processus Memory Manager (MMAN). Il laisse Oracle répartir automatiquement un espace mémoire disponible, le sga_target entre le buffer de données, la Shared Pool, la Large Pool et la Java Pool. C’est une fonction très utile pour des bases dont l’activité variable peut charger temporairement l’une de ces zones mémoire. Ce paramètre est situé dans le fichier init.ora. Sa valeur par défaut est sga_target = 0 qui inhibe le fonctionnement de l’ASMM