一、关于磁盘的基本知识
1、磁盘的物理特性
磁盘每一个盘片是扁平的圆盘,上面覆盖有磁性物质,信息就记录在这上面。盘片的表面划分成
磁道,磁道又划分成
扇区,扇区是磁盘读出和写入信息的最小单位。现在磁盘扇区大小一般为512字节,每一个盘面有50000-100000条磁道,每个磁盘有1-5个盘面,是同轴布置的。磁盘的读写头安装在一个磁盘臂上,当一个盘片的读写头在第i条磁道时,其他盘片的读写头也都在各自盘片的第i条磁道上。所以第i条磁道合在一起称为一个
柱面。
2、磁盘的性能度量
访问时间:从发出读写请求到数据开始传输之间的时间。包括寻道时间和旋转等待时间。
寻道时间:磁盘臂移动寻找到正确的磁道所花的时间。典型的寻道时间在2-30ms。
旋转等待时间:在某个磁道上旋转到要访问的扇区所需要的时间。
3、磁盘块访问
磁盘的I/O请求是由文件系统和大多数操作系统具有虚拟内存管理器产生的。每个请求指定了要访问的磁盘地址,这个地址是以块号的形式提供的。
一个块是一个逻辑单元,它包含固定数目的扇区。块大小一般在512字节到几kb之间。
数据在磁盘和主存之间以块为单位传输。
二、文件的记录和组织
1、文件组织
数据库被映射为不同的文件,这些
文件又被分为定长的存储单元,称为块。块是存储分配和数据传输的基本单元。大多数数据库使用4kb-8kb的块大小。一个块中可能包含多条记录(一个记录就类似于一个表中的一行),这种现象是十分普遍的。
数据库的文件组织有定长组织和变长组织两种方式。
定长组织的缺点:
考虑大学数据库中instructor记录组成的一个文件。文件中每个记录都是53字节的。如果用定长组织的话,前53字节存储第一条记录,然后的53字节存储第二条记录,依次类推。这样会导致两个问题:
1. 除非块大小是53的倍数(很难做到),否则一些记录会跨过块的边界,这样我们访问某条记录时会访问两个块。访问块会带来块传输和块搜索的开销。
2. 删除记录会变得困难,我们必须用其他文件记录来填充该空间。
所以我们一般采用变长组织文件。一种常用的方法是分槽的页结构。用来在块中组织记录。
块头包含:
1、块头中记录条目个数
2、块中空闲空间的末尾处
3、一个由包含记录位置和记录大小的条目组成的数组
实际的记录是从块的尾部开始连续排列的。
2、文件中记录的组织
堆文件组织:一条记录可以放在文件中任何位置。记录无顺序。
顺序文件组织:记录根据“搜索码”的值顺序组织。搜索码是任何一个或多个属性的集合。
散列文件组织:每条记录某些属性上计算一个散列函数。散列函数的结果确定了记录应该放在哪个块中。
通常,每个关系的记录用一个单独的文件存储。但是
多表聚簇文件组织是将几个不同的关系记录存储在同一个文件中。而且不同的关系的相关记录存储在相同的块中。这样便于连接操作,我们可以使用一次块的读操作来读取满足连接条件的记录。
3、数据库缓冲区
数据库的一个主要目标是尽量减少磁盘和存储器之间的传输的块数目。所以要尽量在主存储器中保存尽可能多的块数目。所以缓冲区就由此而来了。缓冲区是在主存储器中用于存储磁盘块的拷贝的那一部分。
缓冲区由缓冲区管理器来管理。这一点和操作系统中的虚拟存储管理器是类似的,但还是有很大的区别。主要有:
- 1.数据库的大小比机器的硬件地址空间大很多,所以存储器地址不足以对所有磁盘块寻址。
- 2.缓冲区替换策略不同。多数操作系统采用最近最少使用(LRU)策略。但是数据库还会使用最近最常使用(MRU)策略,立即丢弃策略。
- 3.被钉住的块。不允许写回磁盘的块称为被钉住的块。这适用于当一个块更新操作正在进行时, 数据库不允许将该块写回磁盘。
- 4.块的强制写出。有时不需要某个块所占的缓冲区空间,但是还是会将它强制写出。这适用于系统在崩溃时保存数据在