绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
PostgreSQL 读书会 一期 系统目录 和 系统管理 2
2020-06-09 08:11:21

接上期PostgreSQL  读书会   一期  系统目录   1  --291页


上期讲到如何停止用户正在执行的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%';

这里需要统一索引的建立的名字的方式,就更能准确的统计所有符合条件的内存的展现和大小了。



其实开始读书会这个想法的起因是,某个抖音中读书会中提出的,知识碎片化的问题,目前大多数人接触的知识大多是碎片化的,包括抖音,或者公众号,大多都是从一个基础上,产生的内容,没有前因后果,他们假设你不必知道前因后果或者你可以自行脑补前因后果。所以就有我期的一段话,看似都懂,但细细的想,又什么都不会的原因可能就源于此。


本期就到这里, page 295



分享好友

分享这个小栈给你的朋友们,一起进步吧。

数据库杂货铺
创建时间:2021-12-10 09:57:47
分享数据库管理,运维,源代码 ,业界感受, 吐槽
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • liuaustin
    栈主

小栈成员

查看更多
  • miemieMIA
  • 578154454
  • ylfxml
戳我,来吐槽~