Istanze Oracle multiple: è una buona pratica?


9

Uno dei miei clienti ha distribuito il db del nostro prodotto in una macchina Solaris che ha già 3 istanze di Oracle. Quindi, in questo momento ci sono 4 istanze di Oracle in esecuzione sulla stessa macchina. E ora stiamo riscontrando problemi di prestazioni.

Non ho accesso ad altre istanze o alla macchina e tutti gli strumenti che ho sono alert.log, AWR e ADDM. So che c'è qualcosa legato a più istanze, ma non posso provarlo.

Quindi, la mia domanda è: hai vissuto una situazione simile? Come dovrei affrontarlo? Come posso identificare la causa dei problemi di prestazioni relativi a più istanze?

Risposte:


8

Isaac, preferibilmente eseguiamo un'istanza su un server e implementiamo le diverse applicazioni come schemi e servizi in quel singolo database. Se il server ha memoria sufficiente, non ci sarà un problema, se tutte le applicazioni si comportano come buoni cittadini Oracle. Non appena c'è un'applicazione che non usa le variabili di bind, c'è un dolore crescente sull'host. Lo stesso vale per le applicazioni che continuano a creare nuove connessioni ogni pochi secondi, invece di riutilizzare le connessioni esistenti. Anche cose come il commit automatico non aiutano a migliorare la situazione. Qual è il comportamento normale della tua applicazione? Fa grandi aggiornamenti? Quando fa un commit? Quanta ripetizione viene generata / ora? La tua app utilizza variabili di bind? In molti casi, la posizione dei file di redolog online è fondamentale. Se l'app genera molte ripetizioni (o compete con un'altra app che lo fa), il logwriter rallenterà e causerà un grave peggioramento delle prestazioni perché la sessione è in attesa del completamento della scrittura del file di log. Offri ai tuoi clienti un layout del disco in cui le ripetizioni si trovino su dischi raid-10 dedicati e vedi quanto questo aiuta. Scopri anche la situazione di allocazione della memoria. Potrebbe essere necessaria un'equa ridistribuzione della memoria disponibile.

spero che questo possa essere d'aiuto


hai ragione. Monitoriamo la nostra istanza ed eseguiamo l'ottimizzazione laddove possibile. Ma la performance non è stabile, a volte cala senza una ragione spiegabile (dalla nostra parte)
Isaac A. Nugroho

Isaac, con quale frequenza viene riavviato il database, che versione è e hai histrogram su colonne, generati dal processo di statistiche automatiche? Usi le variabili di bind e l'anteprima anticipata dell'ottimizzatore?
ik_zelf,

2

L'esecuzione di più istanze sullo stesso server è possibile e in alcuni casi necessaria. L'oratab è progettato specificamente per gestire la gestione di più istanze. Nei casi in cui hai più applicazioni indipendenti, può essere preferibile avere un'istanza per ogni applicazione.

Avere memoria sufficiente è fondamentale. Oracle crea l'SGA nella memoria condivisa. Se non si dispone di memoria sufficiente, l'SGA o i processi inizieranno a scambiarsi. Questo è noto come thrashing e comporta una penalità significativa per le prestazioni.

Potrebbe essere possibile ottimizzare le istanze per l'esecuzione con un SGA più piccolo. Oracle fornisce strumenti per ottimizzare la dimensione SGA. Se una delle istanze ha un SGA eccessivamente grande, penalizzerà tutte le istanze.

Un altro uso della memoria che è importante è lo spazio buffer. Funziona come cache secondaria e può eliminare I / O di lettura significativi.

L'esecuzione sar(supponendo che Unix basi O / S) può fornire una buona diagnostica su dove si trova il problema. Probabilmente i problemi sono lo scambio o la saturazione dell'I / O del disco. L'aggiunta di RAM risolverà probabilmente uno di questi problemi.

La saturazione dell'I / O del disco può essere gestita anche spostando alcuni tablespace su altri dischi. In genere configuro Oracle in modo che l'I / O sia distribuito sul maggior numero possibile di dischi.

EDIT: questi sono alcuni casi che potrebbero richiedere istanze separate.

  • È sempre necessario se si eseguono versioni diverse di Oracle sullo stesso server. Le applicazioni non sono sempre certificate o in grado di funzionare con l'ultima versione.
  • È possibile che si desideri eseguire il rollback automatico di istanze a un determinato momento. (Anche se lo scoraggio, l'ho usato per un ambiente di test automatizzato.)
  • Se nelle applicazioni è presente un riferimento allo schema codificato, potrebbero essere necessarie istanze diverse per gestire le collisioni dello spazio dei nomi.
  • I requisiti di sicurezza potrebbero essere più facili da gestire utilizzando istanze separate. In questo caso potrebbe essere opportuno utilizzare server diversi.
  • L'esecuzione di versioni diverse dello stesso database (sviluppo, test, accettazione dell'utente, formazione e produzione) sullo stesso server è più sicura con istanze separate. Non avrei eseguito tutti questi ambienti sullo stesso server, ma spesso avrei eseguito due o più sullo stesso server.

Potete fornire esempi in cui è necessario eseguire più istanze?
ScottCher

1
@ScottCher Ho modificato la mia risposta per fornire alcuni casi.
BillThor

1

La risorsa più critica è la RAM.

Ogni istanza Oracle in esecuzione alloca una parte della propria RAM, appena avviata e non sotto carico.

Stiamo eseguendo un 10g con 10 e 11g con 8 istanze, ma questi sono server di sviluppo. Dopo il riavvio del sistema operativo alcuni dei servizi Oracle non si avviano automaticamente e devono essere avviati manualmente: Oradim -startup -sid xxx.

Stiamo appena iniziando a utilizzare la gestione automatica della memoria, ma la situazione rimane diversa da SQL Server, in cui è possibile aggiungere database tanto quanto lo spazio su disco offre.

Nel tuo caso, con più istanze su una macchina l' SGA per ogni istanza diventa più piccola, è possibile memorizzare nella cache sql meno precompilati e la macchina deve eseguire più compilazioni sql, riducendo le prestazioni.

L'aggiunta di RAM potrebbe aiutare nella tua situazione.


2
Il motivo per cui si dice che il server SQL è diverso è più una questione di nomenclatura. Un gruppo di processi e la sua memoria dedicata sono un'istanza. Se aggiungi un database SQL Server e non aggiunge un nuovo processo, questa non è un'istanza. In tal caso è molto più vicino all'aggiunta di uno schema.
Stephanie Pagina
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.