DM8 学习

一 数据库体系架构

1 DM逻辑结构概述

1.1 数据库和实例

在DM7之前“数据库”和“实例”这两个术语经常可以互相替换,意义也很接近。但是DM7之后的版本就有很大的差别。

1.1.1 数据库

数据库是指DM数据库产品,或者数据库实例,也有可能是正在运行的DM数据库实例,还有可能是DM数据库运行中所需的一系列物理文件的集合等。但是,当同时出现DM数据库和实例时,DM数据库指的时存放在DM数据库中的数据的集合,一般包括:数据文件、日志文件、控制文件以及临时数据文件等。

1.1.2 实例

实例一般是由一组正在运行的DM后台进程/线程以及一个大型的共享内存组成。实例就是操作DM数据库的一种手段,是用来访问数据库的内存结构以及后台进程的集合。

DM数据库存储在服务器的磁盘上,而DM实例则存储于服务器的内存中。通过运行DM实例,可以操作DM数据库中的内容。在任何时候,一个实例只能与一个数据库进行关联(装载、打开或者挂起数据库)。多数情况下,一个数据库也只有一个实例对其进行操作。在DM共享存储集群(DMDSC)中,多个实例可以同时装在并打开一个数据库(位于一组由多台服务器共享的物理磁盘上)。此时,我们可以同时从多台不同的计算机访问这个数据库。

1.2 DM逻辑存储结构

DM数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在DM数据库内部,所有的数据文件组合在一起划分到一个或者多个表空间中,并且所有的数据库内部对象都存放在这些表空间中。同时,表空间被进一步划分为i段、簇和页(也称块)。能够使得数据库更加高效地控制磁盘空间的利用率。

DM8中存储的层次结构如下

  • 数据库由一个或多个表空间组成;

  • 每个表空间由一个或多个数据文件组成;

  • 每个数据文件由一个或多个簇组成;

  • 段是簇的上级逻辑单元,一个段可以跨多个数据文件;

  • 簇由磁盘上连续的页组成,一个簇总是在一个数据文件中;

  • 页是数据库中最小的分配单元,也是数据库中使用的最小的IO单元。

数据库 > 表空间 > 数据文件 > 段 > 簇 > 页

1.2.1 表空间

在数据库中,表空间由一个或者多个数据文件组成。DM数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。

在创建DM数据库时,会自动创建5个表空间:system表空间、roll表空间、main表空间、temp表空间和hmain表空间。

  • system表空间存放了有关DM数据库的字典信息,用户不能在system表空间创建表和索引。

  • roll表空间完全由DM数据库自动维护,用户无需干预。该表空间用来存放事务运行过程中执行DML(数据操作语言)操作之前的值,从而为访问该表的其他用户提供表数据的读一致性视图。

  • main表空间在初始化库的时候,就会自动创建一个大小为128M的数据文件main.dbf。在创建用户时,如果没有指定默认表空间,则系统自动指定main表空间为用户默认的表空间。

  • temp表空间完全由DM数据库自动维护。当用户的SQL语句需要磁盘空间来完成某个操作时,DM数据库会从temp表空间分配临时段。如创建索引、无法在内存中完成的排序操作、SQL语句中间结果集以及用户创建的临时表等都会使用到temp表空间。

  • hmain表空间属于HTS表空间,完全由DM数据库自动维护,用户无需干涉。当用户在创建huge表时,未指定HTS表空间的情况下,充当HTS表空间。

每一个用户都有一个默认的表空间。对于SYS、SYSSSO、SYSAUDITOR系统用户,默认的用户表空间是SYSTEM,SYSDBA的默认表空间为main,新创建的用户如果没有指定默认表空间,则系统自动指定main表空间为用户默认的表空间。如果用户在创建表的时候,指定了存储表空间A,并且和当前用户的默认表空间B不一致时,表存储在用户指定的表空间A中,并且默认情况下,在这张表上面建立的索引也将存储在A中,但是用户的默认表空间时不变的,仍为B。

一般情况下,建议用户自己创建一个表空间来存放业务数据,或者将数据存放在默认的用户表空间main中。

  • system、roll、main和temp表空间查看语句:

    select * from V$tablespace;

  • hmain表空间查看语句:

select * from V$huge_tablespace;

1.2.2 记录

数据库表中的每一行是一条记录。在DM中,除了huge表,其他表都是在数据页中按记录存储数据的。也就是说,记录是存储在数据页中的,记录并不是DM数据库的存储单位,页才是。由于记录不能跨页存储,这样记录的长度就受到数据页大小的限制。数据页中还包含了页头控制信息等空间,因此DM规定每条记录的总长度不能超过页面大小的一半。

1.2.3 页

数据页(也叫数据块)是DM数据库中最小的数据存储单元。页的大小对应为物理存储空间上特定数量的存储字节,在DM数据库中,页大小可以为4KB、8KB、16KB或者32KB,用户在创建数据库时可以指定,默认大小为8KB,一旦创建好了数据库,则在该库的整个生命周期内,页大小都不能够改变。

  • DM数据库页的典型格式:包括页头控制信息、数据、空闲空间、行偏移数组。

  • 页头控制信息包含了关于页类型、页地址等信息。页的中部存放数据,为了更好地利用数据页,在数据页的尾部专门留出一部分空间用于存放行偏移数组,行偏移数组用于表示页上的空间占用情况以便管理数据页自身的空间。

  • fillfactor时DM数据库提供的一个与性能有关的数据页级存储参数,它指定一个数据页初始化后插入数据时最大可以使用空间的百分比,该值在创建表/索引时可以指定。设置fillfactor参数的值,是为了指定数据页中的可用空间百分比(fillfactor)和可扩展空间百分比(100-fillfactor)。可用空间用来执行更多的insert操作,可扩展空间用来为数据页保留一定的空间,以防止在今后的更新操作中增加列或者修改变长列的长度时,引起数据页的频繁分裂。当插入的数据占据的数据页空间百分比低于fill factor时,允许数据插入该页,负责将当前数据页中的数据分为两个部分,一部分保留在当前数据页中,另一部分存入一个新页中。

  • 对于DBA来说,使用fill factor时应该在空间和性能之间进行权衡。为了充分利用空间,用户可以设置一个很高的fillfactor值,如100,但是这可能会导致在后续更新数据时,频繁引起页分裂,而导致需要大量的I/O操作。为了提高更新数据的性能,可以设置一个相对较低的fill factor值,使得后续执行更新操作时,可以尽量避免数据页的分裂,提升I/O性能,这是以牺牲空间利用率来换取性能的提高。

1.2.4 簇

簇是数据页的上级逻辑单元,由同一个数据文件中16个或32个或64个连续的数据页组成。在DM数据库中,簇的大小由用户在创建数据库时指定,默认大小为16。假定某个数据文件的大小为32MB,页的大小为8KB,则共有32MB/8KB/16=256个簇,每个簇的大小为8K*16=128K。和数据页的大小一样,一旦创建好数据库,此后该数据库的簇的大小就不能够改变。

  • 分配数据簇

    • 当创建一个表/索引的时候,DM为表/索引的数据段分配至少一个簇,同时数据库会自动生成对应数量的空闲数据页,供后续操作使用。如果初始分配的簇中所有数据页都已经用完,或者插入/更新数据需要更多的空间,DM数据库将自动分配新的簇。在缺省情况下,DM数据库在创建表/索引时,初始分配1个簇,当初始分配的空间用完时,DM数据库会自动扩展。

    • 当DM数据库的表空间为新的簇分配空闲空间时,首先在表空间按文件从小到大的顺序在各个数据文件中查找可用的空间簇,找到后进行分配;如果各数据文件都没有空闲簇,则在个数据文件中查找空闲空间足够的,将需要的空间先进行格式化,然后进行分配;如果个文件的空闲空间也不够,则选一个数据文件进行扩充。

  • 释放数据簇

    • 对于用户数据表空间,在用户将一个数据段对应的表/索引对象DROP之前,该表对应的数据段会保留至少1个簇不被回收到表空间中。在删除表/索引对象中的记录的时候,DM数据库通过修改数据文件中的位图来释放簇,释放后的簇被视为空闲簇,可以供其他对象使用。当用户删除了表中所有记录时,DM数据库仍然会为该表保留1-2个簇供后续使用。若用户使用DROP语句来删除表/索引对象,则此表/索引对应的段以及段中包含的簇全部收回,并供存储于此表空间的其他模式对象使用。

    • 对于临时表空间,DM数据库会自动释放在执行SQL过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间。

    • 对于回滚表空间,DM数据库将定期检查回滚段,并确定是否需要从回滚段中释放一个或多个簇。

1.2.5 段

段是簇的上级逻辑分区单元,它由一组簇组成。在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件。而一个簇以及该簇所包含的数据页则只能来自一个文件,是连续的16或者32个数据页。由于簇的数量是按需分配的,数据段中的不同簇在磁盘上不一定连续。

  • 数据段

    • 段可以被定义成特定对象的数据结构,如表数据段或索引数据段。表中的数据以表数据段结构存储,索引中的数据以索引数据段结构存储。DM以簇为单位给每个数据段分配空间,当数据段的簇空间用完时,DM数据库就给该段重新分配簇,段的分配和释放完全由DM数据库自动完成,可以在创建表/索引时设置存储参数来决定数据段的簇如何分配。

    • 当用户使用create语句创建表/索引时,DM创建相应的数据段。表/索引的存储参数用来决定对应数据段的簇如何被分配,这些参数将会影响与对象相关的数据段的存储与访问效率。对于分区表,每个分区使用单独的数据段来容纳所有数据,对于分区表上的非分区索引,使用一个索引数据段来容纳所有数据,而对于分区索引,每个分区使用一个段都索引数据段来容纳其数据。表的数据段和与其相关的索引段不一定要存储在同一表空间中,用户可以在创建和索引时,指定不同的表空间存储参数。

  • 临时段

    • 在DM数据库中,所有的临时段都创建在临时表空间中,这样可以分流磁盘设备的I/O,也可以减少由于在system或其他表空间内频繁创建临时数据段而造成的碎片。

    • 当处理一个查询时,经常需要为SQL语句的解析与执行的中间结果准备临时空间。DM数据库会自动地分配临时段地磁盘空间。例如,DM在进行排序操作时就可能需要使用临时段,当排序操作可以在内存中执行,或设法利用索引就可以执行时,就不必创建临时段。对于临时表及其索引,DM数据库也会为他们分配临时段。

    • 临时段的分配和释放完全与系统自动控制,用户不能手工进行干预。

  • 回滚段

    • DM数据库在回滚表空间的回滚段中保存了用于恢复数据库操作的信息。对于未提交事务,当执行回滚语句时,回滚记录被用来做回滚变更。在数据库恢复阶段,回滚记录被用来做任何未提交变更的回滚。在多个并发事务运行期间,回滚段还为用户提供读一致性,所有正在读取受影响行的用户将不会看到行中的任何变动,直到他们事务提交后发出新的查询。

    • DM数据库提供了全自动回滚管理机制来管理回滚信息和回滚空间,自动回滚管理消除了管理回滚段的复杂性。此外,系统将尽可能保存回滚信息,来满足用户查询回滚信息的需要。事务被提交后,回滚数据不能再回滚或者恢复,但是从数据读一致性的角度出发,长时间运行查询可能需要这些早期的回滚信息来生成早期的数据页镜像,基于此,数据库需要尽可能长时间保存回滚信息。DM数据库会收集回滚信息的使用情况,并根据统计结果对回滚信息保存周期进行调整,数据库将回滚信息保存周期设为比系统中活动的最长的查询时间稍长。

2 DM物理存储结构

DM数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。典型的物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志文件等。

2.1 配置文件

配置文件时DM数据库用来设置功能选项的一些文本文件的集合,配置文件以ini为扩展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的目标:

启用/禁用特定功能项;

针对当前系统运行环境设置更优的参数值以提升系统性能。

2.1.1 DM数据库服务配置

1)DM.ini

每创建一个DM数据库,就会自动生成dm.ini文件。dm.ini是DM数据库启动所必须的配置文件,通过配置该文件可以设置DM数据库服务器的各种功能和性能选项。

当dm.ini中的某参数值设置为非法值时,若设置值与参数类型不兼容,则参数实际取值为默认值;若设置值小于参数取值范围的最小值,则实际取值为最小值;若设置值大于参数取值范围的最大值,则实际取值为最大值。

参数属性分为三种:静态、动态和手动。静态,可以被动态修改,修改后重启服务器才能生效。

动态,可以被动态修改,修改后即时生效。动态参数又分为会话级和系统级两种。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。

手动,不能被动态修改,必须手动修改dm.ini参数文件,然后重启才能生效。

动态修改是指DBA用户可以在数据库服务器运行期间,通过调用系统过程SP_SET_PARA_VALUE()

、SP_SET_PARA_DOUBLE_VALUE()和SP_SET_PARA_STRING_VALUE()对参数值进行修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值