Est-ce que les requêtes cache Oracle lorsque vous utilisez un lien de base de données

dba.stackexchange https://dba.stackexchange.com/questions/9358

  •  16-10-2019
  •  | 
  •  

Question

Certains fournisseurs nous a dit que nous ne devrions pas utiliser la base de données lien entre notre base de données et que les leurs requêtes exécutées sur une liaison de base de données ne seront pas mises en cache, ni optimisés.

Je ne peux pas trouver aucune information confirmant / infirmer cela.

Naïvement je ne vois pas pourquoi Oracle ne serait pas capable de faire la requête de mise en cache lorsque vous utilisez un lien db.

Était-ce utile?

La solution

Il y a quelques avec base de données liens. Vous ne pouvez pas exécuter à distance DDL par exemple.

requêtes exécutées sur des tables distantes sont pas traité exactement de la même façon que les tableaux réguliers:

Le serveur local de base de données Oracle brise la requête distribuée en un nombre correspondant de requêtes à distance, qu'il envoie ensuite aux nœuds distants pour l'exécution. Les noeuds distants exécutent les requêtes et envoyer les résultats au nœud local. Le nœud local effectue alors tout post-traitement nécessaire et renvoie les résultats à l'utilisateur ou à l'application.

Dans la plupart des cas, le processus de rupture est suffisant et vous obtiendrez juste la tête prévu de la liaison de base de données (retard de réseau entre les bases de données, deux analyses de requête / traitement au lieu d'un, etc ..). Les sous-requêtes à distance seront traités comme des requêtes normales par la base de données distante et les données auront dans le cache à distance comme des requêtes régulières.

Vous pourriez avoir des problèmes de performance si vous essayez de se joindre à une table locale à une table distante (ou tables de deux liens distincts db) puisque les données doivent être porté à une seule base de données pour effectuer la jointure. Dans ce cas, vous voudrez peut-être changer le processus rupture (par exemple la réalisation d'une jointure complexe dans une base de données distante au lieu de la base de données locale).

Le détaille un certain nombre de façons dont vous tune peut requêtes distribuées.

Autres conseils

Une requête distribuée ne peut pas être optimisée de la même manière que les tables locales peuvent, cependant, les requêtes distribuées sont optimisés et caches, donc le vendeur est incorrect .

Vous pouvez voir cela en exécutant quelque chose comme ce qui suit. Vous verrez la montée de comptage d'exécution avec chaque exécution.

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%';

Je suppose que le vendeur veut leurs données accessibles par le biais des services Web et tout s'associe à des données à partir de votre propre base de données à faire dans une couche d'application. La performance d'une telle configuration serait probablement largement inférieure à une jointure sur un lien de base de données même si elle ne cache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top