it-swarm-fr.com

Plusieurs instances Oracle - Est-ce une bonne pratique?

L'un de mes clients a déployé la DB de notre produit dans une machine Solaris qui a déjà 3 cas d'Oracle. Donc, en ce moment, il y a 4 instances d'oracle exécutant sur la même machine. Et maintenant, nous vivons des problèmes de performance.

Je n'ai pas accès à d'autres instances ni à la machine, et tous les outils que j'ai sont alert.log, AWR et AddM. Je sais que quelque chose est lié à plusieurs instances, mais je ne peux pas le prouver.

Donc, ma question est que vous avez connu une situation similaire? Comment devrais-je m'occuper? Comment puis-je identifier la cause des problèmes de performance liés à plusieurs instances?

9
Isaac A. Nugroho

ISAAC, de préférence, nous exécutons une instance sur un serveur et implémentons les différentes applications en tant que schémas et services dans cette donnée de données unique. Si le serveur a suffisamment de mémoire, il n'y aura pas de problème si les applications se comportent tous comme de bons citoyens Oracle. Dès qu'il y a une application qui n'utilise pas les variables liées, il y a une douleur croissante sur l'hôte. Les mêmes pour les applications qui continuent à créer de nouvelles connexions toutes les quelques secondes, au lieu de réutiliser les connexions existantes. Des choses comme la commission automobile ne contribuent également pas à améliorer la situation. Quel est le comportement normal de votre application? Est-ce que ça fait de grandes mises à jour? Quand fait-il un commit? Combien de redo génère/heure? Votre application utilise-t-elle des variables de liaison? Dans de nombreux cas, l'emplacement des fichiers Redoid en ligne est essentiel. Si l'application génère beaucoup de rétablissement (ou en concurrence avec une autre application qui le fait), le déconnexion va ralentir et provoquer une dégradation de la performance importante car la session attend que l'écriture de logfile à compléter. Donnez votre client une disposition de disque où les Redo sont sur des disques dédiés RAID-10 et voyez combien cela aide. Découvrez également la situation de l'allocation de mémoire. Il pourrait être nécessaire de la redistribution équitable de la mémoire disponible.

J'espère que ça aide

8
ik_zelf

Exécuter plusieurs instances sur le même serveur est possible et dans certains cas nécessaires. L'oratab est conçu spécifiquement pour gérer la gestion de plusieurs instances. Dans les cas où vous avez plusieurs applications indépendantes, il peut être préférable d'avoir une instance pour chaque application.

Avoir suffisamment de mémoire est critique. Oracle construit la SGA dans la mémoire partagée. Si vous n'avez pas suffisamment de mémoire, le SGA ou les processus commencera à échanger et à sortir. Ceci est connu comme battage et entraîne une pénalité de performance significative.

Il peut être possible d'accorder les instances à courir avec une SGA plus petite. Oracle fournit des outils pour aider à régler la taille SGA. Si l'une des instances ait une SGA excessivement importante, elle pénalisera toutes les instances.

Une autre utilisation pour la mémoire importante est l'espace tampon. Cela agit en tant que cache secondaire et peut éliminer les E/S de lecture significative.

Running sar (en supposant que des bases UNIX O/S) puissent vous donner de bons diagnostics sur l'endroit où le problème est. Les problèmes probables sont soit un échange de la saturation d'E/S sur disque. Ajout RAM== sera probablement adressé à ces problèmes.

La saturation d'E/S de disque peut également être traitée en déplaçant des espaces de table à d'autres disques. Je configure généralement Oracle afin que les E/S soient distribuées dans autant de disques que possible.

EDIT: Ce sont quelques cas qui peuvent nécessiter des instances séparées.

  • Il est toujours nécessaire que vous exécutez différentes versions d'Oracle sur le même serveur. Les applications ne sont pas toujours certifiées ou capables de travailler avec la dernière version.
  • Vous voudrez peut-être que des instances pouvant être automatiquement roulées à un point à temps. (Bien que je le décourage, je l'ai utilisé pour un environnement de test automatisé.)
  • Si vous avez une référence de schéma codée dur dans les applications, vous aurez peut-être besoin de différentes instances pour gérer les collisions d'espace de noms.
  • Les exigences de sécurité peuvent être plus faciles à traiter d'utiliser des instances distinctes. Il peut être approprié d'utiliser différents serveurs dans ce cas.
  • Exécution de différentes versions de la même base de données (développement, test, acceptation des utilisateurs, formation et production) sur le même serveur est plus sûre avec des instances séparées. Je ne dirigerais pas tous ces environnements sur le même serveur, mais exécutez souvent deux ou plus sur le même serveur.
2
BillThor

La ressource la plus critique est la RAM.

Chaque instance Oracle alloue quelque chose RAM pour elle-même, lorsqu'il vient de commencer et non sous charge.

Nous exécutons 10 g avec 10 et 11g avec 8 cas, mais ce sont des serveurs de développement. Après le redémarrage du système d'exploitation, certains des services Oracle ne démarrent pas automatiquement et doivent être démarrés manuellement: ORADIM -STARTUP -SID XXX.

Nous commençons tout juste à utiliser la gestion automatique de la mémoire, mais la situation est différente de SQL Server, où vous pouvez ajouter des bases de données autant que l'espace disque donne.

I votre cas, avec plus d'instances sur une machine le [~ # ~ # ~] SGA [~ # ~ ~] Pour chaque instance devient plus petit, le SQL moins précompilé peut être mis en cache et la machine doit faire plus de compilation SQL , qui réduit la performance.

Ajouter RAM peut vous aider dans votre situation.

1
bernd_k