操作系统存储管理和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存储方式也很类似。

时间: 2024-10-14 10:59:38

操作系统存储管理和oracle数据库(第二篇)的相关文章

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

在上大学的时候,学习操作系统感觉特别枯燥,都是些条条框框的知识点,感觉和实际的关联不大.发现越是工作以后,在工作中越想深入了解,发现操作系统越发的重要.像现在的RHCE市场反响不错,如果想深入地学习,就有很多操作系统的知识需要补补.在实践中结合理论还是不错的一种学习方法.自从接触数据库以后,越来越感觉到很多东西其实都是相通的,操作系统中的很多设计思想在数据库中也有借鉴和改进之处.所谓大道至简,其实就是这个道理.  说到存储管理,是操作系统中式最重要的资源之一.因为任何程序和数据等都需要占有一定的

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

在之前的一篇博文中讨论了分页存储,http://blog.itpub.net/23718752/viewspace-1435671/ 今天看了下分段存储,尽管这部分内容都是大学的课程内容,但是感觉好像没学过一样:) 分段式存储管理系统中,会为每个段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中,这一点上所说的段和数据库中的段还是有着很大的区别,数据库中的段是可以包含多个分区的,各个段 说起分段就会联想到分页,在这一点上自己的认识也很浅薄,查找了下资料,个人认为下面的这段描述

oracle数据库的安装配置

第一部分:安装oracle数据库 第二部分:通过DBCA创建第一个oracle数据库 一. 安装oracle数据库,首先在root用户下执行xhost+不然安装报错,然后切换到oracle用户模式下: [root@stu49 tmp]# xhost + 需要在服务器本机执行 [root@stu49 tmp]# su - oracle 以下执行必须在图形化界面下安装,远程需要VNC或者box支持图形化的来安装 [oracle@oracle10g ~]$ cd /tmp/database/ 二. 修

【性能优化】ORACLE数据库性能优化概述

   为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据库完成的SQL语句数目:数据库用户响应时间是指用户从提交SQL语句开始到获得结果的那一段时间.数据库用户响应时间又可以分为系统服务时间和

ORACLE数据库性能优化

实际上,为了保证ORACLE数据库运行在最佳的性能状态下,在http://www.aliyun.com/zixun/aggregation/32730.html">信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序 SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信息系统开发之前完成的. 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据

Oracle数据库性能优化技术开发者网络Oracle_oracle

正在看的ORACLE教程是:Oracle数据库性能优化技术开发者网络Oracle.介绍:细处着手,巧处用功.高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些.电脑小技巧收集最新奇招高招,让你轻松踏上高手之路.  摘要: Oracle数据库是当前应用最广泛的大型数据库之一,而其性优化直接关系到系统的运行效率.本文以数据库性能优化的基本原则为出发点,阐述了在数据库设计阶段如何避免竞争和如何优化数据访问,在数据库运行阶段如何从操作系统和数据库实例级别上调整内存和I/O来达到数据库性能优化的各种技

细说Oracle数据库与操作系统存储管理二三事

作者介绍 杨建荣,[DBAplus社群]联合发起人.现就职于搜狐畅游,Oracle ACE-A.YEP成员,超7年数据库开发和运维经验,擅长电信数据业务.数据库迁移和性能调优.持Oracle 10G OCP,OCM,MySQL OCP认证,<Oracle DBA工作笔记>作者. 在上大学的时候,学习操作系统感觉特别枯燥,都是些条条框框的知识点,感觉和实际应用的关联不大.发现越是工作以后,在工作中越想深入了解,发现操作系统知识越发重要.在实践中结合理论还是不错的一种学习方法.自从接触数据库以后,

oracle数据库学习入门篇

oracle创建表空间及用户 oracle的学习对于像我这样的新手,还是要一步一步来,先把基本概念搞清楚. 我觉得oracle学习可以分为几个部分: 系统基本使用 系统调优 sql语句编写 sql调优 PL/SQL程序开发 以下讨论都是在单主机模式下进行.欢迎讨论指正. 问题1:什么是实例? 一个oracle软件安装完之后,它有一个默认的实例(instance),同时用户还可以在oracle中增加实例. 实例是一个内存结构(SGA+后台进程),每个实例有一组自己的进程组,用来管理运行实例.实例中

Oracle数据库学习之第一篇

  权限管理: oracle 9里面默认的三个用户名和密码: sys change_on_install //权限最高的管理员 system manager //普通的管理员 scott tiger //普通用户 在oracle 10中,仍然使用这三个用户作为默认用户.但sys和system用户的密码不再默认.在安装数据库的时候,可以由用户指定 .从安全角度考虑,scott用户默认被锁定,所以要使用该用户,需要先解除锁定. 注意:我们要使用oracle数据库,至少要启动两个服务,一个是监听服务,