日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用pg_repack 回收表体积

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用pg_repack 回收表体积 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于某些常進(jìn)行archiver或者 purge操作的表而言,如果我們不定期回收表空間,則表體積會(huì)越漲越大。

但是pg自帶的 vacuum full 在回收的過(guò)程中會(huì)阻塞讀寫操作,不能在生產(chǎn)環(huán)境直接運(yùn)行。

因此,在生產(chǎn)環(huán)境 我們常用的表空間收縮工具是pg_squeeze 和 pg_repack。


這里先貼 pg_repack 的用法:


項(xiàng)目地址:? https://github.com/reorg/pg_repack

原理: 新建一個(gè)一模一樣的影子表,然后拷貝原表的數(shù)據(jù),最后rename替換原表。

注意: 待處理的表必須有主鍵


yum?install?centos-release-scl-rh yum?install?llvm-toolset-7-clangcd?/home/postgrestar?xf?pg_repack-ver_1.4.4.tar.gz?export?PATH=/usr/local/pgsql-11.5/bin:$PATH???--?需要載入環(huán)境變量,不然編譯過(guò)程中可能找不到pg_config這個(gè)文件cd?pg_repack-ver_1.4.4make?&&?make?install

另外,會(huì)生成一個(gè)可執(zhí)行的文件: /home/postgres/pg_repack-ver_1.4.4/bin/pg_repack?


修改配置文件:

vim? /usr/local/pgsql-11.5/data/postgresql.conf

shared_preload_libraries?=?'pg_repack'

然后 ,重啟pg進(jìn)程



使用方法:

create?database?db1;\c?db1create?extension?pg_repack;create?table?testdata?(id?integer,course?int,grade?numeric(4,2),testtime?date); alter?table?testdata?add?primary?key?(id);insert?into?testdata?select?generate_series(1,100)?as?id,10?as?course,10.11?as?grade,'2017-07-06'?as?testtime;


然后,我們可以去看下PG datadir物理文件大小從1.1GB漲到了1.6GB

?

然后,我們?cè)偈褂妹?/span> delete from testdata where id between 5000000 and 10000000;? 對(duì)testdata表刪除一半的數(shù)據(jù)?,此時(shí)可以看到物理文件沒(méi)有任何縮小。

?

然后,在外部使用pg_repack對(duì) color表做空間回收:

cd?/home/postgres/pg_repack-ver_1.4.4/bin./pg_repack?-h?127.0.0.1??--port?5434?-Upostgres?-d?db1?-t?testdata?-j?2?-D?-k

返回的結(jié)果如下(根據(jù)實(shí)際表的大小,來(lái)決定這個(gè)結(jié)果等待的時(shí)長(zhǎng)):

NOTICE: Setting up workers.conns

INFO: repacking table "public.testdata"


pg_repack參數(shù)說(shuō)明:

??-a,?--all?????????????????repack?all?databases-t,?--table=TABLE?????????repack?specific?table?only-I,?--parent-table=TABLE??repack?specific?parent?table?and?its?inheritors-c,?--schema=SCHEMA???????repack?tables?in?specific?schema?only-s,?--tablespace=TBLSPC???move?repacked?tables?to?a?new?tablespace-S,?--moveidx?????????????move?repacked?indexes?to?TBLSPC?too-o,?--order-by=COLUMNS????order?by?columns?instead?of?cluster?keys-n,?--no-order????????????do?vacuum?full?instead?of?cluster-N,?--dry-run?????????????print?what?would?have?been?repacked-j,?--jobs=NUM????????????Use?this?many?parallel?jobs?for?each?table-i,?--index=INDEX?????????move?only?the?specified?index-x,?--only-indexes????????move?only?indexes?of?the?specified?table-T,?--wait-timeout=SECS???timeout?to?cancel?other?backends?on?conflict-D,?--no-kill-backend?????don't?kill?other?backends?when?timed?out-Z,?--no-analyze??????????don't?analyze?at?end-k,?--no-superuser-check??skip?superuser?checks?in?client-C,?--exclude-extension???don't?repack?tables?which?belong?to?specific?extension Connection?options:-d,?--dbname=DBNAME???????database?to?connect-h,?--host=HOSTNAME???????database?server?host?or?socket?directory-p,?--port=PORT???????????database?server?port-U,?--username=USERNAME???user?name?to?connect?as-w,?--no-password?????????never?prompt?for?password-W,?--password????????????force?password?prompt




?

我們?cè)偃ゲ榭次锢砦募笮?#xff0c;發(fā)現(xiàn)PG整個(gè)的文件大小又縮回到1.4G了(回收掉的200MB差不多就是一半的testdata表的空間大小)

?

?

最后, 我們可以使用腳本定時(shí)檢測(cè)對(duì)超過(guò)某些閾值的表定時(shí)執(zhí)行 pg_repack 操作,以便回收磁盤空間。







總結(jié)

以上是生活随笔為你收集整理的使用pg_repack 回收表体积的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。