PostgreSQL의 죽은 튜플.
MVCC is a
Multi Version Concurrency Control
basically "A single rows has multiple versions."
E.g, If a user insert a record of a Person whose AGE is 21. Now, he update the record with AGE 22, so what PostgreSQL does here, PostgreSQL stored those two records with the different versions.
Old version: Age = 21
New version: Age = 22
By default user can only select the new version of the record, and old version marked as anunused
record.
That types of record calledDead Tuple
orDead Row
.
pg_stat_user_tables
를 사용하여 라이브 튜플 또는 데드 튜플을 찾는 방법.select n_live_tup, n_dead_tup, relname from pg_stat_user_tables;
특정 테이블에서 튜플을 찾습니다.
SELECT n_live_tup, n_dead_tup, relname FROM
pg_stat_user_tables where relname = 'users';
별칭 사용
SELECT relname AS Table_Name, n_live_tup AS Live_Tuples,
n_dead_tup AS Dead_Tuples FROM
pg_stat_user_tables where relname = 'users';
SQL 결과:
How to avoid to create Dead Tuple while Inserting the duplicate data.
테이블에 고유 제약 조건이 있고 사용자가 동일한 데이터를 다시 삽입하려고 하면 PostgreSQL은 오류를 반환합니다. >
Uniqueness violation. duplicate key value violates unique constraint
. ON CONFLICT DO NOTHING
절을 사용하여 이를 피할 수 있습니다.INSERT INTO users VALUES ('name', '[email protected]')
ON CONFLICT DO NOTHING;
반환
INSERT 0 0
은 테이블에 아무 것도 삽입되지 않았고 쿼리에서 오류가 발생하지 않았음을 나타냅니다. ON CONFLICT DO NOTHING
의 경우 사전 확인으로 인해 데드 튜플이 생성되지 않습니다.VACUUM을 사용하여 죽은 튜플을 삭제하는 방법 -
VACUUM users;
사용자 테이블 내의 공간을 비우고 사용자 테이블만 이 공간을 사용할 수 있습니다. 시스템에서 이 여유 공간을 사용하려면 이 명령을 실행해야 합니다.
VACUUM FULL users;
Read More VACUUM에 대해.
감사합니다 <👨💻/>
Reference
이 문제에 관하여(PostgreSQL의 죽은 튜플.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sandeepkumardev/how-to-handle-dead-tuples-in-postgresql-54m1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)