教你Oracle的数据缓冲区是如何工作

2016-01-29 14:44 43 1 收藏

教你Oracle的数据缓冲区是如何工作,教你Oracle的数据缓冲区是如何工作

【 tulaoshi.com - Oracle教程 】

本文探讨Oracle数据缓冲区的内部机制——Oracle用这一内存来防止不必要的数据块从磁盘重读。理解Oracle数据缓冲区如何操作,是成功地运用它们调整数据库性能的关键。

在Oracle 8i以前的版本里,当数据块被从磁盘送进数据缓冲区的时候,数据块会被自动地放置到最近使用过的数据列表的前部。但是,这种行为从Oracle 8i开始就变了:新数据缓冲区被放置在缓冲区链的中部。在调节数据库的时候,你的目标就是为数据缓冲区分配尽量多的内存,而不会导致数据库服务器在内存里分页。数据缓冲区每小时的命中率一旦低于90%,你就应该为数据块缓冲区增加缓冲区。

数据块的存活时间

在调入数据块之后,Oracle会不停地跟踪数据块的使用计数(touch count,也就是说,这个数据块被用户线程所访问的次数)。如果一个数据块被多次使用,它就被移动到最近使用过的数据列表的最前面,这样就能确保它会在内存里保存一段较长的时间。这种新的中点插入技术会确保最常使用的数据块被保留在最近使用过的数据列表的最前面,因为新的数据块只有在它们被重复使用的时候才会被移动到缓冲区链的最前面。

总而言之,Oracle 8i数据缓冲池的管理要比先前的版本更加有效。通过将新的数据块插入缓冲区的中部,并根据访问活动(频率)调整缓冲区链,每个数据缓冲区就被分割成两个部分:热区(hot section),代表数据缓冲区的最近使用的一半;冷区(cold section),代表数据缓冲区的最早使用的一半。只有那些被反复请求的数据块才会被移进每个缓冲池的热区,这就让每个数据缓冲区在缓冲常用数据块的时候效率更高。

热区的大小要用下面的隐藏参数来配置:

_db_percent_hot_default _db_percent_hot_keep _db_percent_hot_recycle

Oracle公司作为官方没有推荐更改这些隐藏参数。只有懂得内部机制和希望调节其数据缓冲区行为的有经验人员才应该使用这些参数。

找到热数据块

Oracle 8i保留着一个X$BH内部查看表,用来显示数据缓冲池的相对性能。X$BH查看表有下列数据列:

Tim:两次使用之间的时间差,和_db_aging_touch_time参数相关。

Tch:使用计数,它和被使用过_db_aging_hot_criteria次之后从冷区移入热区直接相关。

由于Tch数据列用来追踪特定数据块的使用次数,所以你就能够编写一个字典查询来显示缓冲区里的热数据块——使用计数大于10的数据块,就像下面这样:

SELECT   obj      object,   dbarfil  file#,   dbablk   block#,   tch      touchesFROM   x$bhWHERE   tch  10ORDER BY   tch desc;

这项高级查询技术在用于追踪DEFAULT缓冲池里的对象时尤其有用。一旦定位了热数据块,你就能够把它们从DEFAULT缓冲池移动到KEEP缓冲池。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)[next]

完全缓冲数据库

从Oracle 8i开始,随着64位寻址的出现,你就能够创建一个完全在数据缓冲区里缓冲的数据库。现今,任何数据库通常只用不到20G的内存就能够被完全缓冲,而更大的数据库仍然需要部分数据缓冲区。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

要利用完全数据缓冲的优势,就要记住从内存取回数据块和从磁盘取回数据块的时间差。对磁盘的访问时间是以毫秒或者说千分之一秒来计算的,而内存的速度是以纳秒或者说十亿分之一秒来计算的。因此内存的访问速度要快三个数量级,即通常要比磁盘的访问速度块将近14,000倍。

在完全缓冲Oracle数据库的时候,你需要仔细制定缓冲的规划,并在需要的时候增加db_block_ buffers参数的值。在缓冲整个数据库的时候,多数据缓冲池就不再需要了,所以你可以在DEFAULT数据池里缓冲所有的数据块。

如果要计算已分配数据块的数量,就要用下面的命令:

来源:http://www.tulaoshi.com/n/20160129/1494060.html

延伸阅读
怎样判别孩子智力是否超常 家长怎样判别自己的孩子是否属于智力超常呢? (1)看孩子是否有浓厚的学习兴趣、求知欲。 智力超常孩子的一个重要特点是学习兴趣浓厚,求知欲旺盛。凡是他们碰到的问题,都想追根问底,不弄明白不罢休。如我国科技大学少年班的神童宁铂,从小就有旺盛的求知欲,如饥似渴地阅读各种各样...
标签: Web开发
工作区布局 在 Windows 中,Dreamweaver 提供了一个将全部元素置于一个窗口中的集成布局。在集成的工作区中,全部窗口和面板都被集成到一个更大的应用程序窗口中。 注意   Windows 工作区还有一个"编码器"选项,它默认将面板组停靠在左侧,并在"代码"视图中显示"文档"窗口。有关更多信息,请参见《使用 Dreamweaver...
标签: 美容护肤 护肤
T区肌肤护理最棘手的,不管干性皮肤、油性皮肤还是混合型皮肤多多少少都有T区出油现象。所以对于T区的控油工作,我们更要下足功夫,那么 T区如何控油 最有效呢?下面小编就为你分享T区控油方法,快来看看吧! T区如何控油 T区如何控油方法一:洗面奶清洁肌肤 脸上油脂分泌旺盛,能及时有效的去油方法就是洁面。但是注意的是洁面不是用清水...
标签: 洗脸
手把手教你如何洗脸 T区U区方法不同 我们买昂贵的化妆品,天天敷面膜,不就是为了让自己的脸老的不是那么快嘛。可是如果基础没有打好的话,那么再昂贵的化妆品也是毫无益处。洗脸就是护肤最基础的步骤,尤其是T部爱出油,和脸颊部位应该分开处理。T部应该重点去除角质。本文中图老师小编就和大家聊聊去角质的事,好皮肤轻松洗出来!...
代码如下: create or replace PROCEDURE proceudre_name AS BEGIN DECLARE sPara VARCHAR(50); sPara2 VARCHAR(50); CURSOR c_cursor IS SELECT ID,Name FROM Temp_table; BEGIN OPEN c_cursor; LOOP FETCH c_cursor INTO sPara, sPara2; EXIT WHEN c_cursor%NOTFOUND; BEGIN --just do what you want. END; END LOOP; CLOSE ...