FILESTREAM을 위한 최선의 방법

이 항목에서는 권장하는 최상의 FILESTREAM 사용 방법에 대해 설명합니다.

물리적 구성 및 유지 관리

FILESTREAM 저장소 볼륨을 설정할 때 다음 지침을 고려하십시오.

  • FILESTREAM 컴퓨터 시스템에서 약식 파일 이름을 해제합니다. 약식 파일 이름은 생성하는 데 시간이 많이 소요됩니다. 약식 파일 이름을 비활성화하려면 Windows fsutil 유틸리티를 사용합니다.

  • 정기적으로 FILESTREAM 컴퓨터 시스템 조각 모음을 수행합니다.

  • 64KB NTFS 클러스터를 사용합니다. 압축된 볼륨은 4KB NTFS 클러스터로 설정해야 합니다.

  • FILESTREAM 볼륨에서 인덱싱을 해제하고 disablelastaccess를 설정합니다. disablelastaccess를 설정하려면 Windows fsutil 유틸리티를 사용합니다.

  • FILESTREAM 볼륨에 대한 바이러스 검사가 필요 없을 때는 해제합니다. 바이러스 검사가 필요한 경우, 잘못된 파일을 자동으로 삭제하는 정책을 설정하지 마십시오.

  • 응용 프로그램에서 요구되는 내결함성 및 성능 RAID 수준을 설정하고 조절합니다.

RAID 수준

쓰기 성능

읽기 성능

내결함성

주의

RAID 5

보통

보통

최고

성능은 하나의 디스크 또는 JBOD보다 우수하지만 RAID 0 또는 스트라이프를 사용하는 RAID 5보다 떨어집니다.

RAID 0

최고

최고

없음

RAID 5 + 스트라이프

최고

최고

최고

가장 비용이 많이 드는 옵션입니다.

물리적 데이터베이스 디자인

FILESTREAM 데이터베이스를 디자인할 때 다음 같은 지침을 고려하십시오.

  • FILESTREAM 열에는 해당하는 uniqueidentifier ROWGUID 열이 수반되어야 합니다. 이러한 종류의 테이블에는 고유한 인덱스도 함께 나타나야 합니다. 일반적으로 이러한 인덱스는 클러스터형 인덱스가 아닙니다. 데이터베이스 비즈니스 논리에 클러스터형 인덱스가 필요한 경우, 인덱스에 저장된 값이 임의의 값이 아니어야 합니다. 임의의 값인 경우에는 테이블에서 행이 추가되거나 제거될 때마다 인덱스가 다시 정렬됩니다.

  • 성능상의 이유로 FILESTREAM 파일 그룹 및 컨테이너는 운영 체제, SQL Server 데이터베이스, SQL Server 로그, tempdb 또는 페이징 파일 이외의 볼륨에 있어야 합니다.

  • 공간 관리 및 정책은 FILESTREAM에서 직접적으로 지원되지 않습니다. 하지만 각 FILESTREAM 파일 그룹을 개별 볼륨에 지정하고 볼륨의 관리 기능을 사용하는 방법을 통해 간접적으로 공간을 관리하고 정책을 적용할 수 있습니다.

응용 프로그램 디자인 및 구현

  • FILESTREAM이 사용된 응용 프로그램을 디자인하고 구현할 때는 다음 지침을 고려하십시오.

  • 초기화되지 않은 FILESTREAM 열을 나타내는 데 0x 대신 NULL을 사용합니다. 0x 값을 사용하면 파일이 생성되고, NULL을 사용했을 때는 그렇지 않습니다.

  • null이 아닌 FILESTREAM 열이 포함된 테이블에 삽입 및 삭제 작업을 사용하지 마십시오. 삽입 및 삭제 작업은 가비지 수집에 사용되는 FILESTREAM 테이블을 수정할 수 있습니다. 그러면 시간이 지남에 따라 응용 프로그램 성능이 저하됩니다.

  • 복제가 사용되는 응용 프로그램에 NEWID() 대신 NEWSEQUENTIALID()를 사용합니다. NEWSEQUENTIALID()는 이런 응용 프로그램에서 GUID를 생성하는 성능이 NEWID()보다 우수합니다.

  • FILESTREAM API는 데이터에 대한 Win32 스트리밍 액세스를 위해 디자인되었습니다. 2MB가 넘는 FILESTREAM BLOB(Binary Large Object)을 읽거나 쓰는 데 Transact-SQL을 사용하지 마십시오. Transact-SQL에서 BLOB 데이터를 읽거나 써야 하는 경우에는 Win32에서 FILESTREAM BLOB을 열기 전에 먼저 모든 BLOB 데이터가 사용되었는지 확인합니다. 일부 Transact-SQL 데이터가 사용되지 않은 경우 후속 FILESTREAM 열기 또는 닫기 작업이 실패할 수 있습니다.

  • FILESTREAM BLOB에 데이터를 업데이트하거나 추가하는 Transact-SQL 문을 사용하지 마십시오. 이러한 문을 사용하면 BLOB 데이터가 tempdb 데이터베이스에 스풀링된 후 새 물리적 파일에 스풀링됩니다.

  • 소규모 BLOB 업데이트를 FILESTREAM BLOB에 추가하지 마십시오. 추가할 때마다 기본 FILESTREAM 파일이 복사됩니다. 응용 프로그램이 소규모 BLOB을 추가해야 하는 경우에는 BLOB을 varbinary(max) 열에 쓴 후 BLOB 개수가 미리 지정된 한도에 도달하면 FILESTREAM BLOB에 대한 단일 쓰기 작업을 수행합니다.

  • 응용 프로그램에서 다수의 BLOB 파일의 데이터 길이를 검색하지 마십시오. 데이터 크기는 SQL Server 데이터베이스 엔진에 저장되지 않으므로 이 작업에는 시간이 많이 소요됩니다. BLOB 파일의 길이를 확인해야 한다면 BLOB이 닫혀 있는 경우 Transact-SQL DATALENGTH() 함수를 사용하여 그 크기를 검토하십시오. DATALENGTH()는 BLOB 파일 크기를 확인하기 위해 파일을 열지 않습니다.

  • 응용 프로그램이 SMB1(메시지 블록 1) 프로토콜을 사용하는 경우 성능 최대화를 위해 FILESTREAM BLOB 데이터를 60KB의 배수로 읽어야 합니다.

참고 항목

개념