使用数据库链接时是否可以查询Oracle CACE的查询
-
16-10-2019 - |
题
一些供应商告诉我们,我们不应在数据库及其数据之间使用数据库链接,因为通过数据库链接执行的查询不会被缓存,也不会进行优化。
我找不到任何证实/灌输此信息的信息。
天真的我不会看到为什么Oracle在使用DB链接时无法进行查询缓存。
解决方案
有一些 限制 带有数据库链接。例如,您不能远程执行DDL。
针对远程表运行的查询是 以完全相同的方式处理 作为常规表:
本地的Oracle数据库服务器将分布式查询分解为相应的远程查询,然后将其发送到远程节点以进行执行。远程节点执行查询并将结果发送回本地节点。然后,本地节点执行任何必要的后处理,并将结果返回给用户或应用程序。
在大多数情况下,破坏过程是足够的,您只会获得数据库链接的预期开销(数据库之间的网络延迟,两个查询分析/处理,而不是一个等等。)。远程子查询将被远程数据库视为普通查询,并且与常规查询一样,数据将进入远程缓存。
如果您尝试将本地表连接到远程表(或来自两个不同DB链接的表),则可能会遇到性能问题,因为必须将数据携带到单个数据库中才能执行加入。在这种情况下,您可能需要更改分解过程(例如,在远程数据库而不是本地数据库中执行复杂的连接)。
这 文档 详细说明您可以调整分布式查询的多种方式。
其他提示
分布式查询不能以与本地表可以优化的分布式查询和缓存相同的方式进行优化,因此 供应商不正确.
您可以通过运行以下内容来看到这一点。您将看到每次运行的执行计数上升。
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%';
我的猜测是,供应商希望通过Web服务访问他们的数据,并希望在应用程序层中完成您自己数据库中的数据。这种配置的性能也可能极大地比数据库链接上的连接较低,即使它没有缓存。
不隶属于 dba.stackexchange