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

php中文网
发布: 2016-06-07 14:58:33
原创
1601人浏览过

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"

廊坊供求信息网
廊坊供求信息网

1:强大的用户管理面版2:分为无需注册的免费发布和VIP注册发布/管理两个系统功能3:注册简便,发布信息管理信息等都相当简单4:用户积分制度5:4 个非常实用的道具(在后台设置道具参数)标题变色道具 (改变标题颜色)信息置顶道具 (能使发布信息置顶,使用个数越多,位置越高)内容贴图道具 (可以发和信息相关的图片)通过验证道具 (可不通过管理员审核,直接发布)6:采用虚拟货币制度,可以在线购买虚拟货

廊坊供求信息网 0
查看详情 廊坊供求信息网

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

 

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号