PostgreSQL 讀書會 一期 系統目錄 和 系統管理 2

接上期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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章