[Oracle]跨DBLINK的JOIN查询的数据库缓存问题15783452141

简介:
客户问到跨DBLINK,结合本地表和远端表的时候,数据在哪一边 的 Data Buffer 缓存。

测试的结果是:本地表在本地缓存,远端表在远端缓存。

####Testcase-0929-10

本地数据库:     远端数据库:
TABXXX           TABYYY

=============
本地数据库:

conn user003/user003

create table TABXXX(id integer, val varchar2(3));

insert into TABXXX values(1,'100');
insert into TABXXX values(2,'200');
insert into TABXXX values(3,'300');
commit;

=============
远端数据库:

conn user002/user002

create table TABYYY(id integer, val varchar2(3));

insert into TABYYY values(2,'200');
insert into TABYYY values(3,'300');
insert into TABYYY values(4,'400');
commit;

=============
本地数据库:
shu immediate
startup

conn user003/user003

create public database link dbk connect to user002 identified by user002 using 'remote';

查询前检查Buffer:

conn / as sysdba

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
  from dba_objects o,v$bh b,dba_segments s
  where b.objd=o.data_object_id
  and o.owner = 'user002'
  and o.object_name=s.segment_name
  and o.object_type=s.segment_type
  group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
  order by buffers;

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
  from dba_objects o,v$bh b,dba_segments s
  where b.objd=o.data_object_id
  and o.owner = 'user003'
  and o.object_name=s.segment_name
  and o.object_type=s.segment_type
  group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
  order by buffers;


=============
远端数据库:

查询前检查Buffer:

shu immediate
startup

conn / as sysdba

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
  from dba_objects o,v$bh b,dba_segments s
  where b.objd=o.data_object_id
  and o.owner = 'user002'
  and o.object_name=s.segment_name
  and o.object_type=s.segment_type
  group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
  order by buffers;

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
  from dba_objects o,v$bh b,dba_segments s
  where b.objd=o.data_object_id
  and o.owner = 'user003'
  and o.object_name=s.segment_name
  and o.object_type=s.segment_type
  group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
  order by buffers;

=============
本地数据库:

执行查询:

conn user003/user003

select a.id,b.value from TABXXX a, TABYYY@dbk b where a.id=b.id;

查询后检查缓存:  <<<<<<<<<<<<<<<<<< 本地表在本地缓存,本地没有远端表的缓存内容

conn / as sysdba

  
select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
 from dba_objects o,v$bh b,dba_segments s
 where b.objd=o.data_object_id
 and o.owner = 'user002'
 and o.object_name=s.segment_name
 and o.object_type=s.segment_type
 group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
 order by buffers;

no records found

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
 from dba_objects o,v$bh b,dba_segments s
 where b.objd=o.data_object_id
 and o.owner = 'user003'
 and o.object_name=s.segment_name
 and o.object_type=s.segment_type
 group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
 order by buffers;

OWNER
--------------------------------------------------------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
OBJECT_TYPE                                               BUFFER_POOL
--------------------------------------------------------- ---------------------
  BUFFERS
----------
user003
TABXXX
TABLE                                                     DEFAULT
        7


SQL>


=============
远端数据库:

查询后检查缓存:                      <<<<<<<<<<<<<<<<<< 远端表在远端缓存,远端数据库那边,没有本地表的缓存内容

conn / as sysdba

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
 from dba_objects o,v$bh b,dba_segments s
 where b.objd=o.data_object_id
 and o.owner = 'user002'
 and o.object_name=s.segment_name
 and o.object_type=s.segment_type
 group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
 order by buffers;


OWNER
--------------------------------------------------------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
OBJECT_TYPE                                               BUFFER_POOL
--------------------------------------------------------- ---------------------
  BUFFERS
----------
user002
TABYYY
TABLE                                                     DEFAULT
       14

SQL>

select o.owner,o.object_name,o.object_type,s.buffer_pool,count(*) buffers
 from dba_objects o,v$bh b,dba_segments s
 where b.objd=o.data_object_id
 and o.owner = 'user003'
 and o.object_name=s.segment_name
 and o.object_type=s.segment_type
 group by o.owner,o.object_name,o.object_type,o.status,s.buffer_pool
 order by buffers;

no records found








本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/p/3_15783452141.html,如需转载请自行联系原作者

目录
相关文章
|
3天前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
29天前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6天前
|
Oracle 安全 关系型数据库
Oracle数据恢复—Oracle数据库误删除的数据恢复方法探讨
删除Oracle数据库数据一般有以下2种方式:delete、drop或truncate。下面针对这2种删除oracle数据库数据的方式探讨一下oracle数据库数据恢复方法(不考虑全库备份和利用归档日志)。
|
16天前
|
存储 Oracle 关系型数据库
Oracle同一台服务器创建多个数据库
【8月更文挑战第30天】在 Oracle 中,可在同一服务器上创建多个数据库。首先确保已安装 Oracle 软件并具有足够资源,然后使用 DBCA 工具按步骤创建,包括选择模板、配置存储及字符集等。重复此过程可创建多个数据库,需确保名称、SID 和存储位置唯一。创建后,可通过 Oracle Enterprise Manager 进行管理,注意服务器资源分配与规划。
31 10
|
25天前
|
存储 Oracle 关系型数据库
分享几个Oracle数据库日常维护中常见的问题
分享几个Oracle数据库日常维护中常见的问题
70 1
|
19天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之Oracle数据库是集群部署的,怎么进行数据同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
22天前
|
存储 缓存 NoSQL
微服务复杂查询之缓存策略
微服务复杂查询之缓存策略
|
24天前
|
缓存 关系型数据库 MySQL
【缓存大对决】Memcached VS MySQL查询缓存,谁才是真正的性能之王?
【8月更文挑战第24天】在现代Web应用中,缓存技术对于提升性能与响应速度至关重要。本文对比分析了Memcached与MySQL查询缓存这两种常用方案。Memcached是一款高性能分布式内存对象缓存系统,支持跨服务器共享缓存,具备灵活性与容错性,但受限于内存大小且不支持数据持久化。MySQL查询缓存内置在MySQL服务器中,简化了缓存管理,特别适用于重复查询,但功能较为单一且扩展性有限。两者各有所长,实际应用中可根据需求单独或结合使用,实现最佳性能优化。
47 0
|
25天前
|
Oracle 关系型数据库 数据库
Oracle数据库备份脚本分享-Python
Oracle数据库备份脚本分享-Python
23 0
|
27天前
|
缓存 Java 数据库连接
Hibernate 中的查询缓存是什么?
【8月更文挑战第21天】
22 0

推荐镜像

更多