PostgreSQL의 죽은 튜플.

오늘은 PostgreSQL의 Dead Tuples에 대해 알아보겠습니다. 아시다시피 PostgreSQL은 MVCC 아키텍처를 기반으로 합니다.

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 an unused record.
That types of record called Dead Tuple or Dead 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에 대해.

감사합니다 <👨‍💻/>

좋은 웹페이지 즐겨찾기