十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍PostgreSQL中系统目录和系统管理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联建站专注于竞秀网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供竞秀营销型网站建设,竞秀网站制作、竞秀网页设计、竞秀网站官网定制、成都小程序开发服务,打造竞秀网络公司原创品牌,更为您提供竞秀网站排名全网营销落地服务。
之前讲到如何停止用户正在执行的session,这里PG 提供了不同的方式来终止。这里扩展一下为什么要停止用户的连接。
可以总结出以下原因
1 用户的查询时间较长,已经影响到正常的系统运作,例如vacuum相关的操作。
2 需要进行删除数据库的操作,但是目前需要进行处理的数据库正在被某些线程占用,所以需要清理这些连接的session
3 由于意外,应用程序大量建立与数据库的连接,并达到最大值,需要临时清理一些连接,在进行应用程序处理异常时,进行一些缓解性的操作。并释放相关的浪费的内存。
PG 提供了pg_terminate_backend(pid) 和 pg_cancel_backend(pid) 两钟方式的操作, 这两种方式最大的不同在于, pg_terminate_backend 会将应用程序与PG的连接断开,应用会报失去连接的错误,而pg_cancel_backend则仅仅停止当前的正在执行的事务,而不会将应用程序和数据库之间做一个了断。
这里举例,如果要删除一个数据库,而这个数据库一直有用户连接,即使不断使用pg_terminate_backend 进行操作,还是不能清理相关的连接。
停止test 库
UPDATE pg_database set datallowconn = 'false' WHERE datname = 'test';
通过设置数据库的是否允许连接的状态,来阻止新的连接,再次连接到禁止连接的数据库上就会报错。
所以一件事情,如果系统的来学习,则会发现更多的问题,更多的答案。
在上面的关于数据库连接和断开连接的事情告一段落后,下面就来到了,数据库的配置方面的事情
书中提到,如何获取PostgreSQL 的设置的参数的三种方式
1 通过postgresql.conf 配置文件来获得
2 通过select current_setting('配置的名字‘)
3 通过show work_mem 的方式来提供
书里没有提出,此处为扩展,虽然三种方式都可以获得PG的配置值,但实际上postgresql.conf 读出是系统的未曾改变的启动后未改变初始值,如果在系统运行期间改变了可以改变的参数值,则通过postgresql.conf 是无法显示的。
修改部分系统值是可以通过 set_config 来做到的
例如
方式1 ,仅仅对当前运行的语句有效
方式2 对当前的session 有效
其实两个方式不同的就是 set_config 后的参数true or false ,选择false 则表明在整个session都生效。在打开一个进程,则还是和postgresql.conf 配置文件的值一致。
当然书中也提示,不是所有的配置都能通过set_config 来进行调整,需要重新启动的值是不能通过 set_config 进行调整的。
如何快速的获取postgresql中的系统的配置值,也可以通过下面的语句来做到
SELECT name, current_setting(name), source FROM pg_settings
WHERE source IN ('configuration file');
当然查看数据库的容量也是日常系统管理的一个重要的工作
SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;
SELECT tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) FROM pg_tables WHERE schemaname ='public';
上面的方式有点类似于oracle 统计schema 中的表的大小,postgresql和sql server 一样,既有一个instance 下多个库的概念也有一个库下多个schema的概念, ORACLE 和 MySQL 在这两个概念中都有缺失,这里就不扩展了。
常用的PG如何查看当前库的索引的问题
SELECT indexrelid::regclass, pg_size_pretty(pg_relation_size(indexrelid::regclass)) FROM pg_index WHERE indexrelid::regclass::text like 'idx%';
这里需要统一索引的建立的名字的方式,就更能准确的统计所有符合条件的内存的展现和大小了。
以上是“PostgreSQL中系统目录和系统管理的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!