진공 청소기는 죽은 튜플이 차지하는 저장을 재생합니다.
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는 페이지에 대한 가시성 "true"를 의미합니다. :
postgres=# select count(blkno), all_visible from pg_visibility_map('gokhanadev') group by all_visible;
count | all_visible
-------+-------------
4425 | f
(1 row)
이제 Dead Tuples를 볼 수 있도록 데이터를 업데이트 할 수 있습니다.
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)
Auto-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);
진공에 대한 자세한 내용