溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

發(fā)布時(shí)間:2021-12-30 14:40:23 來(lái)源:億速云 閱讀:112 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

之前講到如何停止用戶正在執(zhí)行的session,這里PG 提供了不同的方式來(lái)終止。這里擴(kuò)展一下為什么要停止用戶的連接。

可以總結(jié)出以下原因

1  用戶的查詢時(shí)間較長(zhǎng),已經(jīng)影響到正常的系統(tǒng)運(yùn)作,例如vacuum相關(guān)的操作。

2  需要進(jìn)行刪除數(shù)據(jù)庫(kù)的操作,但是目前需要進(jìn)行處理的數(shù)據(jù)庫(kù)正在被某些線程占用,所以需要清理這些連接的session

3  由于意外,應(yīng)用程序大量建立與數(shù)據(jù)庫(kù)的連接,并達(dá)到最大值,需要臨時(shí)清理一些連接,在進(jìn)行應(yīng)用程序處理異常時(shí),進(jìn)行一些緩解性的操作。并釋放相關(guān)的浪費(fèi)的內(nèi)存。

PG 提供了pg_terminate_backend(pid) 和 pg_cancel_backend(pid) 兩鐘方式的操作, 這兩種方式最大的不同在于, pg_terminate_backend 會(huì)將應(yīng)用程序與PG的連接斷開,應(yīng)用會(huì)報(bào)失去連接的錯(cuò)誤,而pg_cancel_backend則僅僅停止當(dāng)前的正在執(zhí)行的事務(wù),而不會(huì)將應(yīng)用程序和數(shù)據(jù)庫(kù)之間做一個(gè)了斷。

這里舉例,如果要?jiǎng)h除一個(gè)數(shù)據(jù)庫(kù),而這個(gè)數(shù)據(jù)庫(kù)一直有用戶連接,即使不斷使用pg_terminate_backend 進(jìn)行操作,還是不能清理相關(guān)的連接。

停止test 庫(kù)

UPDATE pg_database set datallowconn = 'false' WHERE datname = 'test';

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

通過(guò)設(shè)置數(shù)據(jù)庫(kù)的是否允許連接的狀態(tài),來(lái)阻止新的連接,再次連接到禁止連接的數(shù)據(jù)庫(kù)上就會(huì)報(bào)錯(cuò)。

所以一件事情,如果系統(tǒng)的來(lái)學(xué)習(xí),則會(huì)發(fā)現(xiàn)更多的問(wèn)題,更多的答案。

在上面的關(guān)于數(shù)據(jù)庫(kù)連接和斷開連接的事情告一段落后,下面就來(lái)到了,數(shù)據(jù)庫(kù)的配置方面的事情

書中提到,如何獲取PostgreSQL 的設(shè)置的參數(shù)的三種方式

1 通過(guò)postgresql.conf 配置文件來(lái)獲得

2 通過(guò)select current_setting('配置的名字‘) 

3 通過(guò)show work_mem 的方式來(lái)提供

書里沒(méi)有提出,此處為擴(kuò)展,雖然三種方式都可以獲得PG的配置值,但實(shí)際上postgresql.conf 讀出是系統(tǒng)的未曾改變的啟動(dòng)后未改變初始值,如果在系統(tǒng)運(yùn)行期間改變了可以改變的參數(shù)值,則通過(guò)postgresql.conf 是無(wú)法顯示的。

修改部分系統(tǒng)值是可以通過(guò) set_config 來(lái)做到的

例如

方式1 ,僅僅對(duì)當(dāng)前運(yùn)行的語(yǔ)句有效

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

方式2 對(duì)當(dāng)前的session 有效

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

其實(shí)兩個(gè)方式不同的就是 set_config 后的參數(shù)true or false ,選擇false 則表明在整個(gè)session都生效。在打開一個(gè)進(jìn)程,則還是和postgresql.conf 配置文件的值一致。

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

當(dāng)然書中也提示,不是所有的配置都能通過(guò)set_config 來(lái)進(jìn)行調(diào)整,需要重新啟動(dòng)的值是不能通過(guò)  set_config 進(jìn)行調(diào)整的。

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

如何快速的獲取postgresql中的系統(tǒng)的配置值,也可以通過(guò)下面的語(yǔ)句來(lái)做到

SELECT name, current_setting(name), source FROM pg_settings
WHERE source IN ('configuration file');

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

當(dāng)然查看數(shù)據(jù)庫(kù)的容量也是日常系統(tǒng)管理的一個(gè)重要的工作

SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

SELECT tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) FROM pg_tables WHERE schemaname ='public';

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

上面的方式有點(diǎn)類似于oracle 統(tǒng)計(jì)schema 中的表的大小,postgresql和sql server 一樣,既有一個(gè)instance 下多個(gè)庫(kù)的概念也有一個(gè)庫(kù)下多個(gè)schema的概念, ORACLE 和 MYSQL 在這兩個(gè)概念中都有缺失,這里就不擴(kuò)展了。

常用的PG如何查看當(dāng)前庫(kù)的索引的問(wèn)題

SELECT indexrelid::regclass, pg_size_pretty(pg_relation_size(indexrelid::regclass)) FROM pg_index WHERE indexrelid::regclass::text like 'idx%';

PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析

這里需要統(tǒng)一索引的建立的名字的方式,就更能準(zhǔn)確的統(tǒng)計(jì)所有符合條件的內(nèi)存的展現(xiàn)和大小了。

以上是“PostgreSQL中系統(tǒng)目錄和系統(tǒng)管理的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI