oracle构建一致性读
对于实际的业务系统,通常有一些热点的表,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
验证了开始的猜测:大量的构建一致性读。
对于这样的热点表,通常有几种手动去调整,但核心都是要分散热点,减少争用。
- hash表,分散热点
- 调整pctfree,增加pctfred的大小。使用块中的记录数变少,减少构建一致性读的问题。
未完待续。。。
oracle构建一致性读的更多相关文章
- oracle如何保证读一致性 第二弹
Oracle之数据库一致性读的原理 在Oracle数据库中,undo主要有三大作用:提供一致性读(Consistent Read).回滚事务(Rollback Transaction)以及实例恢复(I ...
- ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析
在ORACLE数据库中有物理读(Physical Reads).逻辑读(Logical Reads).一致性读(Consistant Get).当前模式读(DB Block Gets)等诸多概念,如果 ...
- ORACLE 一致性读原理记录
什么是一致性读? 一致性读指的是在从查询那一刻起,中间的变化不予理会. 举例说明 比如我有两个帐户A,B. A 有1000块,B有1000快.我查询的时候查询速度比较慢.中间A转500到B账户. 已经 ...
- 数据库 一致性读&&当前读
今天小伙伴问了一个sql的问题: update t set status=2 where id in(select id from t where status=1) 这个sql,在并发的情况下,会不 ...
- oracle学习----逻辑读
1.物理读 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 清空数据缓冲区 SQL> alter session se ...
- MySQL 一致性读 深入研究
一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文档:http://dev.mysql.com/doc/refman/5.6/en/innod ...
- MySQL 一致性读 深入研究 digdeep博客学习
http://www.cnblogs.com/digdeep/p/4947694.html 一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文 ...
- SQL Server 一致性读
我们在Oracle和MySQL数据库中已经对一致性读的概念比较熟悉了,但是在SQL Server中却鲜少提及,但SQL Server自2005版本以来其实也实现了一致性读,几乎所有关系型数据库产品的一 ...
- 数据库的一致性读,赃读,多线程与赃读,ACID,UNDO
赃读 对于对象额同步异步方法,我们在设计自己的程序的时候,一定要考虑的问题整体,不然会出现数据不一致的错误,很经典的就是赃读(dityread) 示例: package com.nbkj.thre ...
随机推荐
- Eclipse中绑定java源代码
如何在Eclipse sdk中查看jar源代码如:*.jar 1.点 “window”-> "Preferences" -> "Java" -&g ...
- C#微信公众号开发 -- (四)获取API调用所需的全局唯一票据access_token
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.access_to ...
- C#微信公众号开发 -- (三)用户关注之后自动回复
通过了上一篇文章之后的微信开发者验证之后,我们就可以做微信公众号的代码开发了. 当我们点击关注某个公众号的时候,有时候会发现他会自动给我们回复一条消息,比如欢迎关注XXX公众号.这个功能其实是在点击关 ...
- node.js 小爬虫 imooc 2016.03.06
爬虫目标:获取http://www.imooc.com/learn/348网页中的章节标题和视频信息. var http = require('http'); var cheerio = requir ...
- Lua数组排序
代码 network = { {name = "grauna", IP = "210.26.30.34"}, {name = "arraial&quo ...
- Cocos2d-x 3.0 cocostudio骨骼动画的动态换肤
概述 游戏中人物的状态会发生改变,而这种改变通常要通过局部的变化来表现出来.比如获得一件装备后人物形象的改变,或者战斗中武器.防具的损坏等.这些变化的实现就要通过动态换肤来实现.在接下来的这个Demo ...
- centOS 6.4 vsftpd 配置
###########配置流程########### 1 新建一个ftp用户,为了跟vsftp的虚拟用户对应 #useradd -d /home/vftpuser -s /sbin/nologi ...
- 开发错误日志之Unix/Linux命令未执行或无结果等且程序无错误
在Unix/Linux环境中开发时,特别要注意权限问题,否则经常找不到错误的原因,其实就是因为权限所致.
- 获取本机IP、mac地址、计算机名
python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...
- php发送http请求
http请求有get,post. php发送http请求有三种方式[我所知道的有三种,有其他的告诉我]. file_get_contents();详情见:http://www.cnblogs.com/ ...