数据库是建立在操作系统基础上的,操作系统的上限决定数据库的上限,操作系统的资源管理方式影响数据库的管理方式。
段页式机制的通俗理解,为了最大化的资源利用,操作系统根据不同的应用进程需求开辟一个固定的内存固定空间,然后在上进行以页为基本单元的买卖。
举例Oracle的SGA以及PGA,SGA和PGA就是系统分配给Oracle的两个大段,根据用户的需求可以自行调整 。SGA开放共享给Oracle所有的服务器进程和后台,PGA是专享给用户相关的进程。
SGA的内存结构如下。
- Database buffer cache:缓存了从磁盘上检索的数据块。
- Redo log buffer:缓存了写到磁盘之前的重做信息。
- Shared pool:缓存了各用户间可共享的各种结构。
- Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
- Java pool:保存java虚拟机中特定会话的数据与java代码。
- Streams pool:由Oracle streams使用。
- Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
- Recycle buffer cache:保存buffer cache中即将过期的数据。
- nK block size buffer:为与数据库默认数据块大小不同的数据块提供缓存。用来支持表空间传输。
PGA的内存结构如下。
- Private SQL area:包含绑定信息、运行时的内存结构。每个发出sql语句的会话,都有一个private SQL area(私有SQL区)
- Session memory:为保存会话中的变量以及其他与会话相关的信息,而分配的内存区。
Oracle还有大量后台进程。
- SMON - 系统监控进程,负责实例和数据库恢复。
- PMON - 进程监控进程,负责进程控制和故障转移。
- DBWn - 数据库写进程,负责将缓冲区数据刷新到数据文件。
- LGWR - 日志写进程,负责将日志缓冲区数据写入日志文件。
- CKPT - 检查点进程,负责进行数据文件和控制文件的检查点更新。
- MMON - 内存监控进程,负责监控和优化SGA内存。
- ARCn - 归档进程,负责存档和备份填满的日志文件。
- RECO - 恢复进程,负责控制和协调数据库恢复操作。
- MMAN - 内存管理进程,管理数据库内存结构。
- MMNL - 共享服务器监视进程,管理共享服务器进程。
相对于后台进程,SGA和PGA是活动进程,每时每刻都在处理用户请求或者与其它进程在协调工作中。Oracle以SGA和PGA为基本点,多个进程协调的方式构建相对复杂,但是相对安全的软件架构。
Postgresql也是采用多进程管理内存的方式
- 活动进程postmaster,作用是启动和关闭数据库实例
- 活动进程walwriter , 预写式日志,把操作记录写到磁盘中。
- 活动进程pgarch ,WAL日志会循环使用,PGARCH会在覆盖前把WAL日志备份出来。
- 后台进程bgwriter,协助后台进程 ,把共享内存中的脏页写到磁盘的数据文件上
- 后台进程autovacumn,自动清理已经进行DELETE或者update操作后,释放内存。
- 后台进程pgstat统计数据收集进程,pgstat辅助进程主要是做数据的统计收集工作。
- 后台进程logger系统日志进程,协助后台进程,收集所有的stderr日志写到文件上。
openGauss是单进程多线程架构,基于pg9.2.4基础上研发的,原来的多进程改造成多线程管理。
openGauss的内存管理进行了多方面的扩展和改造,目的是适配多线程架构,更好的满足企业化应用诉求。openGauss内存管理主要做了如下的功能:
- 引入jemalloc开源库,替换glibc的内存分配和释放,减少内存碎片
- 引入逻辑内存管理机制,控制进程内存使用,避免出现OOM问题
- 引入多种内存上下文(共享内存上下文、栈式内存上下文、对齐内存上下文),满足不同场景代码开发诉求
- 引入ASAN(Address Sanitizer)开源库,在Debug版本下定位内存泄漏和内存越界问题 引入丰富的内存查询视图,方便观察内存使用情况,定位潜在内存问题。
上述三个产品的内存管理方式共同点是趋同接近操作系统的段页式机制。随着数据的写入,在内存中有一个 Buffer Pool,Buffer Pool与磁盘遥遥相应,互相映射 。数据从磁盘中读出,写入到内存中,客户的请求update或者insert对内存的数据经过处理【脏页】,脏页在指定的时间刷新到硬盘上。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




