PostgreSQL 的参数 superuser_reserved_connections 一直没怎么关注,这两天遇到个与之相关的错误,才仔细查了下文档,有了进一步了解。
简单的说这个参数的意思是:为具有超级用户权限的用户预留的连接数,就像售火车票一样,不会全部售光,总会预留点,闲话少说,接下来的演示,相信你会对superuser_reserved_connections参数更加熟悉。
superuser_reserved_connections 参数配置
设置参数
为了便于演示,配置 postgresql.conf 文件,并设置以下参数,其它参数这里没列出。
1 |
max_connections = 15 |
备注:max_connections 参数默认值为 100, superuser_reserved_connections 参数默认值为 3,我们调整如上,这两个参数修改之后需要重启才能生效。
重启数据库
1 |
[pg92@redhatB pg_root]$ pg_ctl stop -m fast -D $PGDATA |
查看参数是否生效
1 |
[pg92@redhatB pg_root]$ psql |
备注:修改好参数后,再次连到数据库里查看参数的值是否生效是个好习惯,因为有可能参数没设对,然后 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 个长连接,如下图:
重新打开 session
1 |
[pg92@redhatB londiste]$ psql francs francs |
备注:再次以普通用户连接时,报了以上错,提示剩余的连接是预留给 non-replication 超级用户的。
尝试超级用户连接
1 |
[pg92@redhatB londiste]$ psql francs postgres |
备注:第5,第6 步都是在第 4 步的 pgbench 脚本执行过程中的测试,这步超级用户则可以连接,但如果超过了 max_connection 设置,则会报以下错误。
psql: FATAL: sorry, too many clients already
总结
- 普通用户的最大连接数为 max_connections – superuser_reserved_connections;
- superuser_reserved_connections 参数建议根据实际需求设置,一般设置成 10 就够用了。
- superuser_reserved_connections 参数设置的是给 non-replication 超级用户预留连接数。当普通用户连接数达到 max_connections – superuser_reserved_connections 时,会报第 5 步抛出的错。
- 当数据库连接数(普通用户+超级用户)达到 max_connections 时,则会报第 6 步抛出的错。
参考
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/237952.html