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 ...
随机推荐
- ChatGPT 会开源吗?
最近,我被一款叫做 ChatGPT 的人工智能(AI)聊天机器人,刷屏了.网上有人说它是搜索引擎杀手,还有人说它将取代程序员... 最后,我还是没扛住铺天盖地的赞美,跑去注册了个账号,抱着调侃&quo ...
- JavaScript入门⑨-异步编程●异世界之旅
JavaScript入门系列目录 JavaScript入门①-基础知识筑基 JavaScript入门②-函数(1)基础{浅出} JavaScript入门③-函数(2)原理{深入}执行上下文 JavaS ...
- Spring之后置处理器
Spring的后置处理器是Spring对外开发的重要扩展点,允许我们接入Bean的实例化流程中,以达到动态注册BeanDefinition.动态修改BeanDefinition.动态修改Bean的 ...
- STL list容器API
list容器:链表容器,不支持随机遍历.不能用通用的sort算法(要有随机访问迭代器),容器自己有排序算法 #define _CRT_SECURE_NO_WARNINGS #include<io ...
- day11-功能实现10
家居网购项目实现010 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 24.bugFix-添加购物车按钮动态处理 24.1需求 ...
- [编程基础] Python日志记录库logging总结
Python日志记录教程展示了如何使用日志记录模块在Python中进行日志记录. 文章目录 1 介绍 1.1 背景 1.2 Python日志记录模块 1.3 根记录器 2 Python logging ...
- Hadoop详解(08) - Hadoop企业优化方案.docx
Hadoop详解(08) - Hadoop企业优化方案.docx MapReduce优化 MapReduce 跑的慢的原因 计算机性能:CPU.内存.磁盘健康.网络 I/O 操作优化 (1)数据倾斜 ...
- Profiler导致的严重性能问题
背景 客户反馈系统突然运行非常缓慢,持续了近20分钟的时间,通过SQL专家云定位到有人开启了Profiler导致,但是不能定位是谁开启的,请我们协助分析. 现象 登录SQL专家云,进入实时可视化页面 ...
- Java基础篇——JUC初步
1.基础知识 java默认的两个线程:Main线程+GC守护线程 java并不能开启线程,需要调用底层用c语言写的本地方法 wait和sleep的区别: wait方法会释放线程锁,并且只能在同步代码块 ...
- [LeetCode]爬楼梯
题目 假设你正在爬楼梯.需要 n 步你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: ...