Bonjour à tous,
contexte :
Depuis maintenant 2 ans (!!), nous souhaitons migrer notre base de production actuellement en 9i vers une base en 11g.
Le problème est que nous rencontrons des baisses de performances en ÉCRITURE en 11G par rapport à la version 9i.
Pour le côté "challenge", je précise que nos 2 anciens DBA, nos prestataires et même ORACLE ont été sollicités et n'ont pas résolus de manière satisfaisante notre problème.
Me concernant je suis analyste développeur et je viens très récemment d'être promu au poste de DBA. J'en suis content, j'ai eu des formations, mais vous comprendrez aisément pourquoi je viens rechercher sur ce forum des avis de DBA expérimentés qui pourront m'aider !
Notre environnement technique :
Base Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
installée sur la machine suivante :
RHEL 6.4 (Santiago)
2 x CPU Intel Xeon 2,4Ghz Quadcore
36 Go
il s'agit d'un serveur PHYSIQUE.
Détail des problèmes :
Problème n° 1 :
Nous avons un programme d'une société externe, extrêmement mal développé, qui fait des insertions de masse avec des COMMIT entre chaque instructions INSERT.
les temps en 11g sont multipliés par 3 voir 4 par rapport à la 9i !
Nous n'avons pas la main sur le code de ce logiciel et l'éditeur refuse d'y toucher.
En 2 ans, nous avons vu plusieurs DBA et sollicité le support ORACLE (CR toujours en cours...).
Verdict : trop d’événement "log file sync"
Les réponses reçues par nos différents interlocuteurs ont systématiquement consisté à proposer le changement de paramètres ORACLE (niveau SYSTEM ou SESSION) pour améliorer les résultats :
- Soit mettre COMMIT_LOGGING à BATCH afin de s'affranchir du trop grand nombre de commit réalisé par le programme au niveau de la base de données.
OU
- Soit mettre COMMIT_WAIT à NOWAIT afin de ne pas attendre l'information de retour de l'écriture du COMMIT dans le logfile current (traitement asynchrone).
Remarque: par défaut ces paramètres sont "vides" mais j'ai lu sur INTERNET qu'ORACLE met en interne COMMIT_LOGGING à IMMEDIATE et COMMIT_WAIT à WAIT.
Dans les 2 cas, nous avons effectivement constaté des améliorations (surtout la 2ème proposition).
Ce qui nous interpelle, nous pose problème et nous bloque dans notre migration c'est qu'en passant dans une version supérieure de base de données on soit obligé de "jouer" avec certains paramètres, ce qui ressemble plus à une solution de contournement qu'à une vraie solution...
Le pire et le plus grave est qu'aucun de ces partenaires n'acceptent en plus de nous certifier officiellement que leur solution est la bonne (même pas ORACLE) !
Cela n'étant ni encourageant ni rassurant, nous hésitons donc à migrer...
Qu'en pensez vous ?
Trouvez vous normale (dans le sens "acceptable") les propositions faites par ORACLE et nos prestataires ?
Avez vous rencontré une situation comparable ? Si oui qu'avez vous fait ?
Quel paramétrage avez-vous mis sur vos bases ?
que feriez-vous à ma place ?
Sinon, le problème est très simple à reproduire. Il suffit de créer une table et de faire 200.000 INSERT avec 1 COMMIT systématique. Exemple :
INSERT INTO ESSAI VALUES (1,'bbbb','cccc','dddd');
COMMIT;
INSERT INTO ESSAI VALUES (2,'bbbb','cccc','dddd');
COMMIT;
INSERT INTO ESSAI VALUES (3,'bbbb','cccc','dddd');
ECT.....
Ci dessous le rapport ASH lié à ce problème :
rapportASH.html
Problème n° 2 :
Nous obtenons des temps très décevants en 11g sur un traitement de test effectuant 200.000 INSERTS dans une table avec un COMMIT à la fin en comparaison du même traitement exécuté sur un petit serveur hébergeant une petite base 9i...
voici les résultats :
Future base ORACLE 11g de production : 2 mins 26 secs
Petite base de test en 9i : 1 mins 57 secs (!?)
je précise que :
- pour ce test comparatif, sur la base 11g les paramètres COMMIT_LOGGING et COMMIT_WAIT ont étés remis avec leur valeur par défaut.
- un DBA a récemment effectué un AUDIT de notre base 11g et nous a confirmé qu'elle était bien paramétrée.
- voici les caractéristique du petit serveur de la base 9i :
RHEL 4 (Nahant Update 7)
2 x CPU Intel Xeon 2,4Ghz Quadcore
16 Go
il s'agit d'un serveur PHYSIQUE.
Là, pour le coup, moi DBA débutant, j'ai vraiment besoin de l'aide de DBA séniors pour comprendre comment est-ce possible qu'un même traitement lancé sur une base 11g installé sur un serveur puissant soit moins rapide qu'une base d'une génération antérieure installé sur un serveur de tests moins puissant ?
Avez vous déjà constaté ce phénomène ?
Auriez-vous une explication ?
Si je relance le même traitement sur la base 11G avec le paramètre COMMIT_WAIT =NOWAIT les temps sont de 2 mins et 20 secs (aucune amélioration).
Ce qui semble indiqué que le fait d'utiliser ce paramètre comme préconisé par nos différents prestataire ne servira que pour notre premier problème...![]()
Sinon pour finir, voici les paramètres ORACLE de notre base 11G :
PARAMS_11G.xls
Voilà...
Déjà merci d'avoir pris le temps de me lire...
Maintenant j’espère vraiment tomber sur des experts qui pourront m'aider à faire progresser la situation. J'ai pas envi de rester en 9i toute ma vie!!!
@+
Richard
Partager