软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 数据库 -> 探讨SELECT语句的元数据&动态取样&读一致性导致的一致性读和递归操作 -> 正文阅读

[数据库]探讨SELECT语句的元数据&动态取样&读一致性导致的一致性读和递归操作


前几天,论坛上的同行在讨论SELECT语句的元数据,动态取样和读一致性导致的一致性读和递归问题,今天有时间,就试着进行了测试,本人测试环境如下:
win7_64+Oracle11.2.0.4_64
那么,下面就说下测试过程:
1、元数据:当用户向数据库发出SELECT语句后,在解析和执行过程中,肯定是需要读取SELECT相关的元数据,这样,SELECT的统计数据中就会包含递归操作,做这个测试的前提是要把其他因素排除掉(动态取样,一致性读):
session1:
[img]http://img.blog.csdn.net/20160401224802414?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
session2:
[img]http://img.blog.csdn.net/20160401224828524?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
由上可见,在表没有任何数据块分配和取样的前提下,SELECT语句解析执行过程中,还是发生了递归,而且期间产生的读取,并未计入该语句的统计数据中。
2、读一致性:当我们往表里插入数据后,表分配了一些数据块,在没有动态取样情况下,发生了读一致性,发生的一致性读的数量等于需要读取的表的数据块和undo块的数量。
session1:
[img]http://img.blog.csdn.net/20160401225117884?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
session2:
[img]http://img.blog.csdn.net/20160401225138588?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center[img]http://img.blog.csdn.net/20160401225138588?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160401225215213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
这里,为什么说cr的数量等于表数据块加上undo数据块呢?因为当session1中提交时,session2中的cr数量要少很多,那时,在没有其他并发修改操作的情况下,就不再需要读取undo块,大家有时间可以测试下,这里不再贴出测试过程。
3、动态取样:在表数据量不变和发生动态取样的情况下,当有动态取样发生时,cr和无动态取样发生时有较大差别,这说明动态取样虽然导致了递归的发生,但其中发生的cr也被计入了查询语句的统计数据中。
session2:
[img]http://img.blog.csdn.net/20160401225602730?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
[img]http://img.blog.csdn.net/20160401225620871?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
以上我们通过hint强制查询语句在解析运行时发生level为8的动态取样,可见发生了递归操作,而cr也有相应增加,而当我们再次运行该语句时,因为不需要再次解析,所以,也就没有了动态取样,因此,此时cr有所降低。
4、redo:我们还注意到,在session1中往表中插入数据但没提交的情况下,session2中select该表时,会产生redo数据,并且,经过进一步测试,这些redo数据也确实写入了redo log file中。
[img]http://img.blog.csdn.net/20160401225732605?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
那么,这个redo size是怎么产生的呢?也许有人会说延迟块清除,但是,这里session1中插入的数据并未提交,而且,每次执行select语句,都会有几乎等量的redo产生,这和延迟块清除不同。延迟块清除只有在数据提交后,第一次查询时会产生redo数据,再次查询就不会发生,而且产生的redo也不会这么多。仔细想想,唯一的可能就是,在利用undo数据构造cr块的过程中,也记录了对这些db block的redo数据,并写入了redo log file中,目的就是万一系统此时发生崩溃,再次重启时,通过redo log file中的redo数据重构内存中的这些cr块。
以上为个人测试和临时的想法,仅供大家参考。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-02 21:00:00  
数据库 最新文章
Python&MySQL&PyQt
最新用python来操作mysql完全解析
mongodb的安装详解
1.PDO简介
《MySQL必知必会学习笔记》:高级联结
【翻译自mos文章】怎么对Microsoft(Office)
MyCAT全局表描述及示例
ocp
关于SQL数据表存储过程表名前缀换成dbo代码
数据库调优教程(二)慢查询数据准备
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年7日历
2018-7-19 13:48:49
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --