达梦体系结构:内存架构

达梦体系结构:内存架构

  • 内存架构
    • 数据缓冲区
    • 重做日志缓冲区
    • SQL缓冲区
    • 字典缓冲区
    • 共享内存池
    • 运行时的内存池

达梦数据库由数据库实例构成:

  • 数据库是指磁盘上存放的数据库文件的集合,包括参数文件、控制文件、数据文件、日志文件等。
  • 实例是指一组运行的数据库进程/线程以及一块大型的共享内存。

内存架构

数据缓冲区

数据缓冲区即Buffer Pool,用于缓存从数据文件中读取到内存的数据页。BUFFER包含NORMAL、FAST、RECYCLE、KEEP四种类型,其大小分别由INI配置文件中的BUFFER、FAST_POOL_PAGES、RECYCLE和KEEP四个静态文件参数控制。不同类型的缓冲区的淘汰机制不同。

数据缓冲区采用LRU算法淘汰机制。数据缓冲区的大小直接影响数据库的读写性能,OLTP数据缓冲区建议占服务器物理内存的40%到60%,OLAP数据缓冲区可以更大一些。

检查数据缓冲区信息:

select * from v$bufferpool;select * from v$parameter t where name in ('BUFFER','FAST_POOL_PAGES','RECYCLE','KEEP');

修改数据缓冲区大小为1024M:

alter system set 'BUFFER'=1024 spfile;

重做日志缓冲区

重做日志缓冲区将随机的磁盘写转化为日志顺序写。其大小由INI静态文件参数 RLOG_BUF_SIZE 控制。

select * from v$parameter t where name='RLOG_BUF_SIZE';alter system set 'RLOG_BUF_SIZE'=512 spfile;

重做日志刷盘在以下四种情况下会被触发:

  • 执行COMMIT语句;
  • 每3秒自动触发一次;
  • 日志缓冲区满;
  • 执行CHECKPOINT检查点。

因此,在批量INSERT操作中,减少commit次数可以显著提高数据插入效率。

SQL缓冲区

SQL缓冲区用于缓存执行过的SQL语句、执行计划、缓存结果集(默认不开启)。SQL Cache Pool的大小由静态文件参数 CACHE_POOL_SIZE 控制。

select * from v$parameter t where name='CACHE_POOL_SIZE';alter system set 'CACHE_POOL_SIZE'=200 spfile;

参数 USE_PLN_POOL 用于控制是否启用执行计划重用。默认为1,表示启用。

参数 RS_CAN_CACHE 用于控制是否启用结果集缓存。默认为0,表示不启用。

select * from v$parameter t where name in ('USE_PLN_POOL', 'RS_CAN_CACHE');

与SQL缓冲区相关的数据字典:

--查询缓存项(需要开启USE_PLN_POOL)
select * from v$cacheitem;--查询缓存的SQL文本
select * from v$cachesql;--查询缓存的执行计划(需要开启USE_PLN_POOL)
select * from v$cachepln;--查询缓存的结果集(需要开启USE_PLN_POOL)
select * from v$cachers;

绑定和清理执行计划:

--绑定执行计划
call SP_SET_PLN_BINDED(sql_text, schema_id, plan_type, 2);--清理执行计划
call SP_CLEAR_PLAN_CACHE(plan_id);

更多请参考:https://eco.dameng.com/document-preview/dm/zh-cn/pm/sql-appendix

字典缓冲区

字典缓冲区缓存了数据字典等系统表的数据,其大小由静态文件参数 DICT_POOL_SIZE 控制。

select * from v$parameter t where name='DICT_BUF_SIZE';

与字典缓冲区相关的视图:

select * from v$dynamic_tables where name like '%DICT%';select * from v$DICT_CACHE_ITEM;select * from V$DICT_CACHE;

共享内存池

共享内存池即主内存池(Memory Pool)。当其他内存池(比如运行时内存池)空间不够时,会向主内存池申请空间。

共享内存池是服务器启动时从操作系统中申请的一大片内存,很多需要内存分配的地方都是从主内存池分配。如果需要的内存大于配置值,共享内存池也可以进行自动扩展。

静态文件参数 MEMORY_EXTENT_SIZE 指定了共享内存池每次扩展的大小,系统级动态参数 MEMORY_TARGET 指定了共享内存池能扩展到的最大大小。

select * from v$parameter t where name like 'MEMORY%';
-- MEMORY_EXTENT_SIZE:每次扩展的大小
-- MEMORY_TARGET:目标大小
-- MEMORY_N_POOLS:共享内存池的个数,默认1个,高并发时可设置多个
-- MAX_OS_MEMORY:内存占用OS内存的比例,默认100,建议调到80%-90%

共享内存池相关视图:

select * from v$mem_pool;

运行时的内存池

运行时的内存池的特点是使用时申请,用完即释放。这部分包含虚拟内存池(vm pool)、会话池(session pool)、排序区、哈希区等。

排序区的大小由会话级动态参数 SORT_BUF_SIZE控制。少量的数据排序优先在内存中的排序区进行。排序数据量较大内存中放不下时,会占用临时表空间进行排序。

select * from v$parameter t where name like 'SORT_%';

哈希区的大小由会话级动态参数 HJ_BUF_SIZE控制。哈希连接、HASH分区操作会占用哈希区内存。

select * from v$parameter t where name like 'HJ_%';

排序区和哈希区都属于虚拟缓冲区,实施使用时会申请虚拟内存池或会话池的内存空间。两者大小由以下四个参数确定:

  • VM_POOL_SIZE:静态文件参数,系统虚拟内存池大小,单位为KB。直接从操作系统中申请,有效值范围32~1024*1024
  • VM_POOL_TARGET:静态文件参数,虚拟内存池能扩展到的最大大小,单位为KB。有效值范围0~10*1024*1024,0表示不限制。
  • SESS_POOL_SIZE:系统级动态参数,会话缓冲区大小,单位为KB。有效值范围16~1024*1024。如果申请的内存超过实际能申请的上限,则按16KB大小重新申请。
  • SESS_POOL_TARGET:系统级动态参数,会话缓冲区能扩充的最大大小,单位为KB。有效值范围0~10*1024*1024,0表示不限制。
select * from v$parameter t where name like 'VM_POOL_%';select * from v$parameter t where name like 'SESS_POOL_%';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9Proxy,跨境电商一站式解决方案

文章目录 跨境电商什么是跨境电商跨境电商的机遇跨境电商技术支撑 海外代理IP什么是海外代理IP海外代理IP的作用如何选择海外代理IP 9Proxy9Proxy的优势9Proxy的解决方案价格汇总搜索引擎优化市场调查多重核算数据抓取广告技术 价格上手体验注册登录下载安装数据采集 总结福利 …

【Unity每日一记】如何从0到1将特效图集制作成一个特效

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Java毕业设计 基于SSM jsp商城系统 美妆系统

Java毕业设计 基于SSM jsp商城系统 美妆系统 SSM jsp 商城系统 美妆系统 功能介绍 首页 分类展示商品 搜索商品 登录 注册 邮箱激活 购物车 结算 支付 我的订单 个人信息设置 后台管理 登录 商品管理 添加修改下架商品 商品类型管理 添加修改删除分类 订单管理 确认发货 取消…

Python中主要数据结构的使用

文章目录 数组队列 queue双端队列 deque栈 stack优先队列 priority_queue集合 set映射/字典 map 数组 使用内置类型list实现,主要有如下操作: array [] array.append(1) length len(array) if not array:# 列表为空print("array is empty"…

Vue使用高德地图(快速上手)

1.在高德平台注册账号 2.我的 > 管理管理中添加Key 3.安装依赖 npm i amap/amap-jsapi-loader --save 或 yarn add amap/amap-jsapi-loader --save 4.导入 AMapLoade import AMapLoader from amap/amap-jsapi-loader; 5.直接上代码,做好了注释(初…

子数组 OR/AND/GCD 模板(补题)

3097. 或值至少为 K 的最短子数组 II 给你一个 非负 整数数组 nums 和一个整数 k 。 如果一个数组中所有元素的按位或运算 OR 的值 至少 为 k ,那么我们称这个数组是 特别的 。 请你返回 nums 中 最短特别非空 子数组 的长度,如果特别子数组不存在&a…

Lafida多目数据集实测

Lafida 数据集 paper:J. Imaging | Free Full-Text | LaFiDa—A Laserscanner Multi-Fisheye Camera Dataset 官网数据:https://www.ipf.kit.edu/english/projekt_cv_szenen.php 官网:KIT-IPF-Software and Datasets - LaFiDa 标定数据下载&…

Spring 详细总结

文章目录 第一章 IOC容器第一节 Spring简介1、一家公司2、Spring旗下的众多项目3、Spring Framework①Spring Framework优良特性②Spring Framework五大功能模块 第二节 IOC容器概念1、普通容器①生活中的普通容器②程序中的普通容器 2、复杂容器①生活中的复杂容器②程序中的复…

单细胞RNA测序(scRNA-seq)SRA数据下载及fastq-dumq数据拆分

单细胞RNA测序(scRNA-seq)入门可查看以下文章: 单细胞RNA测序(scRNA-seq)工作流程入门 单细胞RNA测序(scRNA-seq)细胞分离与扩增 1. NCBI查询scRNA-seq SRA数据 NCBI地址: https…

npm常用命令技巧

NPM (Node Package Manager) 是 JavaScript 的包管理工具,广泛用于管理项目中的依赖。无论是前端项目还是Node.js后端项目,NPM 都扮演着重要的角色。本文将介绍 NPM 中常用的几个命令,并提供相应的代码示例。 1. 初始化项目:npm …

[RV1106-LINUX-IPC] 关于 rndis 功能无法使用的解决办法

问题描述 按照开发文档文档,修改对应的BoardConfig.mk,增加 export RK_ENABLE_RNDISy 使用编译命令: ./build.sh sysdrv ./build.sh firmware 烧录固件后,开机使用命令: rndis.sh,出现 rndis 无法识别的情…

腾讯云(CVM)托管进行权限维持

前言 刚好看到一个师傅分享了一个阿里云ECS实战攻防,然后想到了同样利用腾讯云CVM的托管亦可实现在实战攻防中的权限维持。 简介 腾讯云自动化助手(TencentCloud Automation Tools,TAT)是一个原生运维部署工具,它可…

c语言:模拟字符串拷贝功能(strcpy),面试题

面试题&#xff1a;优化中的优化&#xff08;10分满分&#xff09; 字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。 运用函数模拟字符串拷贝&#xff1a;&#xff08;5分&#xff09; 模拟字符串拷贝 #include <stdio.h> void my_strcpy(char* dest, c…

SD-WAN组网面临的安全挑战?如何提供有效的安全措施

SD-WAN&#xff08;软件定义广域网&#xff09;技术的广泛应用&#xff0c;企业面临着越来越多的网络安全挑战。尽管SD-WAN带来了灵活性和效率的提升&#xff0c;但其开放性和基于云的特性也带来了一系列安全威胁。本文将探讨SD-WAN组网面临的安全挑战&#xff0c;并提供一些有…

Mybatis--TypeHandler使用手册

TypeHandler使用手册 场景&#xff1a;想保存user时 teacher自动转String &#xff0c;不想每次保存都要手动去转String&#xff1b;从DB查询出来时&#xff0c;也要自动帮我们转换成Java对象 Teacher Data public class User {private Integer id;private String name;priva…

Docker 运行 io_uring 程序崩溃或出现错误时应如何解决?

这常常出现于在 Docker&#xff08;sandbox 沙盒容器&#xff09;之中运行 io_uring 服务器模式下&#xff0c;解决该问题需要打开容器 “特权模式”。 即&#xff1b; privileged: true 启用特权容器模式&#xff1a; 可以通过在 Docker 容器运行时加上 --privileged 标志来启…

Python 中的 *args 和 **kwargs

在阅读 Python 代码的过程中&#xff0c;不时会看到 *args 和 **kwargs &#xff0c;它们究竟表示什么&#xff1f;又该如何使用呢&#xff1f; 首先要明确&#xff0c;这里的 * 并不是乘法运算符也不是序列重复操作符&#xff0c;**也不是指数运算符也不是幂运算符。 * 出现…

JS继承与原型、原型链

在 JavaScript 中&#xff0c;继承是实现代码复用和构建对象关系的重要概念。本文将讨论原型链继承、构造函数继承以及组合继承等几种常见的继承方式&#xff0c;并提供相应的示例代码&#xff0c;并分析它们的特点、优缺点以及适用场景。 在开始讲解 JavaScript 的继承方式之…

基于javassmJSP的家用电器销售网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

day31 算法 贪心算法1

455 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…