操作系统存储管理和oracle数据库(第二篇)

简介: 在之前分享过第一篇 关于操作系统存储管理和oracle数据库 http://blog.itpub.net/23718752/viewspace-1359146/ 感觉对自己来说是迈出了艰难的一步,操作系统的概念有时候确实感觉枯燥,但是细细品来,都是前车之鉴,很多的方法或者改进都是在碰到很多问题之后总结琢磨出来的,所以从某种程度上来说,操作系统的基础是很多学科的基石,oracle也在不断的改进,从它的发展中也能看到各种改进的痕迹,这一点和操作系统都是异曲同工的效果,这也是我尝试来从操作系统为主线联系数据的一个主要原因。
在之前分享过第一篇 关于操作系统存储管理和oracle数据库 http://blog.itpub.net/23718752/viewspace-1359146/
感觉对自己来说是迈出了艰难的一步,操作系统的概念有时候确实感觉枯燥,但是细细品来,都是前车之鉴,很多的方法或者改进都是在碰到很多问题之后总结琢磨出来的,所以从某种程度上来说,操作系统的基础是很多学科的基石,oracle也在不断的改进,从它的发展中也能看到各种改进的痕迹,这一点和操作系统都是异曲同工的效果,这也是我尝试来从操作系统为主线联系数据的一个主要原因。
之前讨论过固定分区和可变分区管理的一些情况,它们的主要缺点就是主存使用的低效率和存储分配释放的低速。  固定分区是分区内部的碎片造成主存利用率低,而可变分区是分区外部的碎片,往往小到无法使用,从而主存利用率不高。对于这个问题,分页是一种很有效的方法。
分页技术主要是把主存分为许多同样大小的存储块,并以这种存储块作为存储分配单位。oracle数据库中物理存储单位有段,区,数据块,这个时候所说的数据块和操作系统数据块存在着一点的映射,一般都比操作系统块要大。数据库中默认为8K.数据的存储都是以8K的基本单位来存储的。如果把这一点继续延伸,oracle中的区(extent)就和分页技术中所说的页很类似。
分页存储中的基本实现过程,有以下几点
1)把主存分为相同大小的存储块,叫做页架,页架从0开始,编号依次是0,1,2....
2)用户逻辑地址的分页,用户逻辑地址可以划分为和页架大小相同的部分,叫做页。页号从0开始,依次为0,1,2...
3)逻辑地址的表示,既然说到了逻辑地址,表示方法也很重要。每一个逻辑地址都是相对地址,用一个数对(p,d)来表示,p代表页号,d代表逻辑地址在也好为p的页中相对的地址,也叫偏移量。
听起来挺枯燥啊,可以简单举个例子,我们常看的书就是一个很好的例子,书有很多大小,四开,八开,十六开,可以理解为页架,书中的每一页就是我们所说的页,逻辑地址可以这么理解,一本书有很多章节,小结,比如第二章第3页,我们就能够很快找到,这个时候,页号就是2,偏移量就是3,用(p,d)来表示就是(2,3)

举一个严谨的例子,比如给定一个虚地址3456,假设页面大小为1000B,则第0页对应的地址为0-999,第1页为1000-1999,则虚地址3456=(3,456)
这一点和Oracle中创建表空间时指定的extent management管理方式很相似,比如我们创建一个表空间test指定分区大小为1M,表空间大小为100M,则语句如下:
create tablespace test add datafile '/u01/app/db/test01/data01/test01.dbf' size 100M extent management local uniform size 1M ;
这样我们指定分区大小为1M,如果存储了100M的数据,这样100M就会分为100个分区。如果数据大于分区1M,则可以存储在相应的分区上,不一定连续。

可以用下面的图表来说明。
地址 进程 页号
0-999 进程1 0
1000-1999 进程1 1
2000-2999 进程2  0
3000-3999 进程3 0
4000-4999 进程2  1
5000-5999 进程1 2


对应到每个进程对应的地址,就是我们所说的逻辑地址,比如进程1对应的逻辑地址就是
0-999
1000-1999
2000-3999

所以在分页思想中的难点就是对于地址的表示,我们已经说使用(p,d)来表示,但是这个数在机器指令的地址场中表示还有不同,首先会把地址分为两部分,一部分表示页号,一部分表示页内地址。
虽让说了用触发,但是每次访问一个主存单元都用一次除法得到页号和页内地址就很繁琐,实际上效率要更差。这个时候相比前人也是考虑了很多招数,最后还是使用二进制来搞定,指定页面尺寸是2的幂,这样就会省去很多额外的转换。
最后一个例子很关键,如果看懂了说明你对分页思想算是明白了。

假设页的大小为1KB,计算逻辑地地址为4101的页号,页内地址。
按照二进制的思想,4101可以这样表示 4101=2^12+2^1+2^1+2^0
用0,1来表示就是
0001000000000101
页的大小是1KB=2^10,则在二进制串中,后10位就是对应的页内地址,二进制0101代表的是5,表示页内地址为5
0001000000000101
页号对应的二进制串 000100表示页号为4
所以4101对应的逻辑地址表示为(4,5)

这种方法可以省去除法运算,硬件层面会自动把逻辑地址拆分为两部分,对应页号和页内地址。
问题来了,地址能够表示了,那使用的时候是怎么转换的呢,首先会把逻辑地址抽取出来,像上面的例子,页号是4,然后根据页号为索引找到该页存放的主存页架号。比如存放的地址为2000-2999,则页架号为2,然后把页架号取代逻辑地址,和右边的页内地址组成了最终的物理地址去访问内存。

这种思想还是需要些时间去消化一下,优点也是很明显的,基本上没有页内碎片,同时也不会存在小到无法再用的页外碎片。因为每个碎片都是页架的整数倍。

分页中使用的二进制方式处理地址是一种很值得借鉴的方式,可以减少很多额外的开销,和oracle中的rowid存储方式也很类似。
目录
相关文章
|
6月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
506 93
|
5月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
298 0
|
6月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
417 8
|
8月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
393 11
|
8月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
Oracle 关系型数据库 数据库
|
8月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
8月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
237 0
|
11月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
2146 28
|
9月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。

推荐镜像

更多