Postgresql动态共享内存类型
一、简介
linux为多个进程通信提供了不同的IPC机制,如:System V , POSIX 和 MMAP,所以Postgresql共享内存管理也支持以上类型。
在Postgresql中可以使用dynamic_shared_memory_type参数指定共享内存类型。
默认使用posix,修改参数后需要重启数据库。
dynamic_shared_memory_type = posix # the default is the first option
# supported by the operating system:
# posix
# sysv
# windows
# mmap
# (change requires restart)
二、共享内存如何工作
当一个进程的数据需要与另一个进程共享时,第一个进程简单地将数据写入共享内存段。 一旦写入数据,第二个进程就可以使用该数据。 一旦创建了共享内存对象,访问该对象的进程就可以使用指针直接读写该对象。这里不会对各种类型的原理进行详解。
三、
三、Postgresql动态共享内存
创建和管理共享内存段是操作系统的任务,一旦创建了共享内存段:
1、动态共享内存段需要进行引用计数,这样当最后一个映射被移除时,段就会自动消失
2、如果后台进程被不干净地终止,PG的postmaster需要在崩溃-重启过程中删除所有剩余的段,和重新初始化主共享内存段类似。
3、如果所有进程都被不干净地终止了,那么下一次postmaster启动时需要清理仍然存在的段。
四、动态共享控制段
动态共享控制段由postmaster创建其他进程之前创建,它用于存储所有动态共享内存段的标识列表,以及每个段的引用计数。它有以下作用
1、如果Postgresql经历了一个奔溃恢复周期,那么会扫描控制段并删除其它涉及的控制段,然后重建控制段。
2、如果postmaster通过kill -9干掉并重启,那么它会找到旧的控制段删除并重建。
3、如果操作系统被重新启动,旧的控制段将不再存在,除了在map-a-regular-file下,该处理方法是通过扫描相关目录而不是依赖于控制段来处理和清理。
修改dynamic_shared_memory_type参数指定类型

如果遇到以下错误:
ERROR: could not open shared memory segment “/PostgreSQL.xxxxxxx”: No such file or directory
说明动态内存控制段不存在,有可能被删除了,可以通过重启数据库,或者断开所有连接再重连,均达到重新创建动态内存控制段的目的



Postgresql动态共享内存类型的更多相关文章
- postgresql共享内存的三个结构体
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/16105797 postgresql的共享内存维护主要 ...
- 【CUDA 基础】5.2 共享内存的数据布局
title: [CUDA 基础]5.2 共享内存的数据布局 categories: - CUDA - Freshman tags: - 行主序 - 列主序 toc: true date: 2018-0 ...
- ipcclean - 从退出的PostgreSQL服务器中删除共享内存和信号灯
SYNOPSIS ipcclean DESCRIPTION 描述 ipcclean 删除当前用户拥有的所有共享内存段和信号灯集. 它的目地是在 PostgreSQL 服务器 (postmaster(1 ...
- OpenMP共享内存并行编程详解
实验平台:win7, VS2010 1. 介绍 平行计算机可以简单分为共享内存和分布式内存,共享内存就是多个核心共享一个内存,目前的PC就是这类(不管是只有一个多核CPU还是可以插多个CPU,它们都有 ...
- 几个系统调用分析 glibc中的malloc调用和共享内存原理
本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/wri ...
- 修改linux共享内存大小
这是实际linux系统显示的实际数据: beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmax 33554432 beijibing@bjb-deskt ...
- System V IPC 之共享内存
IPC 是进程间通信(Interprocess Communication)的缩写,通常指允许用户态进程执行系列操作的一组机制: 通过信号量与其他进程进行同步 向其他进程发送消息或者从其他进程接收消息 ...
- PostgreSQL进程和内存结构
PostgreSQL数据库启动时,会先启动一个叫做Postmaster的主进程,还会fork一些辅助子进程,这些辅助子进程各自负责一部分功能,辅助子进程分类如下: $ ps -ef | grep po ...
- Nginx之共享内存与slab机制
1. 共享内存 在 Nginx 里,一块完整的共享内存以结构体 ngx_shm_zone_t 来封装,如下: typedef struct ngx_shm_zone_s ngx_shm_zone_t; ...
- Innodb之全局共享内存
参考链接: https://blog.csdn.net/miyatang/article/details/54881547 https://blog.csdn.net/wyzxg/article/de ...
随机推荐
- if-else 的优美写法
前言♂️ 相信大家或多或少都接触过拥有庞大 if else 的项目代码吧,多重嵌套的 if else 在维护的时候真的让人很恼火,有时候一个 bug 排查下来,严重感觉身体被掏空. 本文并未有消灭或 ...
- JavaScript:对象:对象和属性的内存结构是什么样的?
在说变量的时候,大致画了变量的内存结构,现在来看一下对象的内存结构是什么样的,有助于我们理解传参的各种情况,只是大致的画一下内存模型,不代表实际内存情况. 我们可以用一段代码,来判断一下,是不是这样的 ...
- ctfshow——萌新web3
题目如下: 源码分析: 通过id可以传入一个参数,对id的值进行了过滤,这里是正则匹配过滤,内容分析:or,-,\,*,<,>,!,x,hex,+.最外面的i是同时匹配过滤内容的大小写.在 ...
- ClickHouse ORM 3.x 发布啦
经过1年断断续续的迭代,ClickHouse ORM 3.x 发布啦-说说它的故事吧. 回顾下2022 说来惭愧上次写博客都是22年4月份了,今年行情不好团队急剧收缩,工作几乎全扑在接手存量业务和主业 ...
- axios 使用方法 以及服务器端 设置拦截发送404状态的提示语,当网络错误时候返回前端的提示, 当网络正常的时候返回后端的提示
本文旨在说明 设置全局异常拦截器 当网络错误时候返回前端的提示, 当网络正常的时候返回后端的提示 export default ({ development: { baseURL: 'http:// ...
- 【Android】Android 源码方式使用 opencv 库文件
使用方法 opencv 官方的 SDK 已经有编译好的 so 库,我们可以直接使用,因此我们只需要将平台架构对应的 so 库文件以及头文件提取出来,使用 Android.mk 进行预安装,然后在需要使 ...
- linux环境编程(3): 使用POSIX IPC完成进程间通信
1. 写在前面 之前的文章总结了使用管道进行进程间通信的方法,除了pipe和fifo,Linux内核还为我们提供了其他更高级的IPC方式,包括共享内存,消息队列,信号量等,本篇文章会通过一个具有完整逻 ...
- (转载)Python中关键词yield怎么用?
原文: https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do 译文: https://zhuanlan.z ...
- FAQ selenium无法click的一个案例分享(2)
案例描述 https://www.healthsmart.com.hk/hs-home/#!/link/home 来着学员咨询 这个网页你手工打开的时候你会发现一直处于加载中,一定时间后才好. 我们的 ...
- 浅谈Python中的if,可能有你不知道的
Python中的if,没那么简单,虽然也不难 https://docs.python.org/zh-cn/3.9/reference/compound_stmts.html#if python语言参考 ...