网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.供应商:面对艰难的许可证选择.
.数据库SQLServer 驱动程序版本造.
.深度分析:Oracle收购JBoss &BE.
.解析Oracle各种数据类型.
.轻松建立Linux拨号服务.
.Oracle数据库异构服务原理及实例.
.Oracle开发(一).Windows下配置使.
.vsftpd-1.1.3配制文件vsftpd.conf.
.ORACLE在HP-UX下的系列问题处理(.
._disable_logging对于性能的影响.
.[Oracle] Ora2html--收集Oracle数.
.在 Oracle10g 上构建 PL/SQL Web.
.W2k Server下Oracle 9iAS安装报告.
.ORACLE入门之APACHE虚拟服务器设.
.PL/SQL学习笔记(六).
.Oracle PL/SQL游标的学习.
.DELPHI 调用 Oracle 存储过程并返.
.ORACLE培训教程(1)-ORACLE系统概.
.Linux Shadow-Password-HOWTO.
.Actualtests Oracle 1Z0-147 V04.

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

发表日期:2008-2-9


本文探讨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 touches FROM x$bh WHERE tch > 10 ORDER BY tch desc;
这项高级查询技术在用于追踪DEFAULT缓冲池里的对象时尤其有用。一旦定位了热数据块,你就能够把它们从DEFAULT缓冲池移动到KEEP缓冲池。 完全缓冲数据库 从Oracle 8i开始,随着64位寻址的出现,你就能够创建一个完全在数据缓冲区里缓冲的数据库。现今,任何数据库通常只用不到20G的内存就能够被完全缓冲,而更大的数据库仍然需要部分数据缓冲区。 要利用完全数据缓冲的优势,就要记住从内存取回数据块和从磁盘取回数据块的时间差。对磁盘的访问时间是以毫秒或者说千分之一秒来计算的,而内存的速度是以纳秒或者说十亿分之一秒来计算的。因此内存的访问速度要快三个数量级,即通常要比磁盘的访问速度块将近14,000倍。 在完全缓冲Oracle数据库的时候,你需要仔细制定缓冲的规划,并在需要的时候增加db_block_ buffers参数的值。在缓冲整个数据库的时候,多数据缓冲池就不再需要了,所以你可以在DEFAULT数据池里缓冲所有的数据块。 假如要计算已分配数据块的数量,就要用下面的命令:
select sum(blocks) from dba_data_files; SUM(BLOCKS) ----------- 243260 select sum(blocks) from dba_extents; SUM(BLOCKS) ----------- 321723
已使用数据块的真实数量要通过查看DBMS_ROWID以获得真实的数据库地址来确定,就像下面这样:
select sum(blocks)
from dba_data_files;
随着数据库的扩展,你必须不忘增加参数的值。在数据库的启动阶段,你需要调用一个脚本加载缓冲区,这一步很简单,就像执行select count(*) from xxx;这样的命令,因为数据库里所有表格都会起作用。这就确保所有的数据块都被缓冲,从而大幅提高读取操作的性能。但是,写操作仍然会需要磁盘I/O。由于内存条的价格在持续下跌,现在只需要较小的或者不需要硬件投资就能够通过完全缓冲一个较小的数据库从而显著地提高性能。
上一篇:Oracle 9i数据库中动态重配置深入分析 人气:740
下一篇:Oracle10g数据库的4种存储形式 人气:623
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐