对于实际的业务系统,通常有一些热点的表,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. MVC小系列(二十二)【MVC的Session超时,导致的跳转问题】

    由于mvc内部跳转机制的问题,它只在当前的action所渲染的view上进行跳转,如果希望在当前页面跳,需要将mvc方法改为js方法: filterContext.Result = new Redir ...

  2. oracle linux下oracle 10g启动EM、isqlplus及相关命令语法

    转载:http://hancang2000.blog.sohu.com/139239421.html ORACLE_HOME/bin/emctl start dbconsole $ORACLE_HOM ...

  3. Xcode8 Could not build Objective-C module 'FBSDKCoreKit'

    解决方法是: 删除/Users/Rinpe/Library/Developer/Xcode/DerivedData下对应的文件夹即可.

  4. iOS zipzap读取压缩文件

    最近在公司遇到一项需求,在不解压zip文件的情况下读取其中的文件,因为之前使用的ziparchive不能满足现在的需求,所以在网上一阵狂搜,终于找到了zipzap,实话说还真的难找. 之前读取本地zi ...

  5. iOS 图片按比例压缩,指定大小压缩

    使用系统方法UIImageJPEGRepresentation(UIimage *image,CGFloat quality)进行图片质量压缩,暂且叫参数quality为压缩比吧,取值范围为0-1. ...

  6. iOS-开发日志-UITextView介绍

    UITextView 属性 1.     text: 设置textView中文本 _textView.text = @"Now is the time for all good develo ...

  7. c#md5与SHA1验证函数

    /// <summary> /// MD5验证函数 /// </summary> /// <param name="fileName">文件的路 ...

  8. Emgu CV的一个异常的解决方法

    今年组里有大项目落我头上了,并不能像去年一样回家还能搞搞Cocos2dX,一把老泪流了下来... 回到正题,由于组里需要做一个显示板的自动测试项目,涉及到Computer Vision.不得不说,这才 ...

  9. uglifyjs 压缩js

    第一步 安装nodejs dos下执行 node -v npm -v

  10. js 中用Dom2级事件处理函数(改变样式)

    下面这些客户端 javascript代码用到了事件,它给一个很重要的事件--“load" 事件注册了一个事件处理程序.同时展示了注册”click“事件处理函数更高级的一种方法 <!do ...