DM数据库管理系统的内存结构包括内存池、缓冲区、排序区和哈希区等组件。根据子模块的功能,内存被划分并采用不同的管理模式。
DM Server 的内存池包括共享内存池和其他一些运行时内存池。
在DM Server运行期间,为了提高效率,采用了共享内存池的方式。首先,一次性向操作系统申请一片较大的内存作为共享内存池。当系统在运行过程中需要申请小片内存时,可以在共享内存池内部进行申请。使用完毕后,将内存释放,即归还给共享内存池。这样可以避免频繁地向操作系统申请和释放小片内存,提高系统效率。
参数:
MEMORY_POOL,缺省大小为 500M。
MEMORY_EXTENT_SIZE ,指定了共享内存池每次扩展的大小
MEMORY_TARGET 指定了共享内存池扩展到超过该值后,空闲时会收缩到的大小。
DM Server的功能模块在运行时会使用自己的运行时内存池,例如会话内存池、虚拟机内存池等。这些运行时内存池是通过向操作系统申请一块内存来创建的,用于满足特定功能模块的内存
数据缓冲区是DM Server中存储数据页的关键内存区域,用于在将数据页写入磁盘之前以及从磁盘上读取数据页之后进行缓存。它是DM Server中非常重要的一部分。适当设置数据缓冲区的大小对系统性能至关重要。
DM Server 中有四种类型的数据缓冲区,分别是 NORMAL、KEEP、FAST 和 RECYCLE。
NORMAL 缓冲区主要是提供给系统处理的一些数据页,没有特定指定缓冲区的情况下,默认缓冲区为 NORMAL;
KEEP 的特性是对缓冲区中的数据页很少或几乎不怎么淘汰出去,主要针对用户的应用是否需要经常处在内存当中,如果是这种情况,可以指定缓冲区为 KEEP。
RECYCLE 缓冲区供临时表空间使用
FAST 缓冲区根据用户指定的 FAST_POOL_PAGES 大小由系统自动进行管理,用户不能指定使用 RECYCLE 和 FAST 缓冲区的表或表空间。
参数:
用户可以根据自己应用需求情况,指定 dm.ini 文件中 BUFFER(100MB)、KEEP(8MB)、RECYCLE(64MB)、FAST_POOL_PAGES(3000)值(括号中为默认值)。
MULTI_PAGE_GET_NUM:在 DM 配置文件 dm.ini 中,可以指定参数 MULTI_PAGE_GET_NUM 大小(默认值为 1 页),来控制每次读取的页数。当用户需要读取表的大量数据一次性读取多页可以减少 I/O 次数,从而提高了数据的查询、修改效率。
日志缓冲区是用于存放重做日志的内存缓冲区。系统在运行过程中产生的日志并不会立即被写入磁盘,而是和数据页一样,先将其放置到日志缓冲区中。那么为何不在数据缓冲区中缓存重做日志而要单独设立日志缓冲区呢?
在逻辑上,写重做日志比数据页 IO 优先级更高。
参数:
RLOG_BUF_SIZE:该参数对日志缓冲区大小进行控制,日志缓冲区所占用的内存是从共享内存池中申请的,单位为页数量,且大小必须为 2 的 N 次方,否则采用系统默认大小 512 页。
在达梦数据库中,字典缓冲区是用于存储数据库对象信息的内存区域。它包含了数据库中的表、索引、视图、触发器等对象的定义和元数据。
字典缓冲区在达梦数据库的内部实现中起着重要的作用。它存储了数据库对象的结构信息,包括对象的名称、数据类型、大小、索引信息等。并采用 LRU 算法进行字典信息的控制。通过字典缓冲区,达梦数据库可以快速访问和管理数据库对象。
参数:
DICT_BUF_SIZE,默认的配置大小为 5M。
在达梦数据库中,SQL缓冲区(SQL Buffer)是用于存储和管理SQL语句的内存区域。它负责接收、解析、优化和执行SQL语句,并在需要时将执行结果返回给用户。
SQL 缓冲区提供在执行 SQL 语句过程中所需要的内存,包括计划、SQL 语句和结果集缓存。
参数:
CACHE_POOL_SIZE,该参数用来改变 SQL 缓冲区大小,系统管理员可以设置该值以满足应用需求,默认值为 20M。
USE_PLN_POOL,该参数用来支持是否需要计划重用,当指定为非 0 时,则启动计划重用;为 0 时禁止计划重用。
排序缓冲区提供了执行数据排序所需的内存空间。当用户执行 SQL 语句时,通常需要进行排序操作,而排序缓冲区则为此提供所需的内存。在每次排序过程中,首先会分配内存,进行排序操作后再释放内存。
参数:
SORT_BUF_SIZE 在 DM 配置文件 dm.ini 中,由于该值是由系统内部排序算法和排序数据结构决定,建议使用默认值 2M。
DM8提供了用于哈希连接的虚拟缓冲区。虚拟缓冲区指的是在进行哈希连接时,并没有真正创建专门的哈希缓冲区内存,而是在对排序数据量进行计算。如果计算出的数据量超过了哈希缓冲区的大小,DM8采用创新的外存哈希方式;如果数据量未超过哈希缓冲区的大小,则仍然使用内存池进行哈希操作。
参数:
HJ_BUF_SIZE ,由于该值的大小可能会限制哈希连接的效率,所以建议保持默认值,或设置为更大的值。
HAGR_HASH_SIZE, 改参数表示创建哈希表初始化个数,建议保持默认值 100000。
通过 SQL 命令查询动态性能视图 V$DB_CACHE,可以查看当前字典缓存信息、包括数据字典地址、缓存池总空间、实际使用空间等字典缓存信息。
select * from V$DB_CACHE;
通过 SQL 命令查询页面缓冲区动态性能表 V$BUFFERPOOL,可以查看缓冲区页数、页大小、空闲页、淘汰的页数、数据页被引用的次数等页面缓冲区信息。
select * from V$BUFFERPOOL;
通过 SQL 命令查询动态性能视图 V$MEM_POOL 可以查看内存结构地址、是否是共享内存池、初始大小、当前总大小、数据占用大小等内存池信息。
select * from V$MEM_POOL;
文章
阅读量
获赞