Oracle et Windows : profiter de toute sa mémoire

fadace

Le processus Oracle tournant sur une machine Windows doit souvent pouvoir utiliser plus de 1Go de RAM. Ce n'est généralement pas le cas. ♪

- Titre : Oracle et Windows : profiter de toute sa mémoire

- Auteur : fadace

- Parution : 8 avril 2010

- Licence : Copyright ® 2010 fadace. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Analyse

- III. Correction

- IV. Validation

I - Introduction

Contrairement à un environnement Unix/Linux, il n'y a qu'un processus Oracle sous Windows.

Ce processus Oracle.exe hébergé par une machine Windows 32 bits devrait pouvoir être en mesure d'utiliser plus de 2Go de RAM.

Comme nous allons le voir, par défaut, cela n'est pas le cas.

Cette problématique explique que, dans certains cas, l'augmentation de la mémoire SGA se fait au détriment de la PGA, même si l'on détecte de la mémoire disponible en suffisance sur le système

II - Analyse

Pour mon test, j'utilise une machine avec 3Go de RAM physique.

Via TaskManager, je crois comprendre que Windows a bien détecté cette mémoire et qu'il est en mesure de l'utiliser

Je paramètre donc ma mémoire Oracle de la manière suivante :

Le processus Oracle, oracle.exe, devrait donc être en mesure d'allouer 1600 Mo+500 Mo = 2.1Go de RAM.

Si j'essaie de démarrer l'instance avec une SGA_MAX_SIZE à 2.0Go, j'obtiens un superbe :

SQL> shutdown immediate
Base de données fermée.
Base de données démontée.
Instance ORACLE arrêtée.
SQL> startup
ORA-27102: out of memory
OSD-00022: Message 22 not found;  product=RDBMS; facility=SOSD

O/S-Error: (OS 8) Not enough storage is available to process this command.

CQFD : La preuve est donc faire qu'il semble impossible de démarrer un processus de plus de 1.9o de RAM sur Windows 2003 Server avec cette configuration, bien que plus de 1.7Go de mémoire RAM soit encore disponible sur la machine, si l'on se base sur le Task Manager de Windows.

Le fait d'augmenter la SGA dans les limites de la taille maximale de la mémoire PGA influence négativement la PGA puisque celle-ci se retrouve saucissonnée entre l'utilisation effective de la SGA et cette fameuse limite à 1.9Go par processus de Windows. Vous pouvez donc vous retrouver à générer des erreurs ORA-04030/ORA-12500 en cascade lors d'une augmentation de RAM suivie d'une augmentation proportionnelle de SGA.

III - Correction

Afin de pallier ce problème, il « suffit » de configurer Windows afin qu'il accepte d'attribuer plus de mémoire à un processus, et qu'il pagine différemment.

Ceci se fait via l'ajout des paramètres /3GB et /PAE dans le fichier boot.ini à la racine du disque. Cette action nécessite, bien entendu, un redémarrage du serveur Windows.

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard" /fastdetect /NoExecute=OptOut /3GB /PAE

IV - Validation

Après reboot, il est aisé, via le Task Manager, de détecter que le processus Oracle.exe a dépassé la barre fatidique des 1.9Go d'allocation de mémoire… et que vos erreurs ORA-04030 et ORA-12500 disparaissent du même coup.