对于实际的业务系统,通常有一些热点的表,insert和delete的量非常大,这个时候就会发现一些查询语句的逻辑读比较偏高,
这时可能就是oracle在构建一致性块的进行的consistent read。
下面做一个测试看下:
第一步准备数据:

create table test(
col1 varchar2(12)
col2 number
ext varchar2(4000)
);
create index test_ind on test(user_id, col2);
create sequence seq_test cache 200;

这样这样的表,我们假设有频繁的插入和删除操作,那么下面来测试一下select的逻辑读的情况。

开启两个session:
1,创建表保存snapshot

在session1:
create table prefix_stats tablespace IW_ACCOUNT_LOG_01 as select * from v$sesstat where sid=&1;

2,在session2查询

select  * from (select  * from test t where col1 = 'xpchild001' order by trans_log_id) where rownum <= 200;

3,在session1监控session2的统计信息

  

select *
from (select t.name,
pre.value as pre,
suf.value as suf,
(suf.value - pre.value) as diff
from prefix_stats pre, v$sesstat suf, v$statname t
where pre.sid = suf.sid
and pre.STATISTIC# = suf.STATISTIC#
and pre.STATISTIC# = t.STATISTIC#) tmp
where tmp.diff > 0
order by tmp.diff desc Name PRE SUF DIFF
---------------------------------------------------------------------- ---------- ---------- ----------
session pga memory max 957208 1153816 196608
session pga memory 957208 1153816 196608
bytes sent via SQL*Net to client 6692 37013 30321
redo size 0 8256 8256
session logical reads 52 1508 1456
consistent gets from cache 52 1508 1456
consistent gets 52 1508 1456
bytes received via SQL*Net from client 4385 5639 1254
consistent gets - examination 21 1253 1232
data blocks consistent reads - undo records applied 0 920 920
consistent changes 0 920 920
buffer is not pinned count 17 222 205
table fetch by rowid 6 206 200
buffer is pinned count 0 197 197
CR blocks created 0 160 160
calls to kcmgas 0 160 160
db block changes 0 120 120
redo entries 0 120 120
cleanout - number of ktugct calls 0 120 120
cleanouts and rollbacks - consistent read gets 0 120 120
immediate (CR) block cleanout applications 0 120 120
no work - consistent read gets 19 83 64
heap block compress 0 51 51
rollbacks only - consistent read gets 0 40 40
shared hash latch upgrades - no wait 0 5 5
user calls 28 33 5
execute count 21 23 2
DB time 0 2 2
parse count (total) 22 24 2
session cursor cache count 16 17 1
CPU used when call started 0 1 1
recursive calls 92 93 1
parse count (hard) 0 1 1
session cursor cache hits 4 5 1
CPU used by this session 0 1 1

这一次的查询,返回记录200条。table fetch by rowid=200;

1,逻辑读session logical reads=consistent gets(一致读)+db block gets(当前读);
这个sql只有一致性读session logical reads=consistent gets=1456

2,构建一致性读应用回滚记录统计:data blocks consistent reads(undo records applied):920
等价于consistent changes。

3,需要回滚或者块清除产生的一致性读(这里边没有回滚,只可能有块清除)cleanouts and rollbacks - consistent read gets:120
跟db block changes=120一致,这里进行了块清楚,从而改变了db block。

4,构建一致性读clone的块数:CR blocks created=160
5,块清除产生的redo:redo size 8256

验证了开始的猜测:大量的构建一致性读。

对于这样的热点表,通常有几种手动去调整,但核心都是要分散热点,减少争用。

  1. hash表,分散热点
  2. 调整pctfree,增加pctfred的大小。使用块中的记录数变少,减少构建一致性读的问题。

未完待续。。。

oracle构建一致性读的更多相关文章

  1. oracle如何保证读一致性 第二弹

    Oracle之数据库一致性读的原理 在Oracle数据库中,undo主要有三大作用:提供一致性读(Consistent Read).回滚事务(Rollback Transaction)以及实例恢复(I ...

  2. ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析

    在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果 ...

  3. ORACLE 一致性读原理记录

    什么是一致性读? 一致性读指的是在从查询那一刻起,中间的变化不予理会. 举例说明 比如我有两个帐户A,B. A 有1000块,B有1000快.我查询的时候查询速度比较慢.中间A转500到B账户. 已经 ...

  4. 数据库 一致性读&&当前读

    今天小伙伴问了一个sql的问题: update t set status=2 where id in(select id from t where status=1) 这个sql,在并发的情况下,会不 ...

  5. oracle学习----逻辑读

    1.物理读 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 清空数据缓冲区 SQL> alter session se ...

  6. MySQL 一致性读 深入研究

    一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文档:http://dev.mysql.com/doc/refman/5.6/en/innod ...

  7. MySQL 一致性读 深入研究 digdeep博客学习

    http://www.cnblogs.com/digdeep/p/4947694.html 一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文 ...

  8. SQL Server 一致性读

    我们在Oracle和MySQL数据库中已经对一致性读的概念比较熟悉了,但是在SQL Server中却鲜少提及,但SQL Server自2005版本以来其实也实现了一致性读,几乎所有关系型数据库产品的一 ...

  9. 数据库的一致性读,赃读,多线程与赃读,ACID,UNDO

    赃读 对于对象额同步异步方法,我们在设计自己的程序的时候,一定要考虑的问题整体,不然会出现数据不一致的错误,很经典的就是赃读(dityread) 示例: ​ package com.nbkj.thre ...

随机推荐

  1. 《Think in Java》读书笔记一:对象

    一.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的SmallTalk的五个基本特性,这些特性表现了一种纯粹的面向对象程序设计方式: 1.万物皆为对象. ...

  2. 简单JavaSE数据类型入门

    新的一节学习了JavaSE,今天主要来说一下Java的数据类型及其输出,借用Xmind,可以生动形象的向大家来解释Java的数据类型: 其中数值整数型举例: public class A02{ pub ...

  3. iOS开发——生成二维码——工具类

    啥也不说,直接上源码,拷过去就能用.生成二维码的工具类使用方法在ProduceQRCode.h里有示例说明 分别将下面的ProduceQRCode.h和ProduceQRCode.m对应的代码考到自己 ...

  4. OC - 1.面向过程和面向对象的思想对比

    一.面向过程 1> 思想 面向过程是一种以过程为中心的最基础编程思想,不支持面向对象的特性. 面向过程是一种模块化程序设计方法 2> 开发方法 面向过程的开发方法是以过程(也可以说是模块) ...

  5. js控制文本框输入数字和小数点等

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  6. jQuery表格操作

    $("#tableid tr:gt(0)").each(function(i){ $(this).children("td").each(function(j) ...

  7. jQuery的基础语法实例

    jQuery 基础语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(sele ...

  8. autoplay media studio couldn't load

    AutoPlay Media Studio 7 (English version) is installed on target machine. Following error occurred w ...

  9. 学习基于OpenGL的CAD程序的开发计划(一)

    本人目前从事的工作面对的客户中很多来自高端制造业,他们对CAD/CAE/CAM软件的应用比较多.公司现有的软件产品主要是用于渲染展示及交互,但面对诸如CAD方面的应用(比如基于约束的装配.制造工艺的流 ...

  10. VMware中Ubuntu忘记密码的解决办法

    在VMware中安装了Ubuntu 11.04,经过了一个长假,再次登录的时候居然进不去了,一开始不知道怎样在虚拟机中进入到Grub启动界面,网上搜索了一番,按照以下步骤重新为用户设定了新密码. 重启 ...