Plusieurs instances Oracle - est-ce une bonne pratique?

9

Un de mes clients a déployé la base de données de notre produit sur une machine Solaris qui possède déjà 3 instances d'Oracle. Donc, en ce moment, 4 instances d'Oracle s'exécutent sur la même machine. Et maintenant, nous rencontrons des problèmes de performances.

Je n'ai pas accès à d'autres instances ou à la machine, et tous les outils dont je dispose sont alert.log, AWR et ADDM. Je sais qu'il y a quelque chose lié à plusieurs instances, mais je ne peux pas le prouver.

Alors, ma question est, avez-vous vécu une situation similaire? Comment dois-je y faire face? Comment puis-je identifier la cause des problèmes de performances liés à plusieurs instances?

Isaac A. Nugroho
la source

Réponses:

8

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 base 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 toutes comme de bons citoyens Oracle. Dès qu'il existe une application qui n'utilise pas de variables de liaison, l'hôte devient de plus en plus douloureux. Il en va de même pour les applications qui continuent de créer de nouvelles connexions toutes les quelques secondes, au lieu de réutiliser les connexions existantes. Des choses comme la validation automatique n'aident pas non plus à améliorer la situation. Quel est le comportement normal de votre application? Fait-il des mises à jour importantes? Quand fait-il un commit? Combien de redo est généré / heure? Votre application utilise-t-elle des variables de liaison? Dans de nombreux cas, l'emplacement des fichiers redolog en ligne est critique. Si l'application génère beaucoup de redo (ou est en concurrence avec une autre application qui le fait), le rédacteur de journal ralentira et entraînera une forte dégradation des performances car la session attend la fin de l'écriture du fichier journal. Donnez à votre client une disposition de disque où les répétitions se trouvent sur des disques raid-10 dédiés et voyez à quel point cela aide. Découvrez également la situation d'allocation de mémoire. Il pourrait être nécessaire de redistribuer équitablement la mémoire disponible.

J'espère que ça aide

ik_zelf
la source
vous avez raison. Nous surveillons notre instance et effectuons l'optimisation partout où nous le pouvons. Mais les performances ne sont pas stables, parfois elles chutent sans raison explicable (de notre côté)
Isaac A. Nugroho
Isaac, à quelle fréquence la base de données est-elle redémarrée, de quelle version s'agit-il et avez-vous des histrogrammes sur les colonnes, générés par le processus de statistiques automatiques? Utilisez-vous des variables de liaison et un pré-aperçu optimiseur?
ik_zelf
2

L'exécution de plusieurs instances sur le même serveur est possible et dans certains cas nécessaire. L'oratab est spécialement conçu 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.

Il est essentiel d'avoir suffisamment de mémoire. Oracle construit le SGA en mémoire partagée. Si vous n'avez pas suffisamment de mémoire, le SGA ou les processus commenceront à basculer entre et hors. Ceci est connu sous le nom de thrashing, et entraîne une baisse significative des performances.

Il peut être possible de régler les instances pour qu'elles s'exécutent avec un SGA plus petit. Oracle fournit des outils pour vous aider à régler la taille SGA. Si l'une des instances a un SGA excessivement grand, cela pénalisera toutes les instances.

Une autre utilisation de la mémoire qui est importante est l'espace tampon. Cela agit comme un cache secondaire et peut éliminer des E / S de lecture importantes.

L'exécution sar(en supposant qu'un O / S de base Unix) peut vous donner de bons diagnostics sur l'endroit où se trouve le problème. Les problèmes probables sont l'échange ou la saturation des E / S du disque. L'ajout de RAM résoudra probablement l'un de ces problèmes.

La saturation des E / S de disque peut également être traitée en déplaçant certains espaces de table vers d'autres disques. Je configure généralement Oracle pour que les E / S soient réparties sur autant de disques que possible.

EDIT: Ce sont quelques cas qui peuvent nécessiter des instances distinctes.

  • Cela est toujours nécessaire si vous exécutez différentes versions d'Oracle sur le même serveur. Les applications ne sont pas toujours certifiées ou capables de fonctionner avec la dernière version.
  • Vous souhaiterez peut-être des instances qui peuvent être automatiquement restaurées à un moment donné. (Bien que je le décourage, je l'ai utilisé pour un environnement de test automatisé.)
  • Si vous avez des références de schéma codées en dur dans les applications, vous devrez peut-être différentes instances pour gérer les collisions d'espace de noms.
  • Les exigences de sécurité peuvent être plus faciles à gérer en utilisant des instances distinctes. Il peut être approprié d'utiliser différents serveurs dans ce cas.
  • L'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 distinctes. Je n'exécuterais pas tous ces environnements sur le même serveur, mais j'en exécuterais souvent deux ou plus sur le même serveur.
BillThor
la source
Pouvez-vous fournir des exemples où il est nécessaire d'exécuter plusieurs instances?
ScottCher
1
@ScottCher J'ai modifié ma réponse pour fournir des cas.
BillThor
1

La ressource la plus critique est la RAM.

Chaque instance Oracle en cours d'exécution alloue de la RAM pour sa propre mémoire, lorsqu'elle vient de démarrer et n'est pas sous charge.

Nous utilisons un 10g avec 10 et 11g avec 8 instances, 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 reste différente de SQL Server, où vous pouvez ajouter des bases de données autant que l'espace disque le permet.

Dans votre cas, avec plus d'instances sur une machine, le SGA pour chaque instance devient plus petit, moins de sql précompilé peut être mis en cache et la machine doit faire plus de compilation sql, ce qui réduit les performances.

L'ajout de RAM peut vous aider dans votre situation.

bernd_k
la source
2
La raison pour laquelle vous dites que le serveur SQL est différent est plus une question de nomenclature. Un groupe de processus et sa mémoire dédiée est une instance. Si vous ajoutez une base de données SQL Server et qu'il n'ajoute pas de nouveau processus, ce n'est pas une instance. Dans ce cas, il est beaucoup plus proche d'ajouter un schéma.
Stephanie Page