f 怎麼使用pg_repack 進行cloud sql postgres的表格及索引的重整? ~ 迪貝之家

怎麼使用pg_repack 進行cloud sql postgres的表格及索引的重整?

 



我其實想多寫幾個字來屁一下的
看了AWS的工程師寫的文件後
我只能說...甘拜下風
人家確實寫得好棒棒....
我們搞技術的
人家做得好
只能給他拍拍手

環境:
1.cloud sql Postgres 13
2.compute engine debian 10

我也只能寫寫如何在cloud sql postgres安裝
GCP Postgres是有支援pg_repack的

1.資料庫安裝extension
進資料庫後,執行如下:
create extension pg_repack

2.作業系統安裝binary
進作業系統後:
apt-get install postgresql-13-repack

關於索引重整
postgres 本身reindex指令可以進行online rebuild
指令如下:
reindex index concurrently index_name



說是online......恩.......
我的測試結果是
其實跟pg_repack碰到的狀況一樣
還是要在資料異動作業小的時候來進行
只是pg_repack預設下
它會去找到卡住它運作的session
ㄝ.....然後把它砍掉
所以麻煩執行它的時候
請務必帶一個開關 --no-kill-backend
這是AWS的部落格文章沒提到的
percona的文章中提到了
Understanding pg_repack: What Can Go Wrong – and How to Avoid It
(記得要看阿...不要用了之後說..是我害了你)
加了開關後的執行output
AWS文章

Remove bloat from Amazon Aurora and RDS for PostgreSQL with pg_repack

開頭就說明了為什麼要做重整
記得要用pg_repack前
拜讀人家的大作


還有其他不錯的文章
也建議大家看一下
1.Using pg_repack to Rebuild PostgreSQL Database Objects Online

2.Basic-understanding-bloat-vacuum-postgresql-mvcc

3.Tuning-autovacuum-in-postgresql-and-autovacuum-internals



怎麼看重整成效??
用pgstattuple extension

這是我的一個分割表索引重整前的數據
test=> select * from pgstatindex('date_trunc_idx');
-[ RECORD 1 ]------+---------
version | 4
tree_level | 2
index_size | 29646848
root_block_no | 298
internal_pages | 17
leaf_pages | 2077
empty_pages | 0
deleted_pages | 1524
avg_leaf_density | 53.05
leaf_fragmentation | 10.74

這是pg_repack完成後的數據
test=> select * from pgstatindex('date_trunc_idx');
-[ RECORD 1 ]------+--------
version | 4
tree_level | 2
index_size | 8519680
root_block_no | 209
internal_pages | 7
leaf_pages | 1032
empty_pages | 0
deleted_pages | 0
avg_leaf_density | 89.84
leaf_fragmentation | 0