สูญญากาศเรียกคืนการจัดเก็บที่ถูกครอบครองโดย Tuples ที่ตายแล้ว
หากต้องการเรียกใช้คอนเทนเนอร์โดยใช้รูปภาพล่าสุด 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
ในการเรียกใช้ postgreSQL ผ่าน Docker-compose:
docker-compose up -d
เข้าไปในคอนเทนเนอร์ Docker
docker exec -it postgres-vacuum /bin/bash
และเข้าถึง Postgres CLI:
psql --username postgres
มาสร้างส่วนขยาย pg_visibility เพื่อดู tuples ที่ตายแล้ว
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
ตรวจสอบ tuples ที่มองเห็นได้ทั้งหมด F หมายถึงการมองเห็นเป็นเท็จสำหรับหน้า T หมายถึงทัศนวิสัย“ จริง” สำหรับหน้า -
postgres=# select count(blkno), all_visible from pg_visibility_map('gokhanadev') group by all_visible;
count | all_visible
-------+-------------
4425 | f
(1 row)
ตอนนี้เราสามารถอัปเดตข้อมูลเพื่อดู Tuples ที่ตายแล้ว:
postgres=# Update gokhanadev set id = id + 1 where id > 50000;
UPDATE 950000
ลองตรวจสอบ Tuples ที่ตายแล้วผ่าน 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 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);
เพิ่มเติมเกี่ยวกับสูญญากาศ