天天看點

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

最上層是執行個體,執行個體中允許建立多個資料庫,每個資料庫中可以建立多個schema,每個schema下面可以建立多個對象。

對象包括表、物化視圖、操作符、索引、視圖、序列、函數、... 等等。

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

在資料庫中所有的權限都和角色(使用者)挂鈎,public是一個特殊角色,代表所有人。

超級使用者是有允許任意操作對象的,普通使用者隻能操作自己建立的對象。

另外有一些對象是有賦予給public角色預設權限的,是以建好之後,是以人都有這些預設權限。

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

執行個體級别的權限由pg_hba.conf來控制,例如 :

配置解釋

資料庫級别的權限,包括允許連接配接資料庫,允許在資料庫中建立schema。

預設情況下,資料庫在建立後,允許public角色連接配接,即允許任何人連接配接。

預設情況下,資料庫在建立後,不允許除了超級使用者和owner之外的任何人在資料庫中建立schema。

預設情況下,資料庫在建立後,會自動建立名為public 的schema,這個schema的all權限已經賦予給public角色,即允許任何人在裡面建立對象。

schema級别的權限,包括允許檢視schema中的對象,允許在schema中建立對象。

預設情況下建立的schema的權限不會賦予給public角色,是以除了超級使用者和owner,任何人都沒有權限檢視schema中的對象或者在schema中建立對象。

對象級别的權限,每種類型的對象權限屬性都不一樣,具體請參考

<a href="http://www.postgresql.org/docs/9.5/static/sql-grant.html">http://www.postgresql.org/docs/9.5/static/sql-grant.html</a>

以表為例,可以有select | insert | update | delete | truncate | references | trigger這些權限。

簡單介紹一下grant的一些通用選項

with admin option表示被賦予權限的使用者,拿到對應的權限後,還能将對應的權限賦予給其他人,否則隻能自己有這個權限,但是不能再賦予給其他人。

使用者,角色在postgresql是一個概念。

public角色,代表所有人的意思。

以表為例 :

或者執行

得到權限說明如下

解釋一下 access privileges

rolename=xxx 其中rolename就是被賦予權限的使用者名,即權限被賦予給誰了?

=xxx 表示這個權限賦予給了public角色,即所有人

/yyyy 表示是誰賦予的這個權限?

權限的含義如下

例子

賦予權限的人是postgres使用者, sbtest2表的select權限被賦予給了digoal使用者。

回收權限一定要針對已有的權限來,如果你發現這裡的權限還在,那照着權限回收即可。

例如

b-tree:支援排序、範圍查詢、精确查詢;适合所有資料類型,單個索引條目不能超過索引頁的1/3。

hash:支援等值查詢;适合超長字段。

gin:反向索引,支援等值、包含、相交、等查詢;适合多值類型(數組、全文檢索等),任意字段組合查詢。

gist:r-tree索引,支援包含,相交,距離,點面判斷等查詢;适合幾何類型、範圍類型、全文檢索、異構類型等。

sp-gist:空間分區(平衡)r-tree,支援包含,相交,距離,點面判斷等查詢;适合幾何類型、範圍類型、全文檢索、異構類型等。

brin:塊級索引,适合實體存儲與列值存在較好相關性的字段。比如時序資料、物聯網傳感資料、feed資料等。支援範圍查詢、等值查詢。

rum:擴充索引接口,支援全文檢索,支援附加标量類型的全文檢索,支援帶位置關系的全文檢索。

多個索引,postgresql會使用bitmapand或bitmapor合并掃描。

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

1、建立索引

2、删除舊索引

3、pk\uk的維護,與之類似,增加一步驟。

索引盤:對應索引表空間。

空間評估、iops評估、帶寬評估。建議采用ssd,檔案系統采用ext4或xfs。

資料盤:對應資料檔案表空間。

重做日志盤:對應wal目錄。

歸檔盤:對應wal歸檔目錄。

空間評估、iops評估、帶寬評估。可以采用機械盤,檔案系統采用ext4或xfs或zfs,可以開啟檔案系統壓縮功能。

備份盤:對應資料庫備份目錄。

日志盤(pg_log):對應資料庫審計、錯誤日志目錄。

帶寬評估,網段規劃,防火牆規劃。

不建議使用公網。

根據業務需求,評估cpu主頻,核數。建議實測性能名額。

/etc/sysctl.conf

sysctl -p

/etc/security/limits.conf

/home/digoal/.bash_profile

<a href="https://github.com/digoal/blog/blob/master/201608/20160823_01.md">《postgresql 最佳實踐 - 線上邏輯備份與恢複介紹》</a>

備份digoal庫, ddl中不包含表空間. 是以恢複時不需要提前建立對應的表空間.

如果備份為-f p格式,備份輸出為文本,直接運作即可。

要支援實體備份,務必打開歸檔,同時建議打開流複制。

配置歸檔目錄

配置流複制和歸檔

vi postgresql.conf

重新開機資料庫

vi $pgdata/pg_hba.conf

pg_ctl reload -d $pgdata

建立備份目錄,備份可以通過流複制協定,備份到遠端。

例子 1,通過流複制使用者,以及流複制備份

例子 2,使用cp備份

步驟如下

實體增量備份分為兩種,

一種是資料檔案的增量備份,需要等10.0或者使用pg_rman, pg_probackup

<a href="https://github.com/postgrespro/pg_probackup">https://github.com/postgrespro/pg_probackup</a>

<a href="https://github.com/ossc-db/pg_rman">https://github.com/ossc-db/pg_rman</a>

另一種是歸檔增量備份。

将歸檔檔案拷貝到備份存儲即可。

1. 如果是異機備份,首先要部署postgresql軟體環境,建議部署的postgresql軟體版本與備份的資料檔案一緻。編譯參數一緻。

如何檢視編譯參數?在源庫執行如下指令

部署軟體時,還需要部署源庫所有的postgresql插件,并且需要確定插件版本一緻。

2. 建構恢複目錄,需要有足夠的空間。

3. 解壓資料檔案,歸檔到各自的目錄。

如果有表空間,将表空間使用軟鍊連接配接到$pgdata/pg_tblspc,或者将表空間解壓到$pgdata/pg_tblspc。

4. 修改postgresql.conf

主要修改參數,包括監聽端口,shared buffer, preload library 等,防止端口沖突導緻啟動失敗。

5. 配置$pgdata/recovery.conf,同時設定恢複目标

主要配置,restore_command。(如果是搭建流複制備庫,則需要配置的是#primary_conninfo = '' # e.g. 'host=localhost port=5432'。)

設定恢複到哪個時間點、xid或者target name。(如果是搭建流複制備庫,則需要配置recovery_target_timeline = 'latest')

6. 啟動恢複庫

資料變更操作(主庫)

首先要建立一個記錄還原點xid的表。記錄xid,時間,以及描述資訊。(來代替pg_create_restore_point 系統函數的功能)

建立一個函數,代替pg_create_restore_point的功能,插入還原點。

插入一個還原點

查詢這個表的資訊:

接下來要模拟一下還原:

記錄目前哈希值。用于恢複後的比對。

接下來我要做一筆删除操作,在删除前,我先建立一條還原點資訊。

我隻需要恢複到561574 即可。接下來就是模拟恢複了。

主動産生一些xlog,觸發歸檔。

下載下傳阿裡雲rds的備份和歸檔到本地。

在本地需要安裝一個postgresql, 與阿裡雲rds的編譯配置參數一緻(例如資料塊的大小),最好使用的子產品也一緻,這裡沒有用到其他子產品,是以無所謂。

通過pg_settings來看一下rds的配置資訊,版本資訊,友善我們在本地進行恢複。

本地編譯安裝postgresql 9.4.1,編譯參數與rds一緻。阿裡雲rds這幾個參數都是預設的。

下載下傳備份和歸檔檔案,解壓:

基礎備份選擇需要恢複的時間點之前的一個備份,歸檔則選擇在此之後的所有歸檔檔案。

修改配置檔案,注釋掉阿裡雲rds pg的一些定制參數。

配置recovery.conf

打開hot_standby,恢複到目标點後暫停,如果确認已經到達,使用resume激活。

啟動資料庫

檢查是否恢複到指定xid

檢查,已經恢複到delete test表的資料之前了。

假設 512gb 記憶體, ssd.

pg_stat_statements插件,統計sql調用的資源消耗。

top 5 cpu_time sql

<a href="https://github.com/digoal/blog/blob/master/201611/20161123_01.md">《postgresql awr報告(for 阿裡雲apsaradb pgsql)》</a>

列印逾時sql當時的執行計劃。

explain 文法

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

explain 例子

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

explain 節點

一天學會PostgreSQL應用開發與管理 - 8 PostgreSQL 管理

初始化資料, 1000萬記錄。

測試

建立測試表

建立腳本

壓測

1、awr健康報告

2、垃圾回收

3、膨脹索引重建

4、top sql性能優化

5、錯誤日志分析

6、安全風險評估(sql注入、暴力破解、密碼周期修改)

7、備份可用性校驗

8、曆史備份和歸檔清理

9、曆史資料清理

10、實時監控系統建設

11、ha建設、監控、演練

12、容災建設、監控、演練

13、審計系統建設

14、業務邏輯優化

15、核心優化

16、版本更新、bug fix

17、社群交流