트랜잭션 NTFS을 위한 성능 고려 사항

트랜잭션 NTFS(TxF)는 성능을 위해 면밀히 설계되었으며 일반적으로 유사한 시나리오에서 범용 트랜잭션 대안보다 더 나은 성능을 제공합니다. 그러나 파일 시스템 트랜잭션은 트랜잭션되지 않은 작업보다 오버헤드가 더 많으며 트랜잭션되지 않은 I/O에 비해 I/O 성능이 일부 감소할 것으로 예상됩니다. 성능이 중요한 애플리케이션은 트랜잭션된 파일 시스템 작업의 성능 영향을 평가하여 기술 채택 자격 주기를 수행해야 합니다.

TxF 작업 개요

트랜잭션이 중단되는 경우 TxF는 실행 취소 로깅을 사용하여 파일 시스템을 일관된 상태로 되돌리는 작업(롤백이라고도 합니다)에 필요한 변경 내용을 기록합니다. 이 실행 취소 로깅은 추가 I/O를 생성하며 비트랜잭션 파일 시스템 작업과 비교할 때 TxF 성능 오버헤드의 원본입니다.

TxF 작동 방식에 대한 대략적인 요약은 다음과 같습니다.

  • 트랜잭션이 진행됨에 따라 TxF는 파일 시스템에 수정이 이루어질 때마다 실행 취소 레코드를 로그 파일에 씁니다. 중단이 발생하면 이러한 실행 취소 레코드가 구문 분석되어 파일 시스템을 트랜잭션이 시작되기 전의 상태로 돌려놓습니다.
  • 메타데이터 변경 실행 취소 레코드는 파일 시스템의 메타데이터에 대한 변경 내용만 설명합니다. 이 예로는 이동, 이름 바꾸기, 추가 및 특성 변경이 있습니다. 메타데이터 변경 실행 취소 레코드의 경우 변경 내용을 실행 취소하는 데 필요한 모든 정보는 레코드에 있고 로그 파일에 저장됩니다.
  • 덮어쓰기 실행 취소 레코드는 파일의 일부에 대한 덮어쓰기를 설명합니다. 파일 덮어쓰기가 발생하면 파일의 원래 내용이 숨겨진 디렉터리의 특수 실행 취소 파일에 저장되고 덮어쓰기 실행 취소 레코드가 이 파일을 가리킵니다. 파일 업데이트가 결국 캐시에서 디스크로 플러시되면 실행 취소 파일의 내용도 플러시되어야 하므로 트랜잭션된 파일 덮어쓰기가 최대 두 개의 추가 임의 I/O 작업을 생성할 수 있습니다. 하나는 이전 데이터를 읽고 다른 하나는 실행 취소 파일에 쓰기 위한 것입니다. 이러한 추가 I/O 작업은 TxF의 성능 비용입니다.
  • 커밋이 발생하면 먼저 TxF는 모든 실행 취소 정보를 플러시하고 실제 파일 변경 내용을 플러시한 다음 커밋 레코드를 작성하고 플러시합니다. 플러시할 실행 취소 파일이 없는 경우 트랜잭션되지 않은 I/O를 기준으로 하는 유일한 추가 TxF 오버헤드는 로그 플러시 자체입니다. 그러나 로그 플러시로 인해 성능 비용이 최소화되도록 효율적인 대규모 순차 쓰기가 발생합니다.
  • TxF는 커밋에 최적화되어 있습니다. 대부분의 트랜잭션은 성공하며 롤백할 필요가 없을 것으로 예상되므로 트랜잭션에 대한 모든 실행 취소 레코드는 사용되지 않을 것으로 예상됩니다. 성능 관점에서 TxF 커밋 작업은 빠르며 롤백은 리소스를 많이 사용합니다.
  • 롤백은 커밋보다 리소스를 많이 사용합니다. 롤백하는 동안 트랜잭션에서 수행된 모든 변경 내용을 취소해야 합니다. 일반적으로 롤백 시간은 처음 변경할 때 걸린 시간과 거의 같을 수 있습니다. 예를 들어 모든 변경을 수행하는 데 1초가 걸린 경우 실행 취소하는 데 약 1초가 걸릴 수 있습니다. 매우 긴 트랜잭션의 경우 롤백은 성능에 추가적인 영향을 미칠 수 있습니다. 예를 들어 시스템이 응답을 중지하고 예정되지 않은 재시작을 수행해야 하는 이벤트에서 시스템이 트랜잭션을 자동으로 롤백해야 하는 경우 시스템 부팅 시간이 지연될 수 있습니다.

이전 목록에서 도출할 수 있는 성능에 대한 요약 결론은 다음과 같습니다.

  • 파일 덮어쓰기가 포함된 트랜잭션에 대한 TxF의 성능 비용은 상당할 수 있습니다.
  • 대규모 트랜잭션을 사용하는 경우 메타데이터 작업만 포함하는 트랜잭션에 대한 TxF의 성능 비용은 상대적으로 낮을 수 있습니다. 대규모 트랜잭션은 모든 커밋 레코드에 대해 실행 취소 레코드가 많은 경우입니다.

최상의 성능을 위한 권장 사항

더 큰 트랜잭션에 대한 TxF 오버헤드를 분할 상환합니다. 예를 들어 적용해야 하는 변경 내용의 집합이 N개 있고 각 변경 사항에 M개의 단계가 있으며, 이를 수행하기 위해 M개의 단계를 가진 N개의 트랜잭션으로 수행하는 옵션과 M*N단계를 포함하는 단일 트랜잭션으로 수행하는 옵션이 있는 경우 후자의 옵션이 더 효율적입니다.

매우 큰 트랜잭션의 부팅에 미칠 수 있는 영향을 고려합니다. 앞에서 설명한 대로 시스템이 부팅 시간으로 자동 롤백을 수행해야 하는 경우 롤백은 느릴 수 있으며 부팅 시간이 지연됩니다. 트랜잭션이 클수록 지연 시간이 길어집니다.

트랜잭션을 대부분 메타데이터 작업으로 유지합니다. 이는 TxF가 최적화된 것이며, 일반적으로 성능은 대용량 메타데이터 트랜잭션을 위한 트랜잭션되지 않은 파일 I/O와 거의 동일합니다. 효율적인 메타데이터 TxF 함수의 예로 MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted 및 추가된 쓰기가 있습니다(파일 포인터가 파일 끝(EOF)에 있는 경우 WriteFile 함수 호출). 리소스 집약적인 비 메타데이터 작업의 예로는 파일 포인터가 EOF에 없는 경우의 WriteFile 함수에 대한 호출이 있습니다.

TxF 성능 기대치 요약

현재 위치 업데이트의 경우 파일의 섹션에 대한 덮어쓰기는 트랜잭션되지 않은 파일 I/O보다 훨씬 느리지만, 파일 시스템 메타데이터 작업(예: 만들기, 이동 및 추가)에 대한 TxF 성능은 대용량 트랜잭션을 위한 트랜잭션되지 않은 파일 I/O와 비슷합니다.