2023年6月28日 星期三

Postgres 14 新功能回顧:Toast 壓縮支援 Lz4 演算法

在 Postgres 每個 Page 的儲存大小為 8kB,由於單筆資料 (tuple) 不允許跨 Page 儲存,當超過此大小限制時,則會壓縮後另外儲存,這塊空間被稱為 Toast。

在 PG 14 對 Toast 功能新增了 Lz4 演算法的支援,使用上對比於原本的 pglz 壓縮方式,在速度上還有佔用空間大小都有肉眼可見接近或超過十倍以上的改善。

想要確認是否有使用到 Toast 的功能可以用以下指令,確認目前 toast 的空間使用量。 

select 
  relnamespace::regnamespace, 
  relname, 
  reltoastrelid::regclass, 
  pg_relation_size(reltoastrelid) as toast_size 
from pg_class 
where reltoastrelid != 0 
and relnamespace::regnamespace::text = 'public'  --指定 Schema 可選擇註解掉
order by toast_size desc limit 30;


參考資料:

https://www.postgresql.org/docs/current/storage-toast.html

https://www.dbi-services.com/blog/postgresql-14-lz4-compression-for-toast/

2023年6月20日 星期二

PostgreSQL 資料庫執行異常緩慢兇手 LWLock : SubtransSLRU

 在前年的時候 Gitlab 發布了一篇文章分享他們如何以及為何要排除 Subtransaction。

https://about.gitlab.com/blog/2021/09/29/why-we-spent-the-last-month-eliminating-postgresql-subtransactions/

2023年6月6日 星期二

Linux 環境變數 $ 符號特殊使用技巧 (取代、預設值)

 ${VAR:=XXX}  賦予預設值 (可以用來防呆,避免指定目錄時因為環境變數空的導致用錯目錄)

${#VAR}  顯示長度

${VAR/a/b}  取代第一個匹配到的 a 為 b 

${VAR//a/b} 取代所有匹配到的 a 為 b


參考顯示結果:

[root@ ~]# echo ${VAR}

[root@ ~]# echo ${VAR:=abcabc}
abcabc
[root@ ~]# echo ${VAR/a/b}
bbcabc
[root@ ~]# echo ${VAR//a/b}
bbcbbc
[root@~]# echo ${#VAR}
6


2023年6月2日 星期五

Postgres 備份還原

在 Postgres 有許多種全資料庫備份方式,不管是那種備分方式都會面臨一個相同問題,備分期間資料庫仍持續在運作寫入,而備分只能備走硬碟上的資料,部分仍在記憶體的資訊不會被記錄到,因此這些全備份檔案的資料並不是完整的,需要搭配備分期間產生的交易日誌檔案 WAL 才算是完整備分,這點需要特別注意。