데이터 저장소 고려 사항

이 항목에서는 특히 테이블의 경우 CDP(지속적 데이터 보호)와 관련된 데이터 저장소 비용을 제어하기 위한 지침과 모범 사례를 제공합니다.

Time Travel 및 Fail-safe가 포함되는 CDP는 모든 Snowflake 계정에서 추가 비용 없이 사용할 수 있는 표준 기능 세트입니다. 그러나 계정에서 생성된 테이블, 스키마 및 데이터베이스에 저장된 모든 데이터에 대해 계정에 요금이 부과되기 때문에 CDP는 저장된 총 데이터 양과 데이터 저장 기간을 기준으로 저장소 비용에 영향을 미칩니다.

데이터가 활성, Time Travel 또는 Fail-safe 상태인지 여부에 관계없이 저장소의 데이터 사용이 계산되고 요금이 부과됩니다. 이러한 수명 주기 상태는 순차적이기 때문에 CDP에 의해 보호되는 업데이트/삭제된 데이터는 데이터가 Fail-safe 상태를 벗어날 때까지 저장소 비용이 계속 발생합니다.

참고

INSERT, COPY 또는 SNOWPIPE를 사용하여 데이터를 로드하면 TIME_TRAVEL_BYTES와 FAILSAFE_BYTES로 인한 요금이 발생합니다. 작은 마이크로 파티션 조각 모음은 작은 마이크로 파티션을 삭제하고 같은 데이터를 가진 새 마이크로 파티션을 생성하기 때문입니다. 삭제된 마이크로 파티션은 TIME_TRAVEL_BYTES 및 FAILSAFE_BYTES에 기여합니다.

이 항목의 내용:

데이터 저장소 모니터링하기

계정용 저장소(계정 관리자만 해당)

ACCOUNTADMIN 역할이 할당된 경우(즉, Snowflake 계정을 위한 최상위 관리자 역할을 수행) Snowsight 또는 Classic Console 를 사용하여 전체 계정의 데이터 저장소를 살펴볼 수 있습니다.

Snowsight:

Select Admin » Cost Management » Consumption.

Classic Console:

Account 계정 탭 » Billing & Usage » Average Storage Used 을 클릭합니다.

이 페이지에는 계정에 대한 총 평균 데이터 저장소와 모든 데이터베이스, 내부 및 명명된 스테이지, Fail-safe의 데이터에 대한 총계가 표시됩니다.

자세한 내용은 저장소 비용 살펴보기 섹션을 참조하십시오.

개별 테이블 저장소

적절한 권한이 있는 모든 사용자는 개별 테이블에 대한 데이터 저장소를 확인할 수 있습니다. Snowflake에서 제공하는 테이블 데이터 저장소 확인 방법은 다음과 같습니다.

Classic Console:

Databases 데이터베이스 탭 » <db_이름> » Tables 을 클릭합니다.

SQL:

SHOW TABLES 명령을 실행합니다.

또는

다음 중 하나를 쿼리합니다.

세 가지 방법 중에, TABLE_STORAGE_METRICS 은 CDP 수명 주기의 다음 세 가지 상태에서 테이블 데이터에 대한 물리적 저장소(바이트 단위) 분석이 포함되므로 가장 자세한 정보를 제공합니다.

  • 활성(ACTIVE_BYTES 열)

  • Time Travel(TIME_TRAVEL_BYTES 열)

  • Fail-safe(FAILSAFE_BYTES 열)

또한, 뷰는 테이블을 복제할 때 발생하는 소유 저장소와 참조 저장소를 구별하기 위한 열도 제공합니다(아래 섹션 참조).

스테이징된 파일 저장소(데이터 로딩용)

Snowflake는 데이터를 대량으로 테이블에 로드하는 기능을 지원하기 위해 로드할 데이터가 포함된 파일이 저장되는 스테이지를 활용합니다. Snowflake는 내부 스테이지와 외부 스테이지를 모두 지원합니다.

Snowflake 내부 스테이지에서 스테이징된 데이터 파일에는 Time Travel 및 Fail-safe와 관련된 추가 요금이 부과되지 않지만, 표준 데이터 저장소 요금은 부과됩니다. 따라서 Snowflake는 저장소 비용을 관리하는 데 도움이 되도록 이러한 파일을 모니터링하고 데이터가 로드되고 파일이 더 이상 필요하지 않으면 스테이지에서 제거할 것을 권장합니다. 데이터 로딩 중에(COPY INTO <테이블> 명령 사용) 또는 나중에(REMOVE 명령 사용) 이러한 파일을 제거하도록 선택할 수 있습니다.

자세한 내용은 데이터 로딩 고려 사항 섹션을 참조하십시오.

스테이징된 파일을 주기적으로 제거하면 데이터 로딩 성능 향상과 같은 추가적인 이점이 있을 수 있습니다.

테이블, 스키마 및 데이터베이스 복제하기

Snowflake의 복사가 수행되지 않는 복제 기능은 테이블, 스키마 또는 데이터베이스의 “스냅샷”을 신속하게 생성하고 초기에 기본 저장소를 공유하는 해당 오브젝트의 파생된 복사본을 생성하는 편리한 방법을 제공합니다. 이 기능은 추가 요금이 발생하지 않는 인스턴트 백업을 생성하는 데 매우 유용할 수 있습니다(복제된 오브젝트가 변경될 때까지).

그러나 복제를 수행하면 각 복제의 고유한 수명 주기로 인해 총 저장소 사용량 계산이 더 복잡해집니다. 즉, 원본 오브젝트 또는 복제본을 서로 독립적으로 변경할 수 있으며 이러한 변경 사항은 CDP를 통해 보호됩니다.

예를 들어, 복제본이 테이블에서 생성되면 복제본은 복제할 때 원본 테이블의 기존 마이크로 파티션을 모두 공유하기 때문에 데이터 저장소를 사용하지 않지만, 원본 테이블과 독립적으로 복제본에서 행을 추가, 삭제 또는 업데이트할 수 있습니다. 클론이 변경될 때마다 클론이 독점적으로 소유하고 CDP를 통해 보호되는 새로운 마이크로 파티션이 생성됩니다.

또한 생성할 수 있는 복제본의 수 또는 반복에 대한 제한 없이(예: 복제본의 복제본 생성 가능) 복제본을 복제할 수 있으며, 이를 통해 복제된 오브젝트의 n-레벨 계층이 생성되며, 각각은 공유 및 독립 데이터 저장소의 고유한 부분을 갖습니다.

테이블 IDs

모든 Snowflake 테이블에는 테이블을 고유하게 식별하는 ID가 있습니다. 또한, 모든 테이블은 CLONE_GROUP_ID와도 연결됩니다. 테이블에 복제본이 없으면 ID와 CLONE_GROUP_ID는 동일합니다. 이러한 IDs는 TABLE_STORAGE_METRICS 뷰에 표시됩니다.

소유 저장소 vs 참조 저장소

테이블이 복제되면 원래 테이블에 대해 새 ID 및 CLONE_GROUP_ID가 할당됩니다. 복제본이 생성되는 순간 두 테이블의 모든 마이크로 파티션이 완전히 공유됩니다. 이러한 마이크로 파티션과 연결된 저장소는 클론 그룹에서 가장 오래된 테이블이 소유하며, 복제본은 이러한 마이크로 파티션을 참조합니다.

복제본이 생성된 후 복제본 그룹 내의 두 테이블에는 별도의 수명 주기가 있으므로 각 테이블에서 DML 작업을 수행하면 해당 테이블이 소유하는 새 마이크로 파티션이 생성됩니다. 이러한 마이크로 파티션과 연결된 저장소는 TABLE_STORAGE_METRICS 뷰의 RETAINED_FOR_CLONE_BYTES 열을 사용하여 쿼리할 수 있습니다.

복제본 그룹 내의 모든 테이블에는 독립적인 수명 주기가 있기 때문에 이러한 테이블 내의 저장소 소유권을 복제본 그룹 내의 다른 테이블로 전송해야 하는 경우가 있습니다. 예를 들어, 다음으로 구성된 복제본 그룹을 생각해 보십시오.

원본 테이블:

복제 대상:

복제 대상:

T1

»

T2

»

T3

T2와 T3가 일부 마이크로 파티션을 공유하고 T2가 삭제된 경우 T2가 Fail-safe로 전환되기 전에 해당 저장소의 소유권을 이전해야 합니다. Snowflake에서 이러한 전송은 마이크로 파티션이 Time Travel 상태를 종료하고 그렇지 않으면 Fail-safe로 전환될 때 발생합니다. 위의 경우 T2가 이전에 소유했던 마이크로 파티션은 Time Travel 보존 기간이 만료되면 T3로 이전됩니다.

단기 유지 테이블 요금 관리하기

CDP는 데이터를 장기간 보호하도록 설계되었습니다. 이러한 데이터는 일반적으로 영구 테이블에 저장됩니다. 생성할 때 별도로 지정하는 경우를 제외하고 Snowflake의 테이블은 영구 테이블로 생성됩니다.

ETL 또는 데이터 모델링 프로세스 동안에는 단기 유지 테이블이 생성될 수 있습니다. 이러한 테이블의 경우에는 CDP의 저장소 요금이 부과되는 것이 적합하지 않습니다. Snowflake는 단기 유지 테이블을 지원하기 위한 다음의 두 가지 다른 방식을 제공합니다.

  • 임시 테이블

  • 일시적 테이블

임시 테이블

다른 SQL 데이터베이스와 유사하게, 임시 테이블은 단일 사용자 세션 내에서만 그리고 세션 기간 내에서만 유지됩니다. Snowflake 임시 테이블에는 Fail-safe가 없으며 Time Travel 보존 기간이 0 또는 1일에 불과하지만, Time Travel 기간은 테이블이 삭제될 때 종료됩니다.

그러므로 임시 테이블과 관련하여 부과되는 최대 총 CDP 요금은 1일(또는 세션이 종료되어 테이블이 삭제되거나 명시적으로 삭제된 경우에는 그 미만)입니다. 이 기간 동안에는 테이블에서 Time Travel을 수행할 수 있습니다.

중요

Snowflake 내에서 연결과 세션은 개념이 다릅니다. Snowflake에 로그인하면 1개 이상의 세션이 생성될 수 있습니다. Snowflake 세션은 사용자가 명시적으로 세션을 종료하거나 4시간 동안 활동이 없어 세션 시간이 초과된 경우에만 종료됩니다. Snowflake에서 연결을 해제해도 활성 세션은 종료되지 않습니다. 그러므로 Snowflake 세션은 매우 오랫동안 지속될 수 있으며 해당 세션 내에서 생성된 임시 테이블은 삭제되거나 세션이 종료될 때까지 계속 유지됩니다.

임시 테이블에 대한 예기치 않은 저장소 비용이 발생하는 것을 방지하기 위해 Snowflake는 세션 내에서 필요에 따라 생성하고 더 이상 필요하지 않을 때 삭제할 것을 권장합니다.

일시적 테이블

일시적 테이블은 Snowflake에 고유한 테이블입니다. 일시적 테이블은 영구 테이블과 임시 테이블의 속성을 모두 갖습니다.

  • 임시 테이블과 달리 일시적 테이블은 세션과 연결되지 않으며, 해당 테이블에 액세스할 수 있는 권한이 있는 모든 사용자가 볼 수 있습니다. 또한, 영구 테이블과 유사하게 테이블이 생성된 세션 이후에도 지속됩니다.

  • 임시 테이블와 마찬가지로 일시적 테이블에는 Fail-safe가 없으며 Time Travel 보존 기간이 0 또는 1일에 불과합니다.

따라서 일시적 테이블과 관련하여 부과되는 최대 총 CDP 요금은 1일입니다. 이 기간 동안에는 테이블에서 Time Travel을 수행할 수 있습니다.

변동이 많은 대규모 테이블 요금 관리하기

데이터 플랫폼에서 테이블은 일반적으로 정보 또는 차원 테이블이며 사용 패턴이 다르므로 저장소 고려 사항도 다릅니다.

  • 정보 테이블은 일반적으로 크기가 매우 크고 변동(행 업데이트 또는 삭제) 정도가 낮습니다. 정보 테이블에 대한 대부분의 변경 사항은 새 데이터를 삽입하거나 경우에 따라 이전 데이터를 삭제하는 것입니다. CDP은 매우 저렴한 저장 비용으로 완전한 데이터 보호를 제공하므로 정보 테이블에 매우 적합합니다.

  • 차원 테이블의 경우 업데이트 패턴이 다릅니다. 행 업데이트 및 삭제는 차원 테이블에서 훨씬 더 일반적으로 수행됩니다. 테이블에서 1개 이상의 행이 업데이트되거나 삭제되면 이 데이터를 저장하는 기본 마이크로 파티션이 CDP와 관련된 수명 주기 전환을 시작합니다. 변동성이 높은 차원 테이블의 경우 Time Travel 및 Fail-safe 데이터와 연결된 결과 저장소가 활성 테이블 저장소보다 훨씬 클 수 있습니다.

대부분의 차원 테이블에 대해 이러한 업데이트와 관련된 CDP 저장소 요금은 합리적입니다. 차원 테이블은 일반적으로 크기가 작고 자주 업데이트하는 경우에도 Snowflake의 저장소 요금이 저렴하며 CDP의 이점이 비용보다 훨씬 큽니다.

변동성이 높은 일부 대규모 차원 테이블의 경우 CDP와 관련된 저장소 요금이 상당할 수 있습니다. 테이블에서 여러 업데이트가 수행되면 영향을 받는 모든 마이크로 파티션이 다시 생성된 후 CDP 저장소 수명 주기를 통해 전환됩니다.

변동성이 큰 차원 테이블은 TABLE_STORAGE_METRICS 뷰에서 FAILSAFE_BYTES를 ACTIVE_BYTES로 나눈 비율을 계산하여 확인할 수 있습니다. 비율이 큰 테이블은 변동성이 높은 테이블로 간주됩니다. Snowflake의 저장소는 저렴하고 대부분의 변동성이 높은 테이블은 적당한 양의 총 저장소를 사용하기 때문에 비율이 높더라도 선호되는 옵션은 이러한 테이블을 영구적으로 만들고 CDP를 사용하여 데이터를 보호하는 것입니다.

경우에 따라 변동성이 높은 차원 테이블의 저장소 요금이 과도하므로 CDP에 대한 대체 옵션을 선호할 수 있습니다. 극단적인 예로, 테이블 내의 모든 마이크로 파티션과 연관된 행이 있는 테이블을 생각해 보십시오(200 GB의 물리적 저장소로 구성). 모든 행이 하루에 20회 업데이트되는 경우 테이블에서 사용되는 저장소의 크기는 다음과 같습니다.

활성:

200 GB

Time Travel:

4 TB

Fail-safe:

28 TB

총 저장소:

32.2 TB

CDP 요금이 과도하게 발생하는 변동성이 큰 차원 테이블의 경우, 해결 방법은 이러한 테이블을 Time Travel 보존 시간이 0인 일시적 테이블로 생성한 후(즉, DATA_RETENTION_TIME_IN_DAYS=0) 이러한 테이블을 주기적으로 영구 테이블에 복사하는 것입니다. 이를 통해 이러한 테이블의 전체 백업이 효과적으로 생성됩니다. 각 백업은 CDP로 보호되기 때문에 새 백업이 생성되면 기존 백업을 삭제할 수 있습니다.

위의 예를 사용하면 하루에 한 번 백업되는 동일한 200 GB 크기의 변동성이 높은 차원 테이블과 관련된 저장소 비용은 다음과 같습니다.

활성:

200 GB

Time Travel:

200 GB

Fail-safe:

1.4 TB

백업:

200 GB

총 저장소:

2 TB

데이터 손실 시 전체 복구를 보장하기 위해 필요한 만큼 자주 백업을 수행해야 합니다. 이러한 테이블의 경우 Snowflake는 하루에 한 번 이상 백업을 수행할 것을 권장합니다.