数据库与实例
数据库:DM 数据库指的是磁盘上存放在 DM 数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。
实例:一般是由一组正在运行的 DM 后台进程/线程以及一个大型的共享内存组成。
DM 数据库存储在服务器的磁盘上,而 DM 实例则存储于服务器的内存中。
简单来说,实例就是操作 DM 数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。
在任何时候,一个实例只能与一个数据库进行关联(装载、打开或挂起数据库)。
在大多数情况下,一个数据库也只有一个实例对其进行操作。
在 DM 共享存储集群(DMDSC)中,多个实例可以同时装载并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。
DM 逻辑存储结构
DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。
在 DM 数据库内部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都存放在这些表空间中。
表空间被进一步划分为段、簇和页(也称块)。
通过这种细分,可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。
由上图可以看出,在 DM8 中存储的层次结构如下:
····数据库由一个或多个表空间组成;
····每个表空间由一个或多个数据文件组成;
····每个数据文件由一个或多个簇组成;
····段是簇的上级逻辑单元,一个段可以跨多个数据文件;
····簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;
····页是数据库中最小的分配单元,也是数据库中使用的最小的 IO 单元;
DM 逻辑存储结构:数据库 --> 表空间 --> 段 --> 簇 --> 页(块)
1、表空间
DM 数据库中的所有对象在逻辑上都存放在表空间中,物理上都存储在所属表空间的数据文件中。
在创建 DM 数据库时,会自动创建 5 个表空间:SYSTEM、ROLL、MAIN、TEMP、HMAIN
SYSTEM:该表空间存放了有关 DM 数据库的字典信息,用户不能在 SYSTEM 表空间创建表和索引。
ROLL:该表空间用来存放事务运行过程中执行 DML 操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。
MAIN:在创建用户时,如果没有指定默认表空间,则系统自动指定该表空间为用户的默认表空间。
TEMP:当用户的 SQL 语句需要磁盘空间来完成某个操作时,DM 数据库会从该表空间分配临时段。
HMAIN:当用户在创建 HUGE 表时,未指定 HTS 表空间的情况下,该表空间充当默认 HTS 表空间。
每个用户都有一个默认的表空间。
SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM,而 SYSDBA 系统用户的默认用户表空间是 MAIN。
如果用户在创建表的时候,指定了存储表空间A,并且和用户的默认表空间B不一致时,表存储在用户指定的表空间A中,且默认情况下,表上的索引也将存储在表空间A中。
----查看SYSTEM、ROLL、MAIN、TEMP表空间信息
select * from v$tablespace;
----查看HMAIN表空间信息
select * from v$huge_tablespace;
段是簇的上级逻辑分区单元,段由一组簇组成。
在同一个表空间中,段可以包含来自不同数据文件的簇,即一个段可以跨越不同的数据文件。
由于簇的数量是按需分配的,所以数据段中的不同簇在磁盘上不一定连续。
段可以分为数据段、临时段、回滚段。
表中的数据以表数据段结构存储,索引中的数据以索引数据段结构存储。
DM 以簇为单位给每个数据段分配空间,当数据段的簇空间用完时,DM 数据库就给该段重新分配簇,段的分配和释放完全由 DM 数据库自动完成。
可以在创建表或索引时设置存储参数来决定数据段的簇如何分配。
当用户使用 CREATE 语句创建表/索引时,DM 创建相应的数据段。
对于分区表,每个分区使用单独的数据段来容纳所有数据,分区表上的非分区索引,使用一个索引数据段来容纳所有索引数据。
对于分区索引,每个分区使用一个单独的索引数据段来容纳其数据。
在 DM 数据库中,所有的临时段都创建在临时表空间中,这样可以分流磁盘设备的I/O,也可以减少由于在 SYSTEM 或其他表空间内频繁创建临时数据段而造成的碎片。
当处理一个查询时,经常需要为 SQL 语句的解析与执行的中间结果(如排序)准备临时空间。
DM 数据库会自动地分配临时段的磁盘空间。
对于临时表及其索引,DM 数据库也会为它们分配临时段。
DM 数据库在回滚表空间的回滚段中保存了用于恢复数据库操作的信息。
对于未提交事务,当执行回滚操作时,回滚记录被用来做回滚变更操作。
在数据库恢复阶段,回滚记录被用来做任何未提交变更的回滚。
在多个并发事务运行期间,回滚段还为用户提供读一致性。
簇是数据页的上级逻辑单元,由同一数据文件中 16 个或 32 个或 64 个连续的数据页组成。
簇的大小由用户在创建数据库时指定,默认大小为 16,簇的大小不能改变。
当创建一个表/索引时,DM 为表/索引的数据段分配至少一个簇(默认为一个簇),同时数据库会自动生成对应数量的空闲数据页,供后续操作使用。
····当 DM 数据库的表空间为新的簇分配空闲空间时,首先在表空间按文件从小到大的顺序在各个数据文件中查找可用的空闲簇,找到后进行分配;
····如果各数据文件都没有空闲簇,则在各数据文件中查找空闲空间足够的,将需要的空间先进行格式化,然后进行分配;
····如果各数据文件的空闲空间也不够,则选一个数据文件进行扩充。
在删除表/索引对象中的记录的时候,DM 数据库通过修改数据文件中的位图来释放簇,释放后的簇被视为空闲簇,可以供其他对象使用。
当用户删除了表中所有记录时,DM 数据库仍然会为该表保留 1-2 个簇供后续使用。
若用户使用 DROP 语句来删除表/索引对象,则此表/索引对应的段以及段中包含的簇全部收回。
对于临时表空间,DM 数据库会自动释放在执行 SQL 过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间。
需要注意的是,临时表空间文件在磁盘所占大小并不会因此而缩减,可以通过系统函数 SF_RESET_TEMP_TS 来进行磁盘空间的清理。
数据页(也称数据块)是 DM 数据库中最小的数据存储单元。
页的大小对应物理存储空间上特定数量的存储字节,也大小可以为 4BK、8KB、16KB 或 32KB,默认为 8KB,不能改变。
页的组成:页头控制信息、数据、空闲空间、行偏移数组。
页头控制信息包含了关于页类型、页地址等信息。
页的中部存放数据,为了更好的利用数据页,在数据页的尾部专门留出一部分空间用于存放行偏移数组,行偏移数组用于标识页上的空间占用情况以便管理数据页自身的空间。
https://eco.dameng.com