PostgreSQL:关于参数 Superuser_reserved_connections

PostgreSQL 的参数 superuser_reserved_connections 一直没怎么关注,这两天遇到个与之相关的错误,才仔细查了下文档,有了进一步了解。

简单的说这个参数的意思是:为具有超级用户权限的用户预留的连接数,就像售火车票一样,不会全部售光,总会预留点,闲话少说,接下来的演示,相信你会对superuser_reserved_connections参数更加熟悉。

superuser_reserved_connections 参数配置

设置参数
为了便于演示,配置 postgresql.conf 文件,并设置以下参数,其它参数这里没列出。

1
2
max_connections = 15
superuser_reserved_connections = 3

备注:max_connections 参数默认值为 100, superuser_reserved_connections 参数默认值为 3,我们调整如上,这两个参数修改之后需要重启才能生效。

重启数据库

1
2
3
4
5
6
[pg92@redhatB pg_root]$ pg_ctl stop -m fast -D $PGDATA
waiting for server to shut down.... done
server stopped

[pg92@redhatB pg_root]$ pg_ctl start -D $PGDATA
server starting

查看参数是否生效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[pg92@redhatB pg_root]$ psql
spsql (9.2.1)
Type "help" for help.

postgres=# show max_connections ;
max_connections
-----------------
15
(1 row)

postgres=# show superuser_reserved_connections ;
superuser_reserved_connections
--------------------------------
3
(1 row)

备注:修改好参数后,再次连到数据库里查看参数的值是否生效是个好习惯,因为有可能参数没设对,然后 reload 后也不会提示错误;如果谨慎些 ,还应查看数据库日志是否有报错。

pgbench 测试

1
[pg92@redhatB load_test]$ nohup pgbench -c 10 -T 60 -j 2 -n -d skytf -U skytf -f update_1.sql > update_1.out &

备注: update_1.sql 脚本略,这里开 10 个长连接,如下图:
PostgreSQL:关于参数 Superuser_reserved_connections

重新打开 session

1
2
[pg92@redhatB londiste]$ psql francs francs
psql: FATAL: remaining connection slots are reserved for non-replication superuser connections

备注:再次以普通用户连接时,报了以上错,提示剩余的连接是预留给 non-replication 超级用户的。

尝试超级用户连接

1
2
3
4
5
[pg92@redhatB londiste]$ psql francs postgres
psql (9.2.1)
Type "help" for help.

francs=#

备注:第5,第6 步都是在第 4 步的 pgbench 脚本执行过程中的测试,这步超级用户则可以连接,但如果超过了 max_connection 设置,则会报以下错误。

psql: FATAL: sorry, too many clients already

总结

  1. 普通用户的最大连接数为 max_connections – superuser_reserved_connections;
  2. superuser_reserved_connections 参数建议根据实际需求设置,一般设置成 10 就够用了。
  3. superuser_reserved_connections 参数设置的是给 non-replication 超级用户预留连接数。当普通用户连接数达到 max_connections – superuser_reserved_connections 时,会报第 5 步抛出的错。
  4. 当数据库连接数(普通用户+超级用户)达到 max_connections 时,则会报第 6 步抛出的错。

参考

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/237952.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论