Oracle RAC cache fusion原理测试

Oracle RAC cache fusion是RAC最核心的工作机制,他把所有实例的SGA虚拟成一个大的SGA区,每当不同的实例请求相同的数据块,这个数

oracle rac cache fusion是rac最核心的工作机制,他把所有实例的sga虚拟成一个大的sga区,每当不同的实例请求相同的数据块,这个数据块就需要在实例间进行传递。那到底什么时候传递呢?加上rac有4个节点,其中的一个节点执行了一条sql是全表扫描一张表,这个时候这个节点把这张表的数据加载到缓存;其他的节点如果需要相同的数据块会取第一个节点的数据,,那是需要的时候去,还是第一个节点推送呢?
 
  实验设定:
 
  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 

Oracle教程:实例故障恢复

Linux-6-64下安装Oracle 12C笔记

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

本文永久更新链接地址:

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1970269.html

(0)
上一篇 2025年2月23日 07:47:04
下一篇 2025年2月23日 07:47:52

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • ORACLE 用户权限管理

    今天带大家一起来了解一下ORACLE 的用户权限管理。创建新的用户只能是oracle的DBA管理者的事。 语句:Create user TestUser identified by testPass; 其中TestUser是用户名,test…

    2025年2月23日
    100
  • 小白学Oracle第二关之第一个oracle数据库表的创建

    现如今在实际工作中,在数据库中创建表是经常会用到的。本文中小编主要给大家来分享一下在数据库如何通过sql语句去创建表。首先,先使用plsql连接到oracle数据库,先保证下面的服务是开启的。   我们本次创建表的需求是:创建一张班级表,和…

    2025年2月23日 数据库
    100
  • oracle删除重复数据保留第一条记录

    oracle删除重复数据保留第一条记录 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having cou…

    2025年2月23日
    100
  • oracle如何修改字段长度

    oracle如何修改字段长度 使用modify关键字来实现对数据类型的修改:alter table 表名 modify 字段名 数据类型; 1、表中已存有数据 ALTER table tableName MODIFY (字段名 字段类型(长…

    2025年2月23日
    100
  • oracle如何删除表数据

    oracle如何删除表数据 删除表内容的两种方法 1、truncate table 表名; 2、delete from 表名 where 条件; 两种方法的区别: truncate,意思为截断表,能够不占用资源的全部删除表,优点是速度快,缺…

    2025年2月23日
    100
  • oracle如何修改表名

    oracle如何修改表名 方式一 alter table old_table_name rename to new_table_name; 登录后复制 这是最简单的(个人认为) 方式二: 推荐:《SQL教程》 select tname fr…

    2025年2月23日
    100
  • Oracle建表语句是什么

    oracle建表语句是什么 oracle数据库的建表语句,具体语法如下: CREATE TABLE tablename(    column_name datatype [null,not null],    column_name dat…

    2025年2月23日
    100
  • oracle中exists的用法

    oracle中exists的用法 1、exists后面接的是一个子查询  2、以下图两个表为示例,来演示 a表中的id   与b表中的aid相关联 推荐学习:SQL教程 3、exists的作用是检查子查询的结果是否为真,如果子查询为true…

    2025年2月23日 数据库
    100
  • oracle截取字符串前几位的方法

    oracle截取字符串前几位的方法 Oracle提前某数据的前几位用substr函数。 如test表中数据如下: 现要提取dept字段中的前两位,可用如下语句: select id,name,substr(dept,1,2) from te…

    2025年2月23日
    100
  • oracle中exists有什么用法

    exists后面接的是一个子查询 以下图两个表为示例,来演示 a表中的id与b表中的aid相关联 exists的作用是检查子查询的结果是否为真,如果子查询为true则执行外面的SQL语句。 exists不返回数据只返回true 或false…

    2025年2月23日 数据库
    100

发表回复

登录后才能评论