Domanda

Alcuni vendor ci ha detto che non dovremmo usare database link tra la nostra banca dati e la loro, come le query eseguite su un database link non sarebbero memorizzati nella cache, non ottimizzate.

non riesco a trovare alcuna informazione conferma / infirming questo.

Ingenuamente non mi vedo perché Oracle non sarebbe in grado di fare query nella cache quando si utilizza un collegamento db.

È stato utile?

Soluzione

Ci sono alcuni restrizioni con il database collegamenti. Non è possibile eseguire DDL in remoto, per esempio.

query eseguite tabelle remote sono non trasformati esattamente modo come tavoli regolari:

Il server Oracle Database locale rompe la query distribuita in un corrispondente numero di query remote, che invia poi ai nodi remoti per l'esecuzione. I nodi remoti eseguono le query e inviare i risultati indietro al nodo locale. Il nodo locale esegue quindi qualsiasi post-elaborazione e restituisce necessario i risultati all'utente o applicazione.

Nella maggior parte dei casi, il processo di rottura è adeguata e si sarà solo ottenere il previsto sovraccarico del database link (ritardo di rete tra le banche dati, due analisi di query / lavorazione invece di uno, ecc ..). Le subquery remoti saranno trattati come normali query dal database remoto e i dati saranno entrare nella cache remota come con le query regolari.

Si potrebbe entrare in problemi di prestazioni se si tenta di partecipare a un tavolo locale per una tabella remota (o tabelle da due collegamenti db distinti) in quanto i dati deve essere effettuata ad un unico database per eseguire il join. In tal caso, si potrebbe desiderare di cambiare il processo di rottura (per esempio l'esecuzione di un complesso di unirsi in un database remoto al posto del database locale).

Il documentazione dettagli di un certo numero di modi in cui può sintonizzare query distribuite.

Altri suggerimenti

Un distribuita query non può essere ottimizzata allo stesso modo che le tabelle locali possono, tuttavia, query distribuite sono ottimizzate e cache, quindi il venditore è corretto .

È possibile vedere questo eseguendo qualcosa di simile alla seguente. Si vedrà l'ascesa conteggio di esecuzione con ogni esecuzione.

SELECT /* 23409268-09389 */ * FROM schema_name.table_name@db_link WHERE rownum<=1;
SELECT Executions, sql_text FROM v$sql WHERE sql_text LIKE 'select /* 23409268-09389%';

La mia ipotesi è che il venditore vuole che i propri dati accessibili attraverso i servizi web e qualsiasi si unisce con i dati dal proprio database da fare in un livello di applicazione. Le prestazioni di tale configurazione sarebbe probabilmente molto inferiore ad un join su un collegamento database anche se non fosse memorizzata nella cache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top