본문 바로가기
데이터베이스/postgresql

postgresql 에서 FSM 은 무엇인가?

by 디찌s 2024. 10. 14.
728x90
반응형

**FSM (Free Space Map)**은 PostgreSQL에서 테이블 및 인덱스의 사용되지 않은 공간을 추적하기 위한 데이터 구조입니다. FSM은 디스크 페이지 내에서 아직 사용 가능한 여유 공간을 기록하며, 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다.

FSM의 역할

  1. 빈 공간 관리: PostgreSQL의 테이블에 새로운 데이터를 삽입하거나 기존 데이터를 수정할 때, 새롭게 할당된 디스크 페이지 대신 기존의 빈 공간을 활용하는 것이 효율적입니다. FSM은 테이블 내에서 사용되지 않은 공간(빈 페이지 또는 일부 공간이 사용 중인 페이지)을 추적하여, 필요할 때 이 빈 공간을 사용할 수 있게 도와줍니다.
  2. 데이터 삽입 효율성: 새로운 데이터가 삽입될 때, PostgreSQL은 FSM을 참고하여 빈 공간이 있는 페이지를 찾고 그곳에 데이터를 삽입합니다. 이렇게 하면 불필요한 페이지 할당을 줄일 수 있고, 데이터 저장의 효율성이 높아집니다.
  3. VACUUM과 연계: PostgreSQL의 VACUUM 프로세스가 동작할 때, FSM은 빈 공간 정보를 활용하여 페이지의 빈 공간을 재활용합니다. VACUUM은 테이블에서 불필요한(데드 튜플) 데이터를 제거하고, 그 결과 생긴 빈 공간을 FSM에 기록합니다.

FSM 동작 원리

  • FSM은 각 테이블의 빈 공간을 저장하는 맵(Map)입니다.
  • 각 페이지에 남은 빈 공간이 얼마나 있는지를 추적하고, 필요할 때 그 정보를 사용하여 빈 공간이 있는 페이지에 새 데이터를 삽입하거나 업데이트할 수 있습니다.
  • 페이지의 빈 공간이 줄어들거나 늘어나면 FSM도 이에 맞춰 업데이트됩니다.

FSM의 한계

  • FSM은 페이지 단위로 빈 공간을 관리하며, 페이지 내에서 세밀한 공간까지 추적하지는 않습니다. 만약 페이지 내의 빈 공간이 너무 작아 새로운 레코드를 저장할 수 없다면 새로운 페이지가 할당될 수 있습니다.
  • FSM에 기록된 정보는 완벽하지 않을 수 있으며, PostgreSQL은 FSM에 기록된 페이지가 충분한 공간을 갖지 않는 경우 새로운 페이지를 할당할 수도 있습니다.

요약

  • **FSM (Free Space Map)**은 PostgreSQL에서 테이블이나 인덱스의 빈 공간을 추적하여, 새로운 데이터를 삽입할 때 기존 빈 공간을 효율적으로 활용할 수 있게 돕는 구조입니다.
  • FSM은 디스크 공간을 절약하고 데이터베이스 성능을 최적화하는 데 중요한 역할을 합니다.
  • PostgreSQL의 VACUUM 작업과 밀접하게 연계되어 불필요한 데이터를 제거하고, 그 결과 생긴 빈 공간을 기록 및 관리합니다.
728x90
반응형

댓글