问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

缓冲区工作原理

发布网友 发布时间:2022-04-19 20:18

我来回答

1个回答

热心网友 时间:2023-07-11 21:19

本文探讨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。由于内存条的价格在持续下跌,现在只需要较小的或者不需要硬件投资就能够通过完全缓冲一个较小的数据库从而显著地提高性能。

转ttp://database.ccidnet.com/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
问:和面面粉的发酵,常用哪些类似于食品添加剂一样的东西使面粉... 高数 求广义积分的值 ∫(0,∞)(arctan πx-arctan x)/xdx求解答!!给具体过程 ...1+x^2)^2/3] dx 这个表达式的反常积分怎么求啊 (0->+&)积分限... 地方专项计划和地方农村专项计划有何区别? 地方专项与农村专项的区别 烤箱如何烤豆子 电烤箱烤豆而是多久 电烤箱烤豆需要多长时间。 存钱什么宝 微信余额宝叫什么 以点数据和线数据为例,说明缓冲区分析原理及其在... 缓冲区分析及其用途是什么 地理信息系统中缓冲区分析的原理和用途是什么? 贵州有几个市,地区和自治州 贵州是中国第一个国家大数据综合试验区。同样位于大西南,是什么因素,阻碍了广? 有小车驾驶证可以开摩托车吗 有驾驶证可以开别人的车吗? 我有驾驶证可以住宿吗 什么驾驶证能开所有车? 有驾驶证能做什么 有驾驶证能做什么副业? 有了C1驾驶证可以考D驾驶证吗 有驾驶证能开别人的车吗 有驾驶证可以办理信用卡吗 有c1驾驶证可以驾驶摩托车吗 有了驾照是不是什么车都可以开 有驾驶证没有行驶证可以开车吗 有机动车驾驶证可以开摩托车吗 有驾照就能开车吗? 有驾驶证的好处有哪些? GIS中各类空间分析原理是什么?什么时候用?怎么用? 缓冲区分析的缓冲区分析的意义 缓冲区溢出攻击,的基本原理是什么? Java中IO缓冲区的原理是什么 缓冲溶液的缓冲原理怎么解释 缓冲溶液的缓冲原理是什么? 缓冲区分析原理,ArcGIS执行缓冲区 计算股票指数时使用的缓冲区技术具体是怎么个计算... 缓冲区溢出的基本原理是什么 单片机中的显示缓冲区是什么,有什么用 缓冲区分析的缓冲区的产生情况 CPU缓存的工作原理 arcgis中缓冲区分析的三种方法的区别 计算机中存储器Cache的基本原理是什么?虚拟内存的... 解释缓冲区溢出的原理,并给出例子. 鹌鹑蛋跟什么吃相克 鹌鹑蛋不能与什么一块吃 鹌鹑蛋和鸡蛋谁更营养? 鹌鹑蛋和鸡蛋哪个的营养价值更高一些? 鹌鹑蛋和什么菜最搭配