이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBSurgeon 라이브러리

Firebird 2.0 가비지 컬렉터

엔진은 update\delete 문에 의해 생성된 각 레코드 버전을 알고 있으며, 가장 오래된 스냅샷 트랜잭션(OST)이 허용하는 즉시 이를 제거할 수 있습니다. 이로 인해 사용자 요청(예: SELECT COUNT(*) FROM table) 시 이러한 버전이 포함된 페이지를 다시 읽을 필요가 없어지고, 이러한 버전이 절대 읽히지 않는 상황을 방지합니다(물론 sweep은 항상 사용되지 않는 모든 레코드 버전을 제거했습니다). 또한 필요한 페이지가 버퍼 캐시에 여전히 존재할 가능성이 높으므로 추가 디스크 I/O가 줄어듭니다.

사용되지 않는 버전이 있는 페이지를 가비지 컬렉터에 알린 시점과 가비지 컬렉터가 이 페이지를 읽는 시점 사이에 새 트랜잭션이 레코드를 업데이트할 수 있으며, 이 새 트랜잭션 번호가 OST보다 높거나 여전히 활성 상태인 경우 가비지 컬렉터는 이 레코드를 정리할 수 없습니다. 이 경우 엔진은 다시 이 페이지 번호로 가비지 컬렉터에 알리고, 가비지 컬렉터는 나중에 가비지를 정리합니다(이전 가비지 컬렉터는 사용자가 다시 읽을 때까지 이 페이지를 “잊어버립니다”).

협력적(cooperative) 및 백그라운드(background) 가비지 컬렉션이 모두 가능합니다. 이를 관리하기 위해 새로운 구성 매개변수 “GCPolicy"가 도입되었습니다. 다음으로 설정할 수 있습니다:

  • a) cooperative - 가비지 컬렉션은 IB6 이전과 같이 협력적 모드에서만 수행됩니다. 각 사용자 요청은 사용되지 않는 레코드 버전을 제거할 책임이 있습니다. 이것이 IB6 이전 엔진이 작동하는 방식입니다. Classic Server 모드에서 유일한 옵션입니다. 엔진은 update 및 delete 문의 결과로 생성된 버전을 추적하지 않습니다.

  • b) background - 가비지 컬렉션은 IB6 이상에서와 같이 백그라운드 스레드에 의해서만 수행됩니다. 사용자 요청은 사용되지 않는 레코드 버전을 제거하지 않습니다. 대신 사용자 요청은 사용되지 않는 레코드 버전이 감지된 페이지 번호로 전용 가비지 컬렉터 스레드에 알립니다. 또한 엔진은 update\delete 문이 백버전을 생성한 페이지 번호를 기억합니다.

  • c) combined - 백그라운드 및 협력적 가비지 컬렉션이 모두 수행됩니다.

기본값은 SuperServer의 경우 “combined"입니다. ClassicServer는 이 매개변수를 무시하고 항상 “cooperative” 모드로 작동합니다.