服务器进程将数据块读取至BUFFER CACHE之后,会将数据块的DBA(Data Block Address)进行简单的HASH函数计算,并将所有具有相同HASH值的数据块挂载至同一个HASH BUCKET下,同时还会用HASH CHAIN串联起来。因此,利用这种算法,Oracle只要通过计算数据块的HASH值就可以快速定位数据块应该属于哪一条HASH CHAIN,然后定位该数据块。
CR(Consistent Read)块指的是当前数据块和UNDO中的前映像数据整合的数据块。由于同一个数据块的CR块都具有相同的DBA值,所以它们都挂载在同一条HASH CHAIN中。如果过多的CR块驻留在BUFFER CACHE将会导致HASH CHAIN过长,从而增大出现HASH CHAIN争用的概率,所以Oracle设置一个隐含参数_db_block_max_cr_dba,用于限制CR块数量(默认情况下,不能超过6个),通过这种方法在某种程度上减小了HASH CHAIN冲突的概率。Oracle 10g以上版本中,一条HASH CHAIN中一般不会存在很多BLOCK。可以通过以下查询判断系统中是否存在过长的HASH CHAIN:
select hladdr, count(*) from xKaTeX parse error: Unexpected character: '' at position 316: …量,需同时满足以下两个条件: ̲调整BUFFER CACHE的…sgainfo where NAME=‘Buffer Cache Size’;
如果数据块大小为16KB,那么该BUFFER CACHE可大致存放5262336个BLOCK BUFFER,如下所示:
SQL> select 86218113024/16384 from dual;
根据Oracle 10g HASH BUCKET数量的算法,大于2倍db block buffer数量的最小的2的幂次的数值应该是16777216(2的24次方),这个计算值和该数据库中的隐含参数_db_block_hash_buckets值相同。如果要通过修改BUFFER CACHE大小来自动调整HASH BUCKET的数量,那么BUFFER CACHE的大小至少要调整为16777216/2×16384=128GB,然后重启数据库。
注意 为简单起见,以上计算过程没有包含BUFFER HEADER的大小,所以在实际调整过程中,BUFFER CACHE的值要比计算出来的值略大。
详解Oracle HASH CHAIN和HASH BUCKET
2025/5/22 18:27:05
来源:https://blog.csdn.net/weixin_46593978/article/details/148059215
浏览:
次
关键词:详解Oracle HASH CHAIN和HASH BUCKET
版权声明:
本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。
我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com
热文排行
- `git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支
- 《警世贤文》摘抄:处人篇、受恩篇、宽人篇、听劝篇、劝善篇(多读书、多看报、少吃零食多睡觉)
- Vmess协议是什么意思? VLESS与VMess有什么区别?
- Android显示系统(08)- OpenGL ES - 图片拉伸
- 信息科技伦理与道德3:智能决策
- nccl 03 记 回顾:从下载,编译到调试 nccl-test
- 【CVE-2024-38077】核弹级Windows RCE漏洞如何自检并修复该漏洞(附批量漏洞检测工具及分析伪代码)
- 复试数据库原理总结
- windows11 ,ubuntu20.04双系统,ubuntu没有wifi的解决方式
- 【HW必备】用友NC-Cloud存在17处漏洞合集