-
postgresql 에서 FSM 은 무엇인가?데이터베이스/postgresql 2024. 10. 14. 16:48728x90반응형
**FSM (Free Space Map)**은 PostgreSQL에서 테이블 및 인덱스의 사용되지 않은 공간을 추적하기 위한 데이터 구조입니다. FSM은 디스크 페이지 내에서 아직 사용 가능한 여유 공간을 기록하며, 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다.
FSM의 역할
- 빈 공간 관리: PostgreSQL의 테이블에 새로운 데이터를 삽입하거나 기존 데이터를 수정할 때, 새롭게 할당된 디스크 페이지 대신 기존의 빈 공간을 활용하는 것이 효율적입니다. FSM은 테이블 내에서 사용되지 않은 공간(빈 페이지 또는 일부 공간이 사용 중인 페이지)을 추적하여, 필요할 때 이 빈 공간을 사용할 수 있게 도와줍니다.
- 데이터 삽입 효율성: 새로운 데이터가 삽입될 때, PostgreSQL은 FSM을 참고하여 빈 공간이 있는 페이지를 찾고 그곳에 데이터를 삽입합니다. 이렇게 하면 불필요한 페이지 할당을 줄일 수 있고, 데이터 저장의 효율성이 높아집니다.
- VACUUM과 연계: PostgreSQL의 VACUUM 프로세스가 동작할 때, FSM은 빈 공간 정보를 활용하여 페이지의 빈 공간을 재활용합니다. VACUUM은 테이블에서 불필요한(데드 튜플) 데이터를 제거하고, 그 결과 생긴 빈 공간을 FSM에 기록합니다.
FSM 동작 원리
- FSM은 각 테이블의 빈 공간을 저장하는 맵(Map)입니다.
- 각 페이지에 남은 빈 공간이 얼마나 있는지를 추적하고, 필요할 때 그 정보를 사용하여 빈 공간이 있는 페이지에 새 데이터를 삽입하거나 업데이트할 수 있습니다.
- 페이지의 빈 공간이 줄어들거나 늘어나면 FSM도 이에 맞춰 업데이트됩니다.
FSM의 한계
- FSM은 페이지 단위로 빈 공간을 관리하며, 페이지 내에서 세밀한 공간까지 추적하지는 않습니다. 만약 페이지 내의 빈 공간이 너무 작아 새로운 레코드를 저장할 수 없다면 새로운 페이지가 할당될 수 있습니다.
- FSM에 기록된 정보는 완벽하지 않을 수 있으며, PostgreSQL은 FSM에 기록된 페이지가 충분한 공간을 갖지 않는 경우 새로운 페이지를 할당할 수도 있습니다.
요약
- **FSM (Free Space Map)**은 PostgreSQL에서 테이블이나 인덱스의 빈 공간을 추적하여, 새로운 데이터를 삽입할 때 기존 빈 공간을 효율적으로 활용할 수 있게 돕는 구조입니다.
- FSM은 디스크 공간을 절약하고 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다.
- PostgreSQL의 VACUUM 작업과 밀접하게 연계되어 불필요한 데이터를 제거하고, 그 결과 생긴 빈 공간을 기록 및 관리합니다.
728x90반응형'데이터베이스 > postgresql' 카테고리의 다른 글
Rows Removed by Join Filter ??란 무엇인가? (1) 2024.10.21 mysql 에서 for update를 통해 lock을 걸경우와 postgres에서 걸경우 같을까? (0) 2024.10.18 postgresql 실행계획 - recheck cond - 수정중 (0) 2024.05.16 short query , long query 란 무엇인가? sql최적화 팁 - 수정중 (0) 2024.05.13 POSTGRES 테이블 인덱스 - 정리 (0) 2024.05.10