YashanDB内存体系
本文内容来自YashanDB官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/概念手册/实例架构/内存体系.html
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执行时的各种内存空间需求。该区域主要包括两部分:
-
会话栈内存:该区域一般用于存放会话执行过程中临时使用的局部变量等。
-
会话堆内存:该区域一般用于存放生命周期较长的运行期数据。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库