Oracle RAC cache fusion原理測试

Oracle RAC cache fusion是RAC最核心的工作机制。他把全部实例的SGA虚拟成一个大的SGA区,每当不同的实例请求同样的数据块,这个数据块就须要在实例间进行传递。

那究竟什么时候传递呢?

假设RAC有4个节点,当中的一个节点运行了一条SQL是全表扫描一张表,这个时候这个节点把这张表的数据载入到缓存;

    方式1 :其它的节点假设须要同样的数据块会取第一个节点的数据,那是须要的时候取。

方式2 :还是第一个节点推送。

  实验设定:

1.清空4个节点的share pool和databuffer。事实上当清除第一个节点的时候。其它的节点都已经清除了,从运行清除语句的时间就能够看出。清除后查下各节点data buffer中有没有缓存将要运行的SQL的表。

2.在第一个节点上运行一条SQL.,在其它的节点上看data buffer中是否缓存SQL的表,假设有,说明是数据块是主动推送的。

  实验结论:

数据块从第运行的节点推送到其它的节点上,RAC尽管使得使用的资源多了几倍。但因为cache fusion这个特性,上了RAC后的系统系统是否有提升还是未知之数。

---清理4个节点(54,55,56,57)shared_pool和buffer_cache

如今节点54上清理share pool和data buffer

SQL> alter system flush shared_pool;

系统已更改。

SQL> alter system flush buffer_cache;

系统已更改。

---在其它的节点55,56,57上相同运行

---在第54个节点測试语句

SQL> SELECT COUNT(1)

2  FROM MM_DISTRIBUTION W

3  WHERE    W.DATA_AREA LIKE ‘03‘

4    || ‘%‘

5  AND W.CREATE_DATE > TO_DATE(‘2013-01-01‘, ‘yyyy-mm-dd‘);

已用时间:  00: 00: 02.40

运行计划

----------------------------------------------------------

Plan hash value: 3507380501

-------------------------------------------------------------------------------------------------------

| Id  | Operation           | Name            | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

-------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |                 |     1 |    13 |  5209   (2)| 00:01:03 |       |       |

|   1 |  SORT AGGREGATE     |                 |     1 |    13 |            |          |       |       |

|   2 |   PARTITION LIST ALL|                 | 43668 |   554K|  5209   (2)| 00:01:03 |     1 |     2 |

|*  3 |    TABLE ACCESS FULL| MM_DISTRIBUTION | 43668 |   554K|  5209   (2)| 00:01:03 |     1 |     2 |

-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

3 - filter("W"."CREATE_DATE">TO_DATE(‘2013-01-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘) AND

"W"."DATA_AREA" LIKE ‘03%‘)

统计信息

----------------------------------------------------------

2997  recursive calls

0  db block gets

24196  consistent gets

23581  physical reads

0  redo size

334  bytes sent via SQL*Net to client

338  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

39  sorts (memory)

0  sorts (disk)

1  rows processed

SQL> /

已用时间:  00: 00: 00.28

运行计划

----------------------------------------------------------

Plan hash value: 3507380501

-------------------------------------------------------------------------------------------------------

| Id  | Operation           | Name            | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |

-------------------------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |                 |     1 |    13 |  5209   (2)| 00:01:03 |       |       |

|   1 |  SORT AGGREGATE     |                 |     1 |    13 |            |          |       |       |

|   2 |   PARTITION LIST ALL|                 | 43668 |   554K|  5209   (2)| 00:01:03 |     1 |     2 |

|*  3 |    TABLE ACCESS FULL| MM_DISTRIBUTION | 43668 |   554K|  5209   (2)| 00:01:03 |     1 |     2 |

-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

3 - filter("W"."CREATE_DATE">TO_DATE(‘2013-01-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘) AND

"W"."DATA_AREA" LIKE ‘03%‘)

统计信息

----------------------------------------------------------

0  recursive calls

0  db block gets

23554  consistent gets

0  physical reads

0  redo size

334  bytes sent via SQL*Net to client

338  bytes received via SQL*Net from client

2  SQL*Net roundtrips to/from client

0  sorts (memory)

0  sorts (disk)

1  rows processed

---在4个节点查看share_pool中的SQL是否同步

select sql_text from v$sql s where sql_text like ‘%MM_DISTRIBUTION%‘;

---在4个节点查看測试buffer_cache。能够看到其它的3个节点都已同步缓存数据

select count(b.object_name)

from sys.v_x$bh a, user_objects b

where a.OBJ = b.object_id

and b.object_name = ‘MM_DISTRIBUTION‘

and a.STATE <> 0;     ---state=0表示free。其它表示已占用

COUNT(B.OBJECT_NAME)

--------------------

23543

时间: 2024-08-27 16:57:48

Oracle RAC cache fusion原理測试的相关文章

Oracle RAC cache fusion原理测试

Oracle RAC cache fusion是RAC最核心的工作机制,他把所有实例的SGA虚拟成一个大的SGA区,每当不同的实例请求相同的数据块,这个数据块就需要在实例间进行传递.那到底什么时候传递呢?加上RAC有4个节点,其中的一个节点执行了一条SQL是全表扫描一张表,这个时候这个节点把这张表的数据加载到缓存:其他的节点如果需要相同的数据块会取第一个节点的数据,那是需要的时候去,还是第一个节点推送呢?   实验设定: 1.清空4个节点的share pool和databuffer,其实当清除第

RAC Cache Fusion 原理理解

cache fusion  .   grd  .  drm   .   gcs  .   ges cache fusion 1.RAC是一个数据库执行在多个实例上.通过DLM(Distributed Lock Management):分布式锁管理器 来解决并发问题.RAC各个节点间的共享资源,为了保证每一个节点訪问数据的一致性.所以须要使用DLM来协调各个实例间的资源竞争訪问. 这个DLM在RAC中就叫Cache Fusion. 2.在cache Fusion 中,每一个数据块都被映射成Cach

Oracle Rac ——Cache Fusion

Cache Fusion (缓存融合) 实际意义上讲就是通过互连网络在集群各个节点内的SGA之间进行块传递,这样做的好处是避免多次将块写入磁盘,再重新读入到其他实例的缓存中.当一个块从磁盘读入RAC环境中的首个实例的sga中,该块会被赋予一个锁资源(区别于行级锁),以让其他实例知道该块正在被使用(或是读),当另一个实例请求该块的操作时,当前实例sga会传递一个块的副本给另一个实例(该块为最新,并未改变):如果内存中的块已经被改变,但改变尚未提交,会传递一个CR副本,并改变相应的锁资源的级别.从本

ORACLE RAC集群原理

ORACLE RAC原理:在一个应用环境当中,所有的服务器使用和管理同一个数据库,目的是为了分散每一台服务器的工作量,硬件上至少需要两台以上的服务器,而且还需 要一个共享存储设备.同时还需要两类软件,一个是集群软件,另外一个就是Oracle数据库中的RAC组件.同时所有服务器上的OS都应该是同一类OS, 根据负载均衡的配置策略,当一个客户端发送请求到某一台服务的listener后,这台服务器根据我们的负载均衡策略,会把请求发送给本机的RAC组件处 理也可能会发送给另外一台服务器的RAC组件处理,

Oracle RAC Study之--Cache Fusion

Oracle RAC Study之--Cache Fusion Concept of cache fusion Cache Fusion basically is about fusing the memory buffer cache of multiple instance into one single cache. For example if we have 3 instance in a RAC which is using the same datafiles and each i

Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置改动及測试步骤

測试环境:Oracle Enterprise Linux 64-bit (5.8版本号) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/oracle/product/11.2.0/dbhome_1 ,数据库名为默认的orcl,Linux虚拟机的IP设置为192.168.1.121 一.改动listener.ora文件内容 命令:[[email protected] ~]$ vi /u01/app/oracle/product/11.2.0

oracle exchange partition 測试

Exchange partition提供了一种方式,让你在表与表或分区与分区之间迁移数据.注意不是将表转换成分区或非分区的形式,而仅仅仅是迁移表中数 据(互相迁移),因为其号称是採用了更改数据字典的方式,因此效率最高( 差点儿不涉及io操作). Exchange partition适用于全部分区格式,你能够将数据从分区表迁移到非分区表.也能够从非分区表迁移至分区表. 这就给批量更新分区表的数据提供了一个非常不错的思路,这里我便做一次普通表与分区表数据交换的实验. 注意:分区表不能直接与分区表交换

OSG 中 相交測试 模块 工作流程及原理

主要涉及三个类: 1. osgUtil::PolytopeIntersector // 详细不同算法实现类 2. osgUtil::IntersectionVisitor //用来遍历节点树的每一个节点 3.osg::Node * mNode;  //  你要做相交測试的根节点 先看使用方法: osg::ref_ptr<osgUtil::PolytopeIntersector> intersector = new osgUtil::PolytopeIntersector(osgUtil::In

Oracle 左外连接的一些測试

为了更加深入左外连接,我们做一些測试,外连接的写法有几种形式,我们能够通过10053跟踪到终于SQL转换的形式. --初始化数据 create table A ( id number, age number ); create table b ( id number, age number ); insert into A values(1,10); insert into A values(2,20); insert into A values(3,30); insert into B val