Pregunta

Algunos proveedores nos dijeron que no debemos usar el enlace de la base de datos entre nuestra base de datos y la suya, ya que las consultas ejecutadas a través de un enlace de base de datos no se almacenarían en caché ni se optimizarían.

No puedo encontrar ninguna información que confirme/enferma esto.

Ingenuamente, no vería por qué Oracle no podría hacer caché de consultas al usar un enlace DB.

¿Fue útil?

Solución

Hay algunos restricciones con enlaces de base de datos. No puede ejecutar DDL de forma remota, por ejemplo.

Las consultas que se ejecutan contra tablas remotas son no procesado exactamente de la misma manera Como tablas regulares:

El servidor local de la base de datos Oracle divide la consulta distribuida en un número correspondiente de consultas remotas, que luego envía a los nodos remotos para su ejecución. Los nodos remotos ejecutan las consultas y envían los resultados al nodo local. El nodo local realiza cualquier postprocesamiento necesario y devuelve los resultados al usuario o aplicación.

En la mayoría de los casos, el proceso de ruptura es adecuado y simplemente obtendrá la sobrecarga esperada del enlace de la base de datos (retraso de la red entre las bases de datos, dos análisis/procesamiento de consultas en lugar de uno, etc.). La base de datos remota se tratará las subconsules remotas como consultas normales y los datos entrarán en el caché remoto como con las consultas regulares.

Puede entrar en problemas de rendimiento si intenta unirse a una tabla local a una tabla remota (o tablas de dos enlaces de DB distintos) ya que los datos deben llevarse a una sola base de datos para realizar la unión. En ese caso, es posible que desee cambiar el proceso de ruptura (por ejemplo, realizar una unión compleja en una base de datos remota en lugar de la base de datos local).

los documentación Detalla varias formas en que puede ajustar consultas distribuidas.

Otros consejos

Una consulta distribuida no puede optimizarse de la misma manera que las tablas locales pueden, sin embargo, las consultas distribuidas están optimizadas y los cachés, por lo tanto, el proveedor es incorrecto.

Puedes ver esto ejecutando algo como lo siguiente. Verá el aumento del recuento de ejecución con cada carrera.

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

Supongo que el proveedor quiere que se accedan a sus datos a través de servicios web y cualquier unión con los datos de su propia base de datos que se realicen en una capa de aplicación. El rendimiento de dicha configuración probablemente sería muy inferior a una unión a través de un enlace de base de datos, incluso si no se almacenara en caché.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top