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 ...
随机推荐
- 《Think in Java》读书笔记一:对象
一.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的SmallTalk的五个基本特性,这些特性表现了一种纯粹的面向对象程序设计方式: 1.万物皆为对象. ...
- 简单JavaSE数据类型入门
新的一节学习了JavaSE,今天主要来说一下Java的数据类型及其输出,借用Xmind,可以生动形象的向大家来解释Java的数据类型: 其中数值整数型举例: public class A02{ pub ...
- iOS开发——生成二维码——工具类
啥也不说,直接上源码,拷过去就能用.生成二维码的工具类使用方法在ProduceQRCode.h里有示例说明 分别将下面的ProduceQRCode.h和ProduceQRCode.m对应的代码考到自己 ...
- OC - 1.面向过程和面向对象的思想对比
一.面向过程 1> 思想 面向过程是一种以过程为中心的最基础编程思想,不支持面向对象的特性. 面向过程是一种模块化程序设计方法 2> 开发方法 面向过程的开发方法是以过程(也可以说是模块) ...
- js控制文本框输入数字和小数点等
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- jQuery表格操作
$("#tableid tr:gt(0)").each(function(i){ $(this).children("td").each(function(j) ...
- jQuery的基础语法实例
jQuery 基础语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(sele ...
- autoplay media studio couldn't load
AutoPlay Media Studio 7 (English version) is installed on target machine. Following error occurred w ...
- 学习基于OpenGL的CAD程序的开发计划(一)
本人目前从事的工作面对的客户中很多来自高端制造业,他们对CAD/CAE/CAM软件的应用比较多.公司现有的软件产品主要是用于渲染展示及交互,但面对诸如CAD方面的应用(比如基于约束的装配.制造工艺的流 ...
- VMware中Ubuntu忘记密码的解决办法
在VMware中安装了Ubuntu 11.04,经过了一个长假,再次登录的时候居然进不去了,一开始不知道怎样在虚拟机中进入到Grub启动界面,网上搜索了一番,按照以下步骤重新为用户设定了新密码. 重启 ...