热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Postgres与OS内核相关的几个参数设置-mysql教程

Postgres与OS内核相关的几个参数设置Postgres在postgresql.conf里面的配置参数有几个是和OS的内核参数紧密相关的,通常默认值是偏小的,但设置过大也会造成Postgres的启动失败,官方文档(Part17.3)有较详细的说明,但没有例子,这里给出实际示例。测试环

Postgres与OS内核相关的几个参数设置 Postgres在postgresql.conf里面的配置参数有几个是和OS的内核参数紧密相关的,通常默认值是偏小的,但设置过大也会造成Postgres的启动失败,官方文档(Part 17.3)有较详细的说明,但没有例子,这里给出实际示例。 测试环

Postgres与OS内核相关的几个参数设置

Postgres在postgresql.conf里面的配置参数有几个是和OS的内核参数紧密相关的,通常默认值是偏小的,但设置过大也会造成Postgres的启动失败,官方文档(Part 17.3)有较详细的说明,但没有例子,这里给出实际示例。

测试环境:

DB: postgres 9.1.3

OS: CentOS 6.2 / Redhat

--内核参数文件位置:

/proc/sys/kernel

/etc/sysctl.conf

[root@localhost ~]# sysctl -a|more

kernel.shmmax = 68719476736

kernel.shmall = 4294967296

kernel.shmmni = 4096

kernel.msgmax = 65536

kernel.msgmni = 2005

kernel.msgmnb = 65536

[postgres@localhost ~]$ cat /proc/sys/kernel/sem

250 32000 32 128

(semmsl semmns semopm semmni)

1.shared_buffers VS shmget

shared_buffers是共享内存的意思,如果该值超过系统的内存值(包括swap),会造成启动失败

shmget是get share memory,它是创建一个共享内存的函数

[root@localhost ~]# free -m

total used free shared buffers cached

Mem: 1006 872 134 0 100 629

-/+ buffers/cache: 142 863

Swap: 2015 13 2002

[root@localhost ~]# su - postgres

[postgres@localhost ~]$ vi /database/pgdata/postgresql.conf

shared_buffers = 5GB

[postgres@localhost ~]$ pg_start

server starting

[postgres@localhost ~]$ FATAL: could not create shared memory segment: Cannot allocate memory

DETAIL: Failed system call was shmget(key=1949001, size=5609447424, 03600).

HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space, or exceeded your kernel's SHMALL parameter. You can either reduce the request size or reconfigure the kernel with larger SHMALL. To reduce the request size (currently 5609447424 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

The PostgreSQL documentation contains more information about shared memory configuration.

解决办法是减小shared_buffers、max_connections值,也或者加大shmall值、加大内存和swap,如果设置超大,大过内核值,则直接报错Invalid argument,如

[postgres@localhost ~]$ vi /database/pgdata/postgresql.conf

shared_buffers = 222222GB

max_cOnnections= 100

[postgres@localhost ~]$ pg_start

server starting

[postgres@localhost ~]$ FATAL: invalid value for parameter "shared_buffers": "222222GB"

HINT: Value exceeds integer range.

2.max_connections VS semget

max_connections是最大连接数,即允许客户端连接的最大连接数,增大连接可以允许接入更多的客户端,但设置过大同样会造成DB启动失败

semget是获取信号的一个函数,即get semaphore

[postgres@localhost ~]$ vi /database/pgdata/postgresql.conf

max_cOnnections= 5000

[postgres@localhost ~]$ pg_start

server starting

[postgres@localhost ~]$ FATAL: could not create semaphores: No space left on device

DETAIL: Failed system call was semget(1949125, 17, 03600).

HINT: This error does *not* mean that you have run out of disk space. It occurs when either the system limit for the maximum number of semaphore sets (SEMMNI), or the system wide maximum number of semaphores (SEMMNS), would be exceeded. You need to raise the respective kernel parameter. Alternatively, reduce PostgreSQL's consumption of semaphores by reducing its max_connections parameter.

The PostgreSQL documentation contains more information about configuring your system for PostgreSQL.

上述的空间不够不是指的是磁盘空间不够,而是创建semaphores时空间参数不够,系统调用参数semget报错,但是错误信息感觉有些迷惑......解决办法通常是减小max_connections,或者增大内核参数,如semmni,semmns等,在/proc/sys/kernel/sem里面调整,如

[root@localhost ~]# sysctl -w kernel.sem="500 64000 50 150"

kernel.sem = 500 64000 50 150

[root@localhost ~]# cat /proc/sys/kernel/sem

500 64000 50 150

附参数说明

Name Desc Reasonable Value

shmmax Maximum size of shared memory segment (bytes) at least several megabytes (see text)

shmmin Minimum size of shared memory segment (bytes) 1

shmall Total amount of shared memory available (bytes or pages) if bytes, same as SHMMAX; if pages, ceil(SHMMAX/PAGE_SIZE)

shmseg Maximum number of shared memory segments per process only 1 segment is needed, but the default is much higher

shmmni Maximum number of shared memory segments system-wide like SHMSEG plus room for other applications

semmni Maximum number of semaphore identifiers (i.e., sets) at least ceil((max_connections + autovacuum_max_workers + 4) / 16)

semmns Maximum number of semaphores system-wide ceil((max_connections + autovacuum_max_workers

+ 4) / 16) * 17 plus room for other applications

semmsl Maximum number of semaphores per set at least 17

semmap Number of entries in semaphore map see text

semvmx Maximum value of semaphore at least 1000 (The default is often 32767; do not change unless necessary)

共享内存的使用:

usage Approximate shared memory bytes

Connections (1800 + 270 * max_locks_per_transaction) * max_connections

Autovacuum workers (1800 + 270 * max_locks_per_transaction) * autovacuum_max_workers

Prepared transactions (770 + 270 * max_locks_per_transaction) * max_prepared_transactions

Shared disk buffers (block_size + 208) * shared_buffers

Wal buffers (wal_block_size + 8) * wal_buffers

Fixed space requirements 770KB


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上安装和配置Grafana,包括必要的依赖项安装、插件管理以及服务启动等步骤。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
  • 本教程将详细指导您如何通过光盘引导安装 CentOS 7.0,包括选择语言、系统分区和配置网络等关键步骤。整个过程大约需要8分钟,具体时间视硬件配置而定。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 在Ubuntu 8.04中安装美观的Cairo-Dock桌面增强工具
    本文介绍如何在Ubuntu 8.04系统中安装和配置Cairo-Dock,这款桌面增强工具以其精美的界面和高效的功能备受用户青睐。文章将指导您通过简单的步骤完成安装,并提供一些实用的配置建议。 ... [详细]
  • 解决U盘安装系统后无法重启的问题
    本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 本文探讨了在 OpenStack 环境中使用虚拟机部署 Ceph 集群后,外部服务器通过浮动 IP 无法访问该集群的问题,并提供了详细的解决方案。 ... [详细]
  • 本文详细介绍了如何规划和部署一个高可用的Etcd集群,包括主机配置、软件安装、防火墙设置及集群健康检查等内容。通过合理的硬件配置和网络规划,确保Etcd集群在生产环境中的稳定运行。 ... [详细]
  • 配置多VLAN环境下的透明SQUID代理
    本文介绍如何在包含多个VLAN的网络环境中配置SQUID作为透明网关。网络拓扑包括Cisco 3750交换机、PANABIT防火墙和SQUID服务器,所有设备均部署在ESXi虚拟化平台上。 ... [详细]
author-avatar
手机用户2502911627_202
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有