YashanDB内存体系

简介: YashanDB内存体系

YashanDB数据库包含多个内存区域,每个内存区域包含多个子组件。

共享内存区域(SGA,Shared Global Area)

共享内存区域是一组所有后台线程以及会话能够共享访问的内存结构,例如数据缓存、SQL缓存、数据字典缓存等。

私有内存区域(SPA,Session Private Area)

私有内存区域是会话独占和管理的内存区域,例如会话栈内存、会话堆内存。

共享内存区域一般共享给多个会话或线程使用,主要包括内存共享池(SHARE POOL)、数据缓存(DATA BUFFER)、有界加速缓存(AC BUFFER)以及虚拟内存(VIRTUAL MEMORY)。

内存共享池(SHARE POOL):内存共享池缓存多种类型的信息,例如SQL解析树、执行计划和数据字典缓存等。

数据缓存(DATA BUFFER):数据缓存用于对数据的访问加速,如果访问的数据块未在缓存中命中则需要先从磁盘读取到该缓存。当缓存占用过高时,一些不经常使用的数据块会被淘汰。

有界加速缓存(AC BUFFER):有界加速缓存类似于数据缓存,但缓存的对象不同,有界加速缓存只用于缓存AC对象。

虚拟内存(VIRTUAL MEMORY):即Materialize zone,虚拟内存主要为需要物化数据的SQL算子所用。

内存共享池包含多个内存区域,各区域描述如下:

SQL缓存:保存SQL解析树和执行计划,SQL引擎在执行语句时,首先会匹配SQL缓存,如果存在相同语句则无需编译直接使用已编译的执行计划,从而避免硬解析,节省开销。

日志缓存:redo日志的缓存区,日志并发写入缓存区,批量刷盘,从而减少磁盘IO和降低响应时延。

PL池:存储过程、包、触发器等对象创建后会加载到PL池,以提高后续再次执行的效率。

数据字典缓存:数据字典包括数据库文件、表、索引、列、用户、权限和其它数据库对象的有关信息。在SQL解析和执行时,SQL引擎查看数据字典,核对和验证对象信息。数据字典是极为频繁使用的信息,通过缓存可极大地提升访问效率。

大对象池:分配大对象的区域,例如超大SQL文本。

全局缓存资源池:存放共享集群的数据块的全局资源元数据信息。

全局锁资源池:存放共享集群的全局锁相关的元数据信息。

全局队列资源池:存放共享集群的全局缓存和锁的排队管理信息。

数据缓存(DATA BUFFER)

数据缓存用于缓存当前或最近使用的从磁盘读取的数据块的拷贝,可优化数据库的I/O减少物理读/写。采用LRU算法管理,当缓存区域内存不足、需要回收内存以重用时,选择一些最长时间未使用的缓存块进行淘汰回收。

数据缓存分为行数据缓存和列数据缓存,行数据缓存用于存放行表相关的数据块拷贝,列数据缓存用于存放列表相关的数据块拷贝。

有界加速缓存(AC BUFFER)

有界加速缓存类似于数据缓存,但缓存的对象不同,有界加速缓存只存放基于有界理论的AC对象。

虚拟内存(VM,VIRTUAL MEMORY)

虚拟内存主要是由需要物化数据的SQL算子使用,且在物化对象过大时将磁盘作为虚拟内存使用。虚拟内存又分为虚拟内存和列虚拟内存,相关SQL算子计算行存表数据时使用行虚拟内存,计算列存表数据时使用列虚拟内存。

私有内存区域(SPA,Session Private Area)

私有内存区域是每个会话创建时分配的独占内存区域,与共享内存区域不同,此区域的内存由会话独占和管理,会话退出时释放,该内存区域主要是满足SQL执行时的各种内存空间需求。该区域主要包括两部分:

会话栈内存:该区域一般用于存放会话执行过程中临时使用的局部变量等。

会话堆内存:该区域一般用于存放生命周期较长的运行期数据。

相关文章
|
Java 数据库
【YashanDB知识库】kettle同步大表提示java内存溢出
在数据导入导出场景中,使用Kettle进行大表数据同步时出现“ERROR:could not create the java virtual machine!”问题,原因为Java内存溢出。解决方法包括:1) 编辑Spoon.bat增大JVM堆内存至2GB;2) 优化Kettle转换流程,如调整批量大小、精简步骤;3) 合理设置并行线程数(PARALLELISM参数)。此问题影响所有版本,需根据实际需求调整相关参数以避免内存不足。
|
SQL Oracle 关系型数据库
【YashanDB知识库】崖山有哪些内存参数,Share Pool各个参数之间有什么关系
【YashanDB知识库】崖山有哪些内存参数,Share Pool各个参数之间有什么关系
【YashanDB知识库】崖山有哪些内存参数,Share Pool各个参数之间有什么关系
|
SQL Oracle 关系型数据库
【YashanDB 知识库】崖山有哪些内存参数,Share Pool 各个参数之间有什么关系
在使用YashanDB时,用户常对内存参数配置有疑问,尤其是23.2及以上版本中,如SQL_POOL_SIZE+DICTIONARY_CACHE_SIZE超100报错,影响跑批性能。主要内存参数包括SHARE_POOL_SIZE、SQL_POOL_SIZE、DICTIONARY_CACHE_SIZE等,需合理配置以优化性能。SHARE POOL内含多个POOL,可动态调整。具体配置方法及观察使用情况的方式详见官网文档。
|
SQL 存储 关系型数据库
【YashanDB知识库】如何从内存中获取SQL语句的执行计划
【YashanDB知识库】如何从内存中获取SQL语句的执行计划
|
缓存 数据库 C语言
【YashanDB知识库】virt虚拟内存远大于res内存问题分析
【YashanDB知识库】virt虚拟内存远大于res内存问题分析
|
Java Shell 数据库
【YashanDB 知识库】kettle 同步大表提示 java 内存溢出
【问题分类】数据导入导出 【关键字】数据同步,kettle,数据迁移,java 内存溢出 【问题描述】kettle 同步大表提示 ERROR:could not create the java virtual machine! 【问题原因分析】java 内存溢出 【解决/规避方法】 ①增加 JVM 的堆内存大小。编辑 Spoon.bat,增加堆大小到 2GB,如: if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx512m" "-XX:MaxPermSize=256m" "-
|
8月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
2829 0
|
8月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
925 0
|
8月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1102 0