FirebirdSQL: 내부 파일, 임시 파일 및 환경 변수
_by Vasily Sidorov, Sep 2, 2022, IBSurgeon
경험이 풍부한 Firebird DBA라면 Firebird가 내부 및 임시 파일을 저장하기 위해 상당히 많은 디스크 공간을 필요로 할 수 있다는 것을 알고 있습니다. 프로덕션 시스템의 임시 파일에 권장되는 디스크 공간 크기는 30-40GB이지만, 고부하 시스템에서는 더 클 수 있습니다.
이 글에서는 Firebird 내부 및 임시 파일의 유형을 설명하고, 구성 매개변수와 OS 환경 변수를 통해 어떻게 저장되고 관리되는지 살펴보겠습니다. 이 글은 Firebird의 설치 및 구성 마스터링에 관한 일련의 기사와 자료를 계속합니다.
Firebird 코어 개발자의 중요 공지:
절대, 절대, 절대 FIREBIRD_LOCK 환경 변수를 설정/변경하지 마십시오 - 자신이 무엇을 하고 있는지 아주 잘 알고 있지 않는 한.
IBSurgeon 팀의 명시적 제안:
FIREBIRD_LOCK을 변경하지 마십시오.
다른 임시 파일의 경우 - 이 문서를 참조하십시오.
Firebird의 내부 파일
내부 파일은 Firebird가 내부 작업을 수행하는 데 사용하는 파일입니다. 이러한 파일은 사용자나 타사 소프트웨어가 변경하거나 접근해서는 안 됩니다. 아래 정보는 참고용으로만 제공됩니다.
내부 파일의 일반적인 명명 패턴
Firebird 내부 파일은 접두사 fbNN_을 사용하며, NN은 다음과 같을 수 있습니다:
- 주요 ODS(디스크 상 구조) 번호(Firebird 3.0의 경우 ODS 12, Firebird 4.0의 경우 ODS 13), 즉 파일이 fb13으로 시작합니다.
- NN은 축약된 버전 번호일 수 있습니다 - 예: 파일이 fb50으로 시작할 수 있습니다.
또한 임시 파일에도 사용되는 접두사 fb_가 있을 수 있습니다.
Firebird의 내부 파일 유형
Firebird에는 다음과 같은 주요 내부 파일 유형이 있습니다:
- fb_lock_ 잠금 파일 - Firebird 잠금 관리자가 사용하는 파일
- fbNN_monitor_ 모니터링 테이블 데이터가 있는 파일
- fbNN_trace_ 추적 세션 데이터가 있는 파일
- fb_event_ 이벤트 버퍼가 저장된 파일
- fb_user_mapping 사용자 매핑 데이터가 있는 파일
- 추적 세션의 내부 데이터가 있는 파일
- 플래그 파일(크기 0)
- fb_repl_ 복제 파일
Firebird 내부 파일을 자세히 살펴보겠습니다.
잠금 파일
잠금 파일은 접두사 fb_lock_을 가집니다. Firebird의 잠금 관리자가 Firebird 데이터베이스 내부의 객체 및 Firebird 인스턴스 간의 접근을 동기화하는 데 사용합니다.
잠금 파일은 데이터베이스 파일이 열릴 때 생성되고 닫힐 때 삭제됩니다.
기본적으로 데이터베이스 파일은 마지막 연결이 끊어질 때 닫힙니다. Firebird 3.0부터 LINGER 옵션을 사용하여 마지막 연결이 끊어진 후에도 Firebird에서 데이터베이스 파일을 열린 상태로 유지할 수 있습니다.
잠금 파일의 초기 크기는 firebird.conf의 LockMemSize 매개변수로 설정됩니다. 작업 크기는 아키텍처에 따라 다릅니다: SuperServer는 Classic 및 SuperClassic보다 잠금 파일을 덜 집중적으로 사용합니다. 일반적인 잠금 테이블 크기는 약 30-50MB이지만, Classic/SuperClassic에서 수천 개의 연결이 있는 서버의 경우 잠금 파일 크기가 2GB까지 커질 수 있습니다. 2GB는 표준 Firebird에서 잠금 파일의 구현 한계입니다.
모니터링 테이블 데이터가 있는 파일
버전 2.1부터 Firebird에는 모니터링 테이블이 있습니다. 이러한 테이블은 데이터베이스 내부에 저장되지 않으며, 모니터링 데이터는 요청 시 수집되어 fbNN_monitor_ 이름 패턴의 내부 파일에 보관됩니다.
모니터링 테이블 데이터가 있는 파일의 크기는 연결 수와 활동(트랜잭션, 문, 저장 프로시저 등)에 따라 달라집니다. 또한 fb_NN_monitor_ 파일의 수와 크기는 서로 다른 연결에서 모니터링 테이블에 대한 요청 수에 따라 달라집니다(이것이 모니터링이 아닌 작업에 MON$ 테이블을 사용하지 말아야 하는 이유 중 하나입니다).
추적 세션 데이터가 있는 파일
파일 이름 패턴 fbNN_trace_는 활성 추적 세션 파일에 대한 링크를 유지합니다. fb_trace_ 이름 패턴의 파일에는 추적 세션에 대한 정보가 포함됩니다. 추적 데이터의 일종의 버퍼입니다. fb_trace 파일의 최대 크기는 firebird.conf의 MaxUserTraceLogSize 매개변수로 제한됩니다. 이 버퍼가 초과되면 추적이 자동으로 일시 중단됩니다.
이벤트 버퍼 파일
fb_event_ 이름 패턴의 파일은 Firebird가 클라이언트 애플리케이션에 전달되지 않은 이벤트를 저장하는 버퍼입니다.
사용자 매핑 데이터 파일
fb_user_mapping 파일은 Firebird 인스턴스에서 사용자 매핑을 캐시하는 데 사용됩니다.
플래그 파일
POSIX에서 Firebird는 크기가 0인 플래그 파일 - fb_guard, fb_init, fb_port_NUMBER를 사용합니다. 이러한 파일은 Firebird 시작 시 사용됩니다.
복제 파일
Firebird 4 및 HQbird에서 fb_repl_ 파일에는 복제 프로세스의 내부 데이터가 포함됩니다.
내부 파일의 위치
기본적으로 모든 Firebird 내부 파일은 동일한 폴더에 저장됩니다: Windows에서는 C:\ProgramData\firebird, Linux에서는 /tmp/firebird입니다. 폴더에 충분한 권한이 있어야 Firebird 인스턴스가 파일을 생성하고 작업할 수 있다는 점에 유의하십시오!
FIREBIRD_LOCK 환경 변수를 정의하여 Firebird 내부 파일이 있는 폴더의 위치를 변경할 수 있지만, 권장하지 않습니다.
참고: 데이터베이스 손상을 방지하려면 동일한 데이터베이스 파일을 여는 모든 Firebird 프로세스가 동일한 FIREBIRD_LOCK으로 작업해야 합니다. 이 변수를 만들지 말고 기본 위치를 사용하십시오.
내부 파일의 크기
실질적으로 Firebird 내부 파일의 총 크기는 약 100-200MB이며, 알려진 최대 크기는 2GB입니다.
Firebird의 임시 파일
임시 파일은 사용자 작업의 결과로 발생하는 임시 데이터를 저장하기 위해 Firebird 엔진이 생성합니다 - 예를 들어 DISTINCT가 있는 쿼리 등입니다. 임시 파일은 고부하 프로덕션 시스템에서 매우 클 수 있으므로, 경험 많은 DBA가 임시 파일의 유형을 인식하고 필요한 경우 Firebird 구성을 조정하거나 임시 파일을 저장할 디스크 공간을 할당할 수 있어야 합니다.
Firebird의 임시 파일 위치
Firebird는 환경 변수 FIREBIRD_TMP, TEMP, TMP(이 순서로)에 지정된 폴더에 임시 파일을 생성합니다. 이러한 변수가 없으면 Windows에서는 C:\Temp, Linux에서는 /tmp에 임시 파일이 생성됩니다.
실질적으로 Windows에서는 C:\Windows\Temp(환경 변수 TEMP에 해당)에서 Firebird 임시 파일을 볼 수 있고, Linux에서는 /tmp에서 볼 수 있습니다.
Firebird의 임시 파일 유형
다음과 같은 임시 파일이 있습니다(모두 접두사 fb_ 사용):
- fb_table_ 테이블 객체 - 임시 테이블을 포함하되 이에 국한되지 않음
- fb_blob_ BLOB 및 자율 트랜잭션
- fb_undo_ 실행 취소 데이터
- fb_recbuf_ 활성 쿼리, 가상 테이블 등의 중간 데이터를 유지하는 데 사용
- fb_merge_ 해시 조인 데이터
- fb_sort_ 정렬(DISTINCT/ORDER BY/GROUP BY가 있는 쿼리 및 인덱스 생성/재생성용)
- fb_tpc_ fb_tpc_ 데이터 - v4부터, 관련 커밋 번호가 있는 모든 알려진 트랜잭션 목록
- fb_snap_ 데이터 - v4부터, 모든 활성 데이터베이스 스냅샷 목록
임시 파일의 위치를 변경하는 방법은?
Firebird 4 이전 버전의 경우 Firebird 구성 매개변수 TempDirectories로 유형 4-8의 임시 파일을 저장할 특정 폴더를 정의할 수 있습니다.
Firebird 4 이상의 경우 새로운 conf 매개변수 TempTableDirectory를 사용하여 유형 1-3의 임시 테이블을 저장할 폴더를 지정할 수 있습니다. firebird.conf 및 databases.conf에서 설정할 수 있습니다.
Firebird용 환경 변수
Firebird는 다음 OS 환경 변수를 사용할 수 있습니다(정의된 경우):
- FIREBIRD Firebird 구성 파일이 있는 폴더
- FIREBIRD_LOCK 내부 파일이 있는 폴더
- FIREBIRD_MSG 메시지 파일(firebird.msg)이 있는 폴더
- FIREBIRD_TMP 임시 파일용 폴더
실질적으로 FIREBIRD_TMP는 임시 파일을 특정 비기본 위치에 저장해야 할 큰 이유가 있을 때 정의할 가치가 있는 유일한 변수입니다.
FIREBIRD_TMP의 경로가 유효하지 않으면(존재하지 않거나 권한이 충분하지 않음) Firebird가 작동하지 못하게 하는 심각한 오류가 발생할 수 있습니다.
Firebird 코어 개발자의 중요 공지:
절대, 절대, 절대 FIREBIRD_LOCK 환경 변수를 설정하거나 변경하지 마십시오 - 무엇을 하고 있는지 아주 잘 알고 있지 않는 한.
IBSurgeon 팀의 명시적 제안:
FIREBIRD_LOCK을 변경하지 마십시오. 이 정보는 참고용으로만 제공됩니다.
다른 임시 파일에 대해서는 이 문서를 참조하세요.
요약 대신: 매우 자주 묻는 질문에 대한 답변
많은 DBA가 묻습니다 - Firebird 내부 및/또는 임시 파일을 저장하기 위해 RAM 드라이브나 tmpfs를 사용해야 합니까?
짧은 답변은: 아니요, Firebird 구성을 튜닝하는 것이 더 좋습니다. 메모리가 많다면 DefaultDBCachePages 값을 늘릴 수 있고(SuperServer 전용), TempCacheLimit를 증가시킬 수 있습니다(버전 3+에서 Firebird는 TempCacheLimit를 2Gb 이상 사용할 수 있습니다).
어떤 값을 사용해야 할지 확실하지 않다면, 특정 하드웨어/VM 매개변수에 대한 최적의 안전한 구성을 생성하는 Firebird 구성 계산기를 사용하십시오.
더 긴 답변: Firebird는 임시 및 내부 파일의 대부분을 메모리에 유지하도록 설계되었지만, 실제로 임시 객체가 매우 커지는 상황이 있기 때문에 디스크에 저장하는 메커니즘도 있습니다. Firebird는 가능하고 합리적인 경우 OS 메커니즘(mmap, 파일 시스템 캐시, 임시 파일 등)을 효과적으로 사용하여 임시 및 내부 파일을 메모리에 캐시합니다. Firebird 튜닝은 먼저 Firebird 구성을 통해 수행한 다음 OS(임시 파일 위치 설정, 파일 캐시 튜닝을 위한 다양한 옵션 등)를 통해 수행해야 합니다.
관련 링크
비디오:
메모리 사용량 튜닝에 관한 프레젠테이션
질문이 있거나 피드백을 보내려면 언제든지 [email protected]으로 연락해 주십시오.