| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> DM7的体系结构 -> 正文阅读 |
|
[大数据]DM7的体系结构 |
目录DM 数据库为数据库中的所有对象分配逻辑空间,并存放在数据文件中。在 DM 数据库内部,所有的数据文件组合在一起被划分到一个或者多个表空间中,所有的数据库内部对象都存放在这些表空间中。同时,表空间被进一步划分为段、簇和页(也称块)。通过这种细分,可以使得 DM 数据库能够更加高效地控制磁盘空间的利用率。这些数据结构之间的关系如下图。 ?在 DM7中存储的层次结构如下:
1.1 表空间在 DM 数据库中,表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。数据库创建 完成后会有5 个表空间:SYSTEM 表空间、ROLL 表空间、MAIN表空间、TEMP 表空间和 HMAIN 表空间。
每一个用户都有一个默认的表空间。对于SYS、SYSSSO、SYSAUDITOR 系统用户,默认的用户表空间是 SYSTEM,SYSDBA 的默认表空间为 MAIN,新创建的用户如果没有指定默认表空间,则系统自动指定 MAIN 表空间为用户默认的表空间。 用户可以通过执行如下语句来查看表空间相关信息。 1.2 记录数据库表中的每一行是一条记录。在 DM 中,除了 Huge 表,其他的表都是在数据页中按记录存储数据的。也就是说,记录是存储在数据页中的,记录并不是 DM 数据库的存储单位,页才是。由于记录不能跨页存储,这样记录的长度就受到数据页大小的限制。数据页中还包含了页头控制信息等空间,因此 DM 规定每条记录的总长度不能超过页面大小的一半。 1.3 页数据页(也称数据块)是 DM 数据库中最小的数据存储单元。页的大小对应物理存储空间上特定数量的存储字节,在 DM 数据库中,页大小可以为 4KB、8KB、16KB 或者 32KB,用户在创建数据库时可以指定,默认大小为 8KB,一旦创建好了数据库,页大小都不能够改变。 1.4 簇簇是数据页的上级逻辑单元 ,由同一个数据文件中 16 个或 32 个连续的数据页组成。在 DM 数据库中,簇的大小由用户在创建数据库时指定,默认大小为 16。假定某个数据文件大小为 32MB,页大小为 8KB,则共有 32MB/8KB/16=256 个簇,每个簇的大小为8K*16=128K。和数据页的大小一样,一旦创建好数据库,此后该数据库的簇的大小就不能够改变。 1.5 段段是簇的上级逻辑分区单元,它由一组簇组成。在同一个表空间中,段可以包含来自不同文件的簇,即一个段可以跨越不同的文件 。而一个簇以及该簇所包含的数据页则只能来自一个文件,是连续的 16或者 32 个数据页。由于簇的数量是按需分配的 ,数据段中的不同簇在磁盘上不一定连续。 2.DM?物理结构DM 数据库使用了磁盘上大量的物理存储结构来保存和管理用户数据。典型的物理存储结构包括:用于进行功能设置的配置文件;用于记录文件分布的控制文件;用于保存用户实际数据的数据文件、重做日志文件、归档日志文件、备份文件;用来进行问题跟踪的跟踪日志文件等。 ? 2.1 配置文件配置文件是 DM 数据库用来设置功能选项的一些文本文件的集合,配置文件以 ini 为扩展名,它们具有固定的格式,用户可以通过修改其中的某些参数取值来达成如下两个方面的目标:
DM系统中配置存储路径如下:(一般位于$DM_HOME/data/实例名下) 每创建一个 DM 数据库,就会自动生成 dm.ini 文件。dm.ini 是 DM 数据库启动所必须的配置文件,通过配置该文件可以设置 DM 数据库服务器的各种功能和性能选项,参数属性分为三种:静态、动态和手动。 a.静态,可以被动态修改,修改后重启服务器才能生效。 动态修改是指 DBA 用户可以在数据库服务器运行期间,通过调用系统过程SP_SET_PARA_VALUE()、SP_SET_PARA_DOUBLE_VALUE()和SP_SET_PARA_STRING_VALUE()对参数值进行修改。 dmmal.ini 是 MAL 系统的配置文件。dmmal.ini 的具体配置内容参考官方手册。需要用到 MAL环境的实例,所有站点 dmmal.ini 需要保证严格一致。 dmarch.ini 用于本地归档和远程归档。 归档类型 ARCH_TYPE 有以下几种: 配置名[ARCHIVE_*]表示归档名,在配置文件中必须唯一。 不能存在相同实例名的不同归档; 不能存在 DEST 相同的不同归档实例; ARCH_TIMER_NAME 为定制的定时器名称, ARCH_SPACE_LIMIT 表示归档文件的磁盘空间限制,如果归档文件总大小超过这个值,则在生成新归档文件前会删除最老的一个归档文件。 DM 安装时生成一个配置文件 dm_svc.conf,dm_svc.conf 文件中包含 DM 各接口及客户端需要配置的一些参数,dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区。如果对 dm_svc.conf 的配置项进行了修改,需要重启客户端程序,修改的配置才能生效。 sqllog.ini用于sql日志的配置。当把INI参数SVR_LOG置为1,才会打开SQL日志。 SP_REFRESH_SVR_LOG_CONFIG() 就会生效。 2.1.2 复制配置dmrep.ini 用于配置复制实例, dmllog.ini 用于配置逻辑日志 dmtimer.ini 用于配置定时器,用于数据守护中记录异步备库的定时器信息或数据复制中记录异步复制的定时器信息 2.2 控制文件每个 DM 数据库都有一个名为 dm.ctl 的控制文件。控制文件内容包含:数据库名称、数据库模式、OGUID、启动时间、表空间名称和数据文件信息、联机日志文件信息等。 数据文件以 dbf 为扩展名,它是数据库中最重要的文件类型,一个 DM 数据文件对应磁盘上的一个物理文件,数据文件是真实数据存储的地方,每个数据库至少有一个与之相关的数据文件。在实际应用中,通常有多个数据文件。 ROLL 表空间的 dbf 文件,称为 ROLL 文件。ROLL 文件用于保存系统的回滚记录,提供事务回滚时的信息。回滚文件整个是一个段。每个事务的回滚页在回滚段中各自挂链,页内则顺序存放回滚记录。 TEMP.DBF 临时数据文件,临时文件可以在 dm.ini 中通过 TEMP_SIZE 配置大小。当数据库查询的临时结果集过大,缓存已经不够用时,临时结果集就可以保存在TEMP.DBF 文件中,供后续运算使用。系统中用户创建的临时表也存储在临时文件中。 2.4 重做日志文件重做日志,又叫 REDO 日志,指在 DM 数据库中添加、删除、修改对象,或者改变数据,DM 都会按照特定的格式,将这些操作执行的结果写入到当前的重做日志文件中。重做日志文件以 log 为扩展名。每个 DM 数据库实例必须至少有 2 个重做日志文件,默认日志名称是数据库名加编号,两个日志文件循环使用。 重做日志文件主要用于数据库的备份与恢复。异常情况下,比如电源故障、系统故障、介质故障,或者数据库实例进程被强制终止等,数据库缓冲区中的数据页会来不及写入数据文件。这样,在重启 DM 实例时,通过重做日志文件中的信息,就可以将数据库的状态恢复到发生意外时的状态。 重做日志文件对于数据库是至关重要的。它们用于存储数据库的事务日志,以便系统在出现系统故障和介质故障时能够进行故障恢复。在 DM 数据库运行过程中,任何修改数据库的操作都会产生重做日志,例如,当一条元组插入到一个表中的时候,插入的结果写入了重做日志,当删除一条元组时,删除该元组的事实也被写了进去,这样,当系统出现故障时,通过分析日志可以知道在故障发生前系统做了哪些动作,并可以重做这些动作使系统恢复到故障之前的状态。 2.5 归档日志文件日志文件分为联机日志文件和归档日志文件。DM 数据库可以在归档模式和非归档模式下运行。只有当数据库处于归档模式下,才将联机日志文件中的内容保存到硬盘中,形成归档日志文件。 重做日志文件就是联机日志文件。联机日志文件指的是系统当前正在使用的日志文件,创建数据库时,联机日志文件通常被扩展至一定长度,其内容则被初始化为空,当系统运行时,该文件逐渐被产生的日志所填充。对日志文件的写入是顺序连续的。然而系统磁盘空间总是有限,系统必须能够循环利用日志文件的空间,为了做到这一点,当所有日志文件空间被占满时,系统需要清空一部分日志以便重用日志文件的空间,为了保证被清空的日志所“保护”的数据在磁盘上是安全的,这里需要引入一个关键的数据库概念——检查点。当产生检查点时,系统将系统缓冲区中的日志和脏数据页都写入磁盘,以保证当前日志所“保护”的数据页都已安全写入磁盘,这样日志文件即可被安全重用。 归档日志文件,就是在归档模式下,重做联机日志被连续拷贝到归档日志后,所生成了归档日志文件。归档日志文件以归档时间命名,扩展名也是 log。但只有在归档模式下运行时,DM 数据库在重做联机日志文件时才能生成归档日志文件。 采用归档模式会对系统的性能产生影响,然而系统在归档模式下运行会更安全,当出现故障时其丢失数据的可能性更小,这是因为一旦出现介质故障,如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点,而如果没有归档日志文件,则只能利用备份进行恢复。 归档日志还是数据守护功能的核心,数据守护中的备库就是通过重做日志来完成与主库的数据同步的。 2.6 逻辑日志文件如果在 DM 数据库上配置了复制功能,复制源就会产生逻辑日志文件。逻辑日志文件是一个流式的文件,它有自己的格式,不受页,簇和段的管理。 2.7 备份文件备份文件以 bak 为扩展名,当系统正常运行时,备份文件不会起任何作用,它也不是数据库必须有的联机文件类型之一。 2.8 跟踪日志文件用户在 dm.ini 中配置 SVRLOG 和 SVR_LOG_SWITCH_COUNT 参数后就会打开跟踪日志。跟踪日志文件是一个纯文本文件,以“dm_commit日期_时间”命名,默认生成在 DM安装目录的 log 子目录下面,管理员可通过 ini 参数 SVR_LOG_FILE_PATH 设置其生成路径。 跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题,基于跟踪日志可以对系统运行状态有一个分析,比如,可以挑出系统现在执行速度较慢的 SQL 语句,进而对其进行优化。 系统中 SQL 日志的缓存是分块循环使用,管理员可根据系统执行的语句情况及压力情况设置恰当的日志缓存块大小及预留的缓冲块个数。当预留块不足以记录系统产生的任务时,系统会分配新的用后即弃的缓存块,但是总的空间大小由 ini 参数SVR_LOG_BUF_TOTAL_SIZE 控制,管理员可根据实际情况进行设置。 打开跟踪日志会对系统的性能会有较大影响,一般用于查错和调优的时候才会打开,默认情况下系统是关闭跟踪日志的。若需要跟踪日志但对日志的实时性没有严格的要求,又希望系统有较高的效率,可以设置参数SQL_TRACE_MASK和SVR_LOG_MIN_EXEC_TIME 只记录关注的相关记录,减少日志总量;设置参数 SVR_LOG_ASYNC_FLUSH 打开 SQL 日志异步刷盘提高系统性能。 2.9 事件日志文件DM 数据库系统在运行过程中,会在 log 子目录下产生一个“dm实例名日期”命名的事件日志文件。事件日志文件对 DM 数据库运行时的关键事件进行记录,如系统启动、关闭、内存申请失败、IO 错误等一些致命错误。事件日志文件主要用于系统出现严重错误时进行查看并定位问题。事件日志文件随着 DM 数据库服务的运行一直存在。 2.10 数据重演文件调用系统存储过程 SP_START_CAPTURE 和 SP_STOP_CAPTURE,可以获得数据重演文件。重演文件用于数据重演,存储了从抓取开始到抓取结束时,DM 数据库与客户端的通信消息。使用数据重演文件,可以多次重复抓取这段时间内的数据库操作,为系统调试和性能调优提供了另一种分析手段。 3.DM 数据库管理系统的内存结构主要包括内存池、缓冲区、排序区、哈希区等。根据系统中子模块的不同功能,对内存进行了上述划分,并采用了不同的管理模式。 DM Server 的内存池包括共享内存池和其他一些运行时内存池。动态视图 V$MEM_POOL 详细记录了当前系统中所有的内存池的状态 3.1 .1共享内存池共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。在 DM Server 的运行期间,经常会申请与释放小片内存,而向操作系统申请和释放内存时需要发出系统调用,此时可能会引起线程切换,降低系统运行效率。采用共享内存池则可一次向操作系统申请一片较大内存,即为内存池,当系统在运行过程中需要申请内存时,可在共享内存池内进行申请,当用完该内存时,再释放掉,即归还给共享内存池。 DM 系统管理员可以通过 DM Server 的配置文件(dm.ini)来对共享内存池的大小进行设置,共享池的参数为 MEMORY_POOL,该配置默认为 200M。如果在运行时所需内存大于配置值,共享内存池也可进行自动扩展,INI 参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,参数 MEMORY_TARGET 则指定了共享内存池能扩展到的最大大小。 3.1.2 运行时内存池除了共享内存池,DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。 3.2?缓冲区数据缓冲区是 DM Server 在将数据页写入磁盘之前以及从磁盘上读取数据页之后,数据页所存储的地方。这是 DM Server 至关重要的内存区域之一,将其设定得太小,会导致缓冲页命中率低,磁盘 IO 频繁;将其设定得太大,又会导致操作系统内存本身不够用。 系统启动时,首先根据配置的数据缓冲区大小向操作系统申请一片连续内存并将其按数据页大小进行格式化,并置入“自由”链中。数据缓冲区存在三条链来管理被缓冲的数据页,一条是“自由”链,用于存放目前尚未使用的内存数据页,一条是“LRU”链,用于存放已被使用的内存数据页(包括未修改和已修改),还有一条即为“脏”链,用于存放已被修改过的内存数据页。 LRU 链对系统当前使用的页按其最近是否被使用的顺序进行了排序。这样当数据缓冲区中的自由链被用完时,从 LRU 链中淘汰部分最近未使用的数据页,能够较大程度地保证被淘汰的数据页在最近不会被用到,减少 IO。 在系统运行过程中,通常存在一部分“非常热”(反复被访问)的数据页,将它们一直留在缓冲区中,对系统性能会有好处。对于这部分数据页,数据缓冲区开辟了一个特定的区域用于存放它们,以保证这些页不参与一般的淘汰机制,可以一直留在数据缓冲区中。 DM Server 中有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。其中,用户可以在创建表空间或修改表空间时,指定表空间属于 NORMAL 或 KEEP 缓冲区。RECYCLE 缓冲区供临时表空间使用,FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。 NORMAL 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下,默认缓冲区为 NORMAL;KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去,主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为KEEP。 日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。单独设立日志缓冲区主要是基于以下原因: 重做日志的格式同数据页完全不一样,无法进行统一管理;重做日志具备连续写的特点; 在逻辑上,写重做日志比数据页 IO 优先级更高。 字典缓冲区主要存储一些数据字典信息,如模式信息、表信息、列信息、触发器信息等。 每次对数据库的操作都会涉及到数据字典信息,访问数据字典信息的效率直接影响到相应的操作效率,如进行查询语句,就需要相应的表信息、列信息等,这些字典信息如果都在缓冲区里,则直接从缓冲区中获取即可,否则需要 I/O 才能读取到这些信息。 SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。 3.4?排序区排序缓冲区提供数据排序所需要的内存空间。当用户执行 SQL 语句时,常常需要进行排序,所使用的内存就是排序缓冲区提供的。在每次排序过程中,都首先申请内存,排序结束后再释放内存。 3.5?哈希区DM7 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。之所以说是虚拟缓冲,是因为系统没有真正创建特定属于哈希缓冲区的内存,而是在进行哈希连接时,对排序的数据量进行了计算。如果计算出的数据量大小超过了哈希缓冲区的大小,则使用 DM7创新的外存哈希方式;如果没有超过哈希缓冲区的大小,实际上使用的还是 VPOOL 内存池来进行哈希操作。 3.6?SSD 缓冲区固态硬盘采用闪存作为存储介质,因没有机械磁头的寻道时间,在读写效率上比机械磁盘具有优势。在内存、SSD 磁盘、机械磁盘之间,符合存储分级的条件。为提高系统执行效率,DM Server 将 SSD 文件作为内存缓存与普通磁盘之间的缓冲层,称为“SSD 缓存”。 更多达梦咨讯请关注 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:20:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |