Múltiples instancias de Oracle: ¿es una buena práctica?

9

Uno de mis clientes ha implementado la base de datos de nuestro producto en una máquina Solaris que ya tiene 3 instancias de Oracle. Entonces, en este momento hay 4 instancias de Oracle ejecutándose en la misma máquina. Y ahora estamos experimentando problemas de rendimiento.

No tengo acceso a otras instancias ni a la máquina, y todas las herramientas que tengo son alert.log, AWR y ADDM. Sé que hay algo relacionado con varias instancias, pero no puedo probarlo.

Entonces, mi pregunta es, ¿has experimentado una situación similar? ¿Cómo debo lidiar con eso? ¿Cómo puedo identificar la causa de los problemas de rendimiento relacionados con varias instancias?

Isaac A. Nugroho
fuente

Respuestas:

8

Isaac, preferiblemente ejecutamos una instancia en un servidor e implementamos las diferentes aplicaciones como esquemas y servicios en esa única base de datos. Si el servidor tiene suficiente memoria, no habrá problema, si todas las aplicaciones se comportan como buenos ciudadanos de Oracle. Tan pronto como haya una aplicación que no use variables de enlace, el host experimentará un dolor creciente. Lo mismo para las aplicaciones que siguen creando nuevas conexiones cada pocos segundos, en lugar de reutilizar las conexiones existentes. Cosas como la confirmación automática tampoco ayuda a mejorar la situación. ¿Cuál es el comportamiento normal de su aplicación? ¿Hace grandes actualizaciones? ¿Cuándo se compromete? ¿Cuánto rehacer es generar / hora? ¿Su aplicación utiliza variables de enlace? En muchos casos, la ubicación de los archivos de redolog en línea es crítica. Si la aplicación genera mucho rehacer (o compite con otra aplicación que hace esto), el escritor de registros se ralentizará y causará una gran degradación del rendimiento porque la sesión está esperando que se complete la escritura del archivo de registro. Proporcione a su cliente un diseño de disco donde los rehacer estén en discos raid-10 dedicados y vea cuánto ayuda esto. También descubra la situación de asignación de memoria. Puede haber una necesidad de una redistribución justa de la memoria disponible.

espero que esto ayude

ik_zelf
fuente
estás en lo correcto. Hacemos un seguimiento de nuestra instancia y realizamos la optimización en cualquier lugar que podamos. Pero el rendimiento no es estable, a veces cae sin una razón explicable (de nuestro lado)
Isaac A. Nugroho
Isaac, ¿con qué frecuencia se reinicia la base de datos, qué versión es y tienes histrogramas en columnas, generados por el proceso de estadísticas automáticas? ¿Utiliza variables de enlace y optimizador previo a la lectura?
ik_zelf
2

Es posible ejecutar varias instancias en el mismo servidor y, en algunos casos, es necesario. El oratab está diseñado específicamente para manejar la administración de múltiples instancias. En los casos en que tenga varias aplicaciones independientes, puede ser preferible tener una instancia para cada aplicación.

Tener suficiente memoria es crítico. Oracle construye el SGA en memoria compartida. Si no tiene suficiente memoria, el SGA o los procesos comenzarán a intercambiarse. Esto se conoce como golpear y da como resultado una penalización de rendimiento significativa.

Es posible ajustar las instancias para que se ejecuten con un SGA más pequeño. Oracle proporciona herramientas para ayudar a ajustar el tamaño de SGA. Si alguna de las instancias tiene un SGA excesivamente grande, penalizará todas las instancias.

Otro uso para la memoria que es importante es el espacio del búfer. Esto actúa como caché secundaria y puede eliminar la E / S de lectura significativa.

Ejecutar sar(suponiendo que las bases de datos de Unix S / S) le puede dar buenos diagnósticos sobre dónde está el problema. Los problemas probables son el intercambio o la saturación de E / S del disco. Agregar RAM probablemente resolverá cualquiera de estos problemas.

La saturación de E / S de disco también se puede solucionar moviendo algunos espacios de tabla a otros discos. Generalmente configuro Oracle para que la E / S se distribuya en tantos discos como sea posible.

EDITAR: Estos son algunos casos que pueden requerir instancias separadas.

  • Siempre es necesario si ejecuta diferentes versiones de Oracle en el mismo servidor. Las aplicaciones no siempre están certificadas o no son capaces de trabajar con la última versión.
  • Es posible que desee instancias que se puedan revertir automáticamente a un punto en el tiempo. (Aunque lo desaconsejo, lo he usado para un entorno de prueba automatizado).
  • Si tiene una referencia de esquema codificada en las aplicaciones, es posible que necesite diferentes instancias para lidiar con las colisiones de espacios de nombres.
  • Los requisitos de seguridad pueden ser más fáciles de manejar usando instancias separadas. Puede ser apropiado usar diferentes servidores en este caso.
  • Ejecutar diferentes versiones de la misma base de datos (desarrollo, prueba, aceptación del usuario, capacitación y producción) en el mismo servidor es más seguro con instancias separadas. No ejecutaría todos estos entornos en el mismo servidor, pero a menudo correría dos o más en el mismo servidor.
BillThor
fuente
¿Puede proporcionar ejemplos donde sea necesario ejecutar varias instancias?
ScottCher
1
@ScottCher He editado mi respuesta para proporcionar algunos casos.
BillThor
1

El recurso más crítico es la RAM.

Cada instancia de Oracle en ejecución asigna algo de RAM por sí misma, cuando recién se inicia y no está bajo carga.

Estamos ejecutando un 10g con 10 y 11g con 8 instancias, pero estos son servidores de desarrollo. Después de reiniciar el sistema operativo, algunos de los servicios de Oracle no se inician automáticamente y deben iniciarse manualmente: Oradim -startup -sid xxx.

Recién estamos comenzando a usar la Administración automática de memoria, pero la situación es diferente de la de SQL Server, donde puede agregar bases de datos tanto como el espacio en disco.

En su caso, con más instancias en una máquina, el SGA para cada instancia se vuelve más pequeño, se puede almacenar en caché menos sql precompilado y la máquina tiene que hacer más compilación de sql, lo que reduce el rendimiento.

Agregar RAM podría ayudar en su situación.

bernd_k
fuente
2
La razón por la que dice que el servidor SQL es diferente es más una cuestión de nomenclatura. Un grupo de procesos y su memoria dedicada es una instancia. Si agrega una base de datos SQL Server y no agrega un nuevo proceso, eso no es una instancia. En ese caso, está mucho más cerca de agregar un esquema.
Stephanie Page