首页 > 数据库技术 > 详细

PostgreSQL-内存上下文

时间:2019-09-27 18:39:42      阅读:277      评论:0      收藏:0      [点我收藏+]

 

内存上下文背景:

需要经常处理大量以指针传值的查询,存在内存泄漏的问题,直到查询结束才能收回内存。所以实现了新的内存管理机制-内存上下文(MemoryContext)

内存上下文通俗解释:

一个内存上下文相当于一个进程环境,进程环境间不互相影响,pgSQL提供了在内存上下文进行内存操作的函数:pallloc、pfree、repalloc等。

MemoryContext:

pgSQL的每一个子进程都拥有多个私有的内存上下文,每个子进程的内存上下文组成一个树形结构,根节点为TopMemoryContext。

创建一个新的内存上下文,将其添加到已有的内存上下文作为子节点。清楚内存的时候可以从根节点遍历,将所有节点的内存完全释放技术分享图片

内存处理函数:包含了对内存上下文进行操作的函数集合

技术分享图片 

 1.对内存上下文的操作,都是全局变量AllocSetMethods中实现的操作函数来控制的。

 2.在任何时候,都有一个"当前"的MemoryContext,记录在全局变量CurrentMemoryContext。进程就在这个内存上下文中调用palloc分配内存。

 3.变换内存上下文,使用MemoryContextSwitchTo函数

AllocSet:

管理一个内存上下文中的内存块是通过AllocSet结构完成,MemoryContext只作为AllocSet头部信息,AllocSet是指向AllocSetContext结构的类型指针。

技术分享图片

 

 可以在进行重置的时候,检查isReset是否为true,如果为true就不需要重置操作,提高效率。

keeper在重置时只会把内存里的内容删除。

MemoryContext创建与初始化:

调用MemoryContextInit做初始化。先创建根节点TopMemoryContext,然后在该节点下创建ErrorContext用于错误恢复处理

PostgreSQL-内存上下文

原文:https://www.cnblogs.com/itsad/p/11599227.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!