DM数据库架构原理之内存结构
  IE5LYMWlmdvL 2023年11月02日 48 0

2.DM数据库体系架构

谈DM数据库内存结构之前,我们必须先了解下DM数据库的体系架构,本人认为要想学好一门数据库,必须要深入了解它的体系架构,下面这幅图是本人对DM体系架构理解画出来的。

DM数据库架构原理之内存结构_DM

工作原理:
下面我们从一个用户请求开始讲,DM的完整的工作机制是咋样的,首先当客户端的发出一条select语句查询连接请求,监听线程接受到用户请求后会生成一个会话申请任务,加入到工作线程队列,等待工作线程进行处理。 工作线程从工作线程队列中取出select任务,先去SQL缓冲区查找,如果存在会有相同的执行计划执行即可;如果在SQL缓冲池没有找到,调用字典缓冲区对SQL语句进行语法语义分析,如果字典缓冲区里无法解析,需要从数据文件读到字典缓冲区做语法、语义分析,会生成多个执行计划,选择最优的一个最优执行计划去做搜索更新。

3.内存结构

书归正传,接下来我们谈谈为什么要引入内存结构?因为数据库管理系统是一种对内存申请和释放操作频率很高的软件,如果每次对内存的使用都使用操作系统函数来申请和释放,效率会比较低,加入自己的内存管理是 DBMS 系统所必须的。所以说内存结构在DM体系架构中扮演很重要的角色。
DM内存结构主要包括内存池、缓冲区、排序区、哈希区等

3.1 内存池

DM 数据库服务器的内存池包括共享内存池和运行时内存池。
可以通过视图 V$MEM_POOL查询所有的内存池的状态和内存使用情况。

SQL> select name,IS_SHARED,sum(TOTAL_SIZE),
sum(RESERVED_SIZE) from V$MEM_POOL group by name,IS_SHARED;
行号   NAME    IS_SHARED SUM(TOTAL_SIZE)  SUM(RESERVED_SIZE)  

1          SHARE POOL            Y         220200960            39554560
2          BACKUP POOL           Y         4194304              0
3          MON ITEM ARR          Y         134217728            133202176
4          LARGE_MEM_SQL_MONITOR Y         1048576              57600
5          CYT_CACHE             Y         327680               272640
6          DICT CACHE            Y         5242880              4314112
7          CHECK POINT           N         1966080              256
8          SQL CACHE MANAGERMENT Y         20971520             2967040
9          MEM FOR PIPE          Y         65536                32768
10         FLASHBACK SYS         Y         393088               328320
11         HUGE AUX              Y         65536                16896
12         RT_MEMOBJ_VPOOL   N         7340032              768
13         DBLINK POOL       Y         131072               4608
14         NSEQ CACHE        Y         65536                33280
15         PURG_POOL         N         1114112              0
16         PURG_ITEM_POOL    N         1114112              0
17         POLICY GRP        Y         65536                4352
18         SESSION           N         9568256              4637184
19         RT_HEAP           N         294912               148736
20         VIRTUAL MACHINE   N         5373952              381440
21         DSQL STAT HISTORY Y         15728640             8388864
22         DSQL ET POOL      Y         3145728              2359552

3.1.1 共享内存池

共享内存池是 DM Server 在启动时从操作系统申请的一大片内存。提供了一组内存申请/释放接口,为系统中需要动态分配内存的模块提供服务。

SQL>  select PARA_NAME,PARA_VALUE from v$dm_ini where para_name like  '%MEM%POOL%';

行号     PARA_NAME       PARA_VALUE
---------- --------------- ----------
1          MEMORY_POOL     64
2          MEMORY_BAK_POOL 4
3          N_MEM_POOLS     1

MEMORY_POOL决定了以M为单位的公共内存池的大小,上例中64M;N_MEM_POOLS决定把内存池划分为几个独立的单元,以减少并发访问的冲突,提升并发效率;MEMORY_BAK_POOL表示系统保留的备用内存量,当常规的内存申请都失败时,从这个备用内存里分配,然后在上层模块中进行必要的容错处理。可以在v$sysstat中查看当前共享内存池的使用情况。
参数调优:
生产环境建议MEMORY_POOL:设置2048M

3.1.2 运行时内存池

除了共享内存池,DM Server 的一些功能模块在运行时还会使用自己的运行时内存池。
这些运行时内存池是从操作系统申请一片内存作为本功能模块的内存池来使用,如会话内存池、虚拟机内存池等。

3.2 缓冲区

3.2.1数据缓冲区

为了加速数据访问,系统开辟了一个数据缓冲区,使用LRU算法存放经常访问的数据页,逐步淘汰不用的数据页。
使用下列参数,可配置基本的数据缓冲区的大小:

SQL> select PARA_NAME,PARA_VALUE from v$dm_ini  where para_name like '%BUFFER%';

行号     PARA_NAME           PARA_VALUE
---------- ------------------- ----------
1          HUGE_BUFFER         80
2          HUGE_BUFFER_POOLS   4
3          BUFFER              514
4          BUFFER_POOLS        19

其中HUGE_BUFFER 是专门用于列存表的缓存区,BUFFER是用户行存表的数据缓冲区。BUFFER表示初始的系统缓冲区大小,单位为M。通常情况下,如果物理数据量大于物理内存,则应该把BUFFER调到物理内存的三分之二比较合适。
MAX_BUFFER表示最多能扩到多大。在自动扩展后,如果系统的压力在一段时间内比较低,系统又会自动收缩缓冲区。BUFFER_POOLS,一般配置为质数,取值范围为 1~500,并发较大的系统需要配置这个参数;建议BUFFER/ BUFFER_POOLS>=500MB;当MAX_BUFFER>BUFFER时,动态扩展的缓冲区不参与分区。
DM Server 中有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。

3.2.2日志缓冲区

日志缓冲区是用于存放重做日志的内存缓冲区。为了避免由于直接的磁盘 IO 而使系统性能受到影响,系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样, 先将其放置到日志缓冲区中。

3.2.3字典缓冲区

主要用于缓存数据字典信息,如模式信息、表信息、列信息、触发器信息等。
参数调优:
对应参数:DICT_BUF_SIZE;生产环境建议设置:32M;当系统中对象个数较多时适当调大。

3.3 SQL 缓冲区

SQL缓冲区主要为执行SQL语句过程中所提供内存,包括计划、SQL 语句和结果集缓存。
参数调优:
对应的参数:CACHE_POOL_SIZE;生产建议设置一般配置为1000M~4000M。

3.4.排序区

排序缓冲区主要为查询数据排序时提供内存空间。
参数调优:
对应的参数:SORT_BUF_SIZE;生产建议设置:32M;当创建索引时调大点。

3.5.哈希区

DM8 提供了为哈希连接而设定的缓冲区,不过该缓冲区是个虚拟缓冲区。
参数调优:
对应参数:HJ_BUF_GLOBAL_SIZE: 哈希连接使用的内存空间上限;生产环境建议设置:5000M
当高并发、hash操作多适当调大
对应参数:HJ_BUF_SIZE:单个哈希连接使用的内存;生产环境建议设置:500M;有大表的hash连接应调大
复制

3.6.SSD 缓冲区

固态硬盘采用闪存作为存储介质,因没有机械磁头的寻道时间,在读写效率上比机械磁 盘具有优势。在内存、SSD 磁盘、机械磁盘之间,符合存储分级的条件。为提高系统执行效率,DM Server 将 SSD 文件作为内存缓存与普通磁盘之间的缓冲层,称为“SSD 缓存”。
参数调优:
默认 SSD 缓冲区是关闭的,即 SSD_BUF_SIZE 为 0。若要配置 SSD 缓冲区,将其设置为大于 0 的数并指定 SSD_FILE_PATH 即可.

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

IE5LYMWlmdvL