数据从哪里来,到哪里去?
按一般的逻辑,首先,数据要驻存在磁盘上,这是永久存在的,然后,为了快速响应,请求的数据缓存于内存。
后面还有很多环节,但是从这里打断一下,第一个问题,数据在外存上的组织形式是怎样的,如何被储存,如何被读取。
数据库的物理结构上表现为多个物理文件,包括数据文件、控制文件和日志文件等等在内,而如何使用这些空间就引申出数据库的逻辑结构,而这个结构的第一层级,就是数据块。
数据块的知识点丰富,这里只是略微提几点。首先,数据块是Oracle数据库最基本的存储单位;其次,Oracle与OS的数据交互都是以数据块为单位进行的,这意味着如果数据块过大,数据少,就会浪费IO,这就好像打算让一节火车去运送两个MP3;数据块可以有多种尺寸。这意味着两件事,1.用户表空间可以使用多尺寸数据块来创建,2.对应于内存结构中buffer cache的default pool需要相应设置。
数据块实在是有点小,我们知道通常它的值是8k,对于空间分配来说,一次分配就可能要上千个数据块。分区将逻辑上连续的数据块组合在一起,以便于空间的分配和释放。因为分区是一个连续的空间,因此,分区的定位就可以利用首尾两个数据块,而不必关心数据块的数量。分区令人印象深刻的一点是它的大小很灵活,良好的适应性使得管理上更为方便。分区成为最小分配单元的弊端也与此有关,分区的连续空间要求和大小不等特点会造成碎片问题。
段,段这个结构非常好理解,Oracle的每个表或索引都会对应着一个段,而且段名对着对象的名字。段有两个要点,一是段由分区组成,二是不要求分区连续。
表空间,表空间是最高层的逻辑结构,它可以包含多个物理文件。可分为三类:永久表空间、临时表空间和UNDO表空间。
永久表空间:需永久保存的数据存放于此。其中SYSTEM、SYSAUX随数据库创建而创建,SYSTEM存着PL/SQL程序单元和数据字典对象,SYSAUX则提供增值功能服务。这哥俩不能被删除,不能改名。
临时表空间:主要做排序运算、创建索引之类时做临时运算空间,算完了系统自动清理。每个数据库至少有一个临时表空间,每个用户也要指定一个,TEMP是默认临时表空间,还是建议每个用户都有自己的。
UNDO表空间:提供回滚空间,可以有多个,但同一时间只能有一个UNDO表空间被激活。
很简单地回忆了一下数据库的逻辑结构,我们基于以上认识做一个假设,有一张表test01,我们想取得其中一些数据,现在它已经存在于磁盘上的某个永久表空间里,我们在SQL*PLUS输入了select语句,接下来,Oracle会怎么做呢?
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25226713/viewspace-683612/
,如需转载,请注明出处,否则将追究法律责任。