真空收回死亡元素所佔據的存儲空間。
要簡單地使用PostgreSQL最新圖像運行容器,我們可以執行以下命令:
docker run --name postgres-vacuum --rm -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e PGDATA=/var/lib/postgresql/data/pgdata -v /tmp:/var/lib/postgresql/data -p 5432:5432 -it postgres:latest
執行到Docker:
docker exec -it postgres-vacuum /bin/sh
對於docker-compose.yaml:
version: '3.8'
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
volumes:
db:
driver: local
通過Docker-Compose運行PostgreSQL:
docker-compose up -d
進入Docker容器
docker exec -it postgres-vacuum /bin/bash
並訪問Postgres CLI:
psql --username postgres
讓我們創建一個PG_visibility擴展程序以查看死亡元素。
CREATE EXTENSION pg_visibility;
讓我們使用PG_visibility進行刪除操作示例。
創建一個表:
postgres=# create table gokhanadev(id int, id2 int);
CREATE TABLE
並使用generate_series插入一些數據:
postgres=# insert into gokhanadev values(generate_series(1,1000000), generate_series(1,1000000));
INSERT 0 1000000
檢查所有可見的元組。 F表示對頁面的可見性是錯誤的。 T表示頁面的可見性“真實”。 :
postgres=# select count(blkno), all_visible from pg_visibility_map('gokhanadev') group by all_visible;
count | all_visible
-------+-------------
4425 | f
(1 row)
現在,我們可以更新數據以查看DEAD元組:
postgres=# Update gokhanadev set id = id + 1 where id > 50000;
UPDATE 950000
讓我們通過pg_visibility_map檢查死元組:
postgres=# select count(blkno), all_visible from pg_visibility_map('gokhanadev') group by all_visible;
count | all_visible
-------+-------------
8408 | f
221 | t
(2 rows)
您可以等待幾分鐘以供自動Vacuum或執行真空評論
postgres=# VACUUM gokhanadev;
VACUUM
看看真空之後發生的事情:
postgres=# select count(blkno), all_visible from pg_visibility_map('gokhanadev') group by all_visible;
count | all_visible
-------+-------------
8629 | t
(1 row)
VACUUM VERBOSE table_name
VACUUM ANALYZE table_name
VACUUM(FULL) table_name
ALTER TABLE table_name SET (autovacuum_enabled = false);
有關真空的更多信息