Always On 가용성 그룹 활성 보조 기능에는 하나 이상의 보조 복제본(읽기 가능한 보조 복제본)에 대한 읽기 전용 액세스에 대한 지원이 포함됩니다. 읽기 가능한 보조 복제본은 모든 보조 데이터베이스에 대한 읽기 전용 액세스를 허용합니다. 그러나 읽기 가능한 보조 데이터베이스는 읽기 전용으로 설정되지 않습니다. 동적입니다. 해당 주 데이터베이스의 변경 내용이 보조 데이터베이스에 적용되면 지정된 보조 데이터베이스가 변경됩니다. 일반적인 보조 복제본의 경우 보조 데이터베이스의 지속성 메모리 최적화 테이블을 포함한 데이터는 거의 실시간으로 수행됩니다. 또한 전체 텍스트 인덱스는 보조 데이터베이스와 동기화됩니다. 대부분의 경우 주 데이터베이스와 해당 보조 데이터베이스 간의 데이터 대기 시간은 몇 초밖에 안 됩니다.
주 데이터베이스에서 발생하는 보안 설정은 보조 데이터베이스에 유지됩니다. 여기에는 주 데이터베이스에서 사용하도록 설정된 경우 사용자, 데이터베이스 역할 및 애플리케이션 역할이 해당 권한 및 TDE(투명한 데이터 암호화)와 함께 포함됩니다.
비고
보조 데이터베이스에 데이터를 쓸 수는 없지만 사용자 데이터베이스 및 tempdb와 같은 시스템 데이터베이스를 포함하여 보조 복제본을 호스트하는 서버 인스턴스의 읽기-쓰기 데이터베이스에 쓸 수 있습니다.
Always On 가용성 그룹은 읽기 가능한 보조 복제본(읽기 전용 라우팅)에 대한 읽기 의도 연결 요청의 다시 라우팅도 지원합니다. 읽기 전용 라우팅에 대한 자세한 내용은 수신기를 사용하여 Read-Only 보조 복제본에 연결(Read-Only 라우팅)을 참조하세요.
혜택
읽기 전용 연결을 읽기 가능한 보조 복제본으로 보내면 다음과 같은 이점이 제공됩니다.
주 복제본에서 보조 읽기 전용 워크로드를 오프로드하여 중요 업무용 워크로드에 대한 리소스를 절약합니다. 중요 업무용 읽기 워크로드 또는 대기 시간을 허용할 수 없는 워크로드가 있는 경우 기본 워크로드에서 실행해야 합니다.
읽을 수 있는 보조 복제본을 호스트하는 시스템에 대한 투자 수익률을 향상시킵니다.
또한 읽기 가능한 보조 복제본은 다음과 같이 읽기 전용 작업을 강력하게 지원합니다.
읽을 수 있는 보조 데이터베이스에 대한 자동 임시 통계는 디스크 기반 테이블에서 읽기 전용 쿼리를 최적화합니다. 메모리 최적화 테이블의 경우 누락된 통계가 자동으로 생성됩니다. 그러나 부실 통계의 자동 업데이트는 없습니다. 주 복제본에 대한 통계를 수동으로 업데이트해야 합니다. 자세한 내용은 이 항목의 뒷 부분에 있는 Read-Only Access Database에 대한 통계를 참조하세요.
디스크 기반 테이블에 대한 읽기 전용 워크로드는 행 버전 관리를 사용하여 보조 데이터베이스에서 차단 경합을 제거합니다. 보조 데이터베이스에 대해 실행되는 모든 쿼리는 다른 트랜잭션 격리 수준이 명시적으로 설정된 경우에도 스냅샷 격리 트랜잭션 수준에 자동으로 매핑됩니다. 또한 모든 잠금 힌트는 무시됩니다. 이렇게 하면 읽기/쓰기 경합이 제거됩니다.
메모리 최적화 지속성 테이블에 대한 읽기 전용 워크로드는 동일한 트랜잭션 격리 수준 제한 사항이 있는 기본 저장 프로시저 또는 SQL 상호 운용성을 사용하여 주 데이터베이스에서 액세스하는 것과 똑같은 방식으로 데이터에 액세스합니다. 주 복제본에서 실행되는 보고 워크로드 또는 읽기 전용 쿼리는 변경하지 않고 보조 복제본에서 실행할 수 있습니다. 마찬가지로 보조 복제본에서 실행되는 보고 워크로드 또는 읽기 전용 쿼리는 변경하지 않고 주 복제본에서 실행할 수 있습니다. 디스크 기반 테이블과 마찬가지로 보조 데이터베이스에 대해 실행되는 모든 쿼리는 다른 트랜잭션 격리 수준이 명시적으로 설정된 경우에도 스냅샷 격리 트랜잭션 수준에 자동으로 매핑됩니다.
DML 작업은 보조 복제본의 디스크 기반 및 메모리 최적화 테이블 형식 모두에 대해 테이블 변수에서 허용됩니다.
가용성 그룹에 대한 필수 구성 요소
읽을 수 있는 보조 복제본(필수)
데이터베이스 관리자는 보조 역할로 실행할 때 모든 연결(읽기 전용 액세스용) 또는 읽기 전용 연결만 허용하도록 하나 이상의 복제본을 구성해야 합니다.
비고
필요에 따라 데이터베이스 관리자는 주 역할에서 실행할 때 읽기 전용 연결을 제외하도록 가용성 복제본을 구성할 수 있습니다.
자세한 내용은 가용성 복제본에 대한 클라이언트 연결 액세스 정보(SQL Server)를 참조하세요.
가용성 그룹 수신기
읽기 전용 라우팅을 지원하려면 가용성 그룹에 가용성 그룹 수신기가 있어야 합니다. 읽기 전용 클라이언트는 연결 요청을 이 수신기로 전달해야 하며 클라이언트의 연결 문자열은 애플리케이션 의도를 "읽기 전용"으로 지정해야 합니다. 즉, 읽기 의도 연결 요청이어야 합니다.
읽기 전용 라우팅
읽기 전용 라우팅 은 가용성 그룹 수신기로 전달되는 들어오는 읽기 의도 연결 요청을 사용 가능한 읽기 가능한 보조 복제본으로 라우팅하는 SQL Server의 기능을 나타냅니다. 읽기 전용 라우팅의 필수 구성 요소는 다음과 같습니다.
읽기 전용 라우팅을 지원하려면 읽기 가능한 보조 복제본에 읽기 전용 라우팅 URL이 필요합니다. 이 URL은 로컬 복제본이 보조 역할로 실행되는 경우에만 적용됩니다. 필요에 따라 읽기 전용 라우팅 URL을 복제본별로 지정해야 합니다. 각 읽기 전용 라우팅 URL은 읽기 전용 연결 요청을 읽기 가능한 특정 보조 복제본으로 라우팅하는 데 사용됩니다. 일반적으로 읽기 가능한 모든 보조 복제본에는 읽기 전용 라우팅 URL이 할당됩니다.
주 복제본인 경우 읽기 전용 라우팅을 지원하는 각 가용성 복제본에는 읽기 전용 라우팅 목록이 필요합니다. 지정된 읽기 전용 라우팅 목록은 로컬 복제본이 주 역할로 실행되는 경우에만 적용됩니다. 이 목록은 필요에 따라 복제본별로 지정해야 합니다. 일반적으로 각 읽기 전용 라우팅 목록에는 목록 끝에 로컬 복제본의 URL과 함께 모든 읽기 전용 라우팅 URL이 포함됩니다.
비고
읽기 의도 연결 요청은 현재 주 복제본의 읽기 전용 라우팅 목록에서 사용 가능한 첫 번째 읽기 가능한 보조 복제본으로 라우팅됩니다. 부하 분산이 없습니다.
자세한 내용은 가용성 그룹에 대한 Read-Only 라우팅 구성(SQL Server)을 참조하세요.
비고
가용성 그룹 수신기 및 읽기 전용 라우팅에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(failover)(SQL Server)를 참조하세요.
한계 및 제한사항
일부 작업은 다음과 같이 완전히 지원되지 않습니다.
읽기 가능한 복제본을 읽을 수 있게 되면 보조 데이터베이스에 대한 연결 허용을 시작할 수 있습니다. 그러나 주 데이터베이스에 활성 트랜잭션이 있는 경우 해당 보조 데이터베이스에서 행 버전을 완전히 사용할 수 없습니다. 보조 복제본이 구성되었을 때 주 복제본에 존재했던 모든 활성 트랜잭션은 커밋하거나 롤백해야 합니다. 이 프로세스가 완료될 때까지 보조 데이터베이스의 트랜잭션 격리 수준 매핑이 완료되지 않으며 쿼리가 일시적으로 차단됩니다.
경고
장기 트랜잭션을 실행하면 디스크 기반 테이블과 메모리 최적화 테이블 모두에 대해 유지되는 버전이 지정된 행의 수에 영향을 줍니다.
보조 데이터베이스에 메모리 최적화 테이블이 있는 경우, 메모리 최적화 테이블에 대해 행 버전이 항상 생성되더라도, 보조 복제본이 읽기 전용으로 설정될 때 주 복제본에서 존재하던 모든 활성 트랜잭션이 완료될 때까지 쿼리가 차단됩니다. 이렇게 하면 보고 워크로드와 읽기 전용 쿼리에서 디스크 기반 테이블과 메모리 최적화 테이블을 동시에 사용할 수 있습니다.
변경 내용 추적 및 변경 데이터 캡처는 읽을 수 있는 보조 복제본에 속하는 보조 데이터베이스에서 지원되지 않습니다.
변경 내용 추적은 보조 데이터베이스에서 명시적으로 사용하지 않도록 설정됩니다.
보조 데이터베이스에서 변경 데이터 캡처를 사용할 수 있지만 지원되지 않습니다.
읽기 작업은 스냅샷 격리 트랜잭션 수준에 매핑되므로 주 복제본의 고스트 레코드 정리는 하나 이상의 보조 복제본에 대한 트랜잭션에 의해 차단될 수 있습니다. 고스트 레코드 정리 작업은 보조 복제본에서 더 이상 필요하지 않은 경우 주 복제본의 디스크 기반 테이블에 대한 고스트 레코드를 자동으로 정리합니다. 이는 주 복제본에서 트랜잭션을 실행할 때 수행되는 작업과 유사합니다. 보조 데이터베이스가 극한의 상황에 이른 경우, 고스트 정리를 방해하는 장시간 실행 중인 읽기 쿼리를 종료해야 합니다. 보조 복제본의 연결이 끊어지거나 보조 데이터베이스에서 데이터 이동이 일시 중단되는 경우 고스트 정리를 차단할 수 있습니다. 또한 이 상태는 로그 잘림을 방지하므로 이 상태가 지속되는 경우 가용성 그룹에서 이 보조 데이터베이스를 제거하는 것이 좋습니다. 행 버전이 메모리에 유지되고 주 복제본의 행 버전과 독립적이므로 메모리 최적화 테이블에는 고스트 레코드 정리 문제가 없습니다.
디스크 기반 테이블이 포함된 파일에 대한 DBCC SHRINKFILE 작업은 보조 복제본에 여전히 필요한 고스트 레코드가 파일에 포함된 경우 주 복제본에서 실패할 수 있습니다.
SQL Server 2014부터 읽기 가능한 보조 복제본은 사용자 작업 또는 오류로 인해 주 복제본이 오프라인 상태인 경우에도 온라인 상태를 유지할 수 있습니다. 그러나 가용성 그룹 수신기도 오프라인이므로 이 상황에서는 읽기 전용 라우팅이 작동하지 않습니다. 클라이언트는 읽기 전용 워크로드를 위해 읽기 전용 보조 복제본에 직접 연결해야 합니다.
비고
읽을 수 있는 보조 복제본을 호스팅하는 서버 인스턴스에서 sys.dm_db_index_physical_stats 동적 관리 뷰를 쿼리하는 경우 REDO 차단 문제가 발생할 수 있습니다. 이 동적 관리 뷰는 지정된 사용자 테이블 또는 뷰에서 해당 사용자 테이블 또는 뷰의 X 잠금에 대한 REDO 스레드의 요청을 차단할 수 있는 IS 잠금을 획득하기 때문입니다.
성능 고려 사항
이 섹션에서는 읽을 수 있는 보조 데이터베이스에 대한 몇 가지 성능 고려 사항에 대해 설명합니다.
데이터 대기 시간
읽기 전용 워크로드에서 일부 데이터 대기 시간을 허용할 수 있는 경우 보조 복제본(replica) 대한 읽기 전용 액세스를 구현하는 것이 좋습니다. 데이터 대기 시간이 허용 가능하지 않은 경우에는 주 복제본에 대해 읽기 전용 작업을 실행하는 것이 좋습니다.
주 복제본(replica)은 주 데이터베이스의 변경 내용에 대한 로그 레코드를를 보조 복제본(replica)으로 전송합니다. 각 보조 데이터베이스에서 전용 다시 실행 스레드가 이 로그 레코드를 적용합니다. 읽기 액세스 보조 데이터베이스에서는 변경 내용이 포함된 로그 레코드가 보조 데이터베이스에 적용되고 트랜잭션이 주 데이터베이스에서 커밋될 때까지 지정된 데이터 변경 내용이 쿼리 결과에 나타나지 않습니다.
즉, 주 복제본과 보조 복제본 사이에 약간의 대기 시간(일반적으로 몇 초만)이 있습니다. 하지만 네트워크 문제로 인해 처리량이 줄어드는 경우와 같은 특수한 경우에는 대기 시간이 중요할 수 있습니다. I/O 병목 현상이 발생하고 데이터 이동이 일시 중단될 때 대기 시간이 증가합니다. 일시 중단된 데이터 이동을 모니터링하려면 AlwaysOn 대시보드 또는 sys.dm_hadr_database_replica_states 동적 관리 뷰를 사용할 수 있습니다.
메모리 최적화 테이블이 있는 데이터베이스의 데이터 대기 시간
읽기 워크로드를 위해 보조 복제본의 메모리 최적화 테이블에 액세스할 때, safe-timestamp는 해당 타임스탬프보다 이전에 커밋된 트랜잭션의 행을 반환하는 데 사용됩니다. 주 복제본의 행을 가비지 수집하기 위해 가비지 수집 스레드에서 사용되는 가장 오래된 타임스탬프 힌트가 바로 safe-timestamp입니다. 이 타임스탬프는 메모리 최적화 테이블의 DML 트랜잭션 수가 마지막 업데이트 이후 내부 임계값을 초과하는 경우 업데이트됩니다. 주 복제본에서 가장 오래된 트랜잭션 타임스탬프가 업데이트될 때마다 지속성 메모리 최적화 테이블의 다음 DML 트랜잭션은 이 타임스탬프를 특수 로그 레코드의 일부로 보조 복제본으로 보내도록 보냅니다. 보조 복제본의 REDO 스레드는 이 로그 레코드 처리의 일부로 safe-timestamp를 업데이트합니다.
대기 시간에 대한 안전 타임스탬프의 영향
트랜잭션 처리량이 높은 OLTP 워크로드의 경우 대기 시간은 디스크 기반 테이블과 비교되어야 합니다. 우리는 이것이 일반적인 경우일 것으로 예상합니다.
장기 실행 트랜잭션은 안전 타임스탬프가 불규칙적으로 지연될 수 있습니다. 스냅샷 격리의 타임스탬프가 가장 오래된 트랜잭션의 커밋에 의해 결정되므로 디스크 기반 테이블에 액세스할 때도 이와 다르지 않습니다.
마지막 안전 타임스탬프 업데이트 이후 주 복제본의 트랜잭션에 의해 변경된 내용은 safe-timestamp의 다음 전송 및 업데이트까지 보조 복제본에 표시되지 않습니다. 안전 타임스탬프 업데이트에 대한 내부 임계값을 초과하기 전에 주 복제본의 트랜잭션 작업이 중지되는 경우 안전 타임스탬프에 대한 마지막 업데이트 이후 변경된 내용은 보조 복제본에 표시되지 않습니다. 이 문제를 완화하려면 주 복제본의 더미 지속성 메모리 최적화 테이블에서 몇 가지 DML 트랜잭션을 실행해야 할 수 있습니다. 비록 권장되지 않는 방법으로는 수동 검사점을 실행하여 안전한 타임스탬프를 강제로 전송할 수 있습니다.
메모리 최적화 테이블의 데이터 대기 시간 모니터링 및 문제 해결
주 복제본에서 다음 쿼리를 실행하여 안전 타임스탬프를 찾을 수 있습니다.
SELECT MAX(base_generation)
AS max_base_generation
FROM sys.dm_db_xtp_gc_cycle_stats
GO
활성 읽기 워크로드와 동시에 다음 쿼리를 실행하여 보조 복제본에서 사용되는 안전 타임스탬프를 식별할 수도 있습니다.
SELECT begin_tsn
FROM sys.dm_db_xtp_transactions
GO
Read-Only 워크로드 영향
읽기 전용 액세스를 위해 보조 복제본을 구성하는 경우 보조 데이터베이스의 읽기 전용 워크로드는 특히 디스크 기반 테이블의 읽기 전용 워크로드가 I/O를 많이 사용하는 경우 다시 실행 스레드의 CPU 및 I/O(디스크 기반 테이블용)와 같은 시스템 리소스를 사용합니다. 메모리 최적화 테이블에 액세스할 때는 모든 행이 메모리에 있기 때문에 IO에 영향을 주지 않습니다.
또한 보조 복제본의 읽기 전용 워크로드는 로그 레코드를 통해 적용되는 DDL(데이터 정의 언어) 변경을 차단할 수 있습니다.
행 버전 관리로 인해 읽기 작업이 공유 잠금을 사용하지 않더라도 이러한 작업은 스키마 안정성(Sch-S) 잠금을 사용하므로 DDL 변경 내용을 적용하는 다시 실행 작업을 차단할 수 있습니다. DDL 작업에는 ALTER/DROP 테이블과 뷰가 포함되지만 저장 프로시저의 DROP 또는 ALTER는 포함되지 않습니다. 예를 들어, 주 데이터베이스에서 디스크 기반 또는 메모리 최적화 테이블을 삭제하는 경우입니다. REDO 스레드가 로그 레코드를 처리하여 테이블을 삭제하는 경우 테이블에 대한 SCH_M 잠금을 획득해야 하며 실행 중인 쿼리 액세스 테이블에 의해 차단될 수 있습니다. 이는 테이블 삭제가 REDO 스레드가 아닌 사용자 세션의 일부로 수행된다는 점을 제외하고 주 복제본에서 동일한 동작입니다.
추가 차단이 있는 Memory-Optimized 테이블이 있습니다. 네이티브 저장 프로시저를 삭제하면 보조 복제본에서 네이티브 저장 프로시저를 동시에 실행하는 경우 REDO 스레드가 차단될 수 있습니다. 이는 저장 프로시저 삭제가 REDO 스레드가 아닌 사용자 세션의 일부로 수행된다는 점을 제외하고 주 복제본에서 동일한 동작입니다.
쿼리 작성에 대한 모범 사례를 알고 보조 데이터베이스에서 모범 사례를 실행합니다. 예를 들어 활동이 적은 시간 동안 데이터 집계와 같은 장기 실행 쿼리를 예약합니다.
비고
보조 복제본의 쿼리로 인해 재실행 스레드가 차단되면 sqlserver.lock_redo_blocked XEvent가 발생합니다.
인덱싱
읽기 가능한 보조 복제본에서 읽기 전용 워크로드를 최적화하려면 보조 데이터베이스의 테이블에 인덱스를 만들 수 있습니다. 보조 데이터베이스에서 스키마 또는 데이터를 변경할 수 없으므로 주 데이터베이스에 인덱스를 만들고 변경 내용이 다시 실행 프로세스를 통해 보조 데이터베이스로 전송되도록 허용합니다.
보조 복제본에서 인덱스 사용량을 모니터링하려면 sys.dm_db_index_usage_stats 동적 관리 뷰의 user_seeks, user_scans 및 user_lookups 열을 쿼리합니다.
Read-Only Access 데이터베이스에 대한 통계
테이블 및 인덱싱된 뷰 열에 대한 통계는 쿼리 계획을 최적화하는 데 사용됩니다. 가용성 그룹의 경우 주 데이터베이스에서 생성되고 유지 관리되는 통계는 트랜잭션 로그 레코드 적용의 일부로 보조 데이터베이스에 자동으로 유지됩니다. 그러나 보조 데이터베이스의 읽기 전용 워크로드에는 주 데이터베이스에서 만든 통계와 다른 통계가 필요할 수 있습니다. 그러나 보조 데이터베이스는 읽기 전용 액세스로 제한되므로 보조 데이터베이스에서 통계를 만들 수 없습니다.
이 문제를 해결하기 위해 보조 복제본은 tempdb에서 보조 데이터베이스에 대한 임시 통계를 만들고 유지 관리합니다. _readonly_database_statistic 접미사는 임시 통계의 이름에 추가되어 주 데이터베이스에서 유지되는 영구 통계와 구분됩니다.
SQL Server에서만 임시 통계를 만들고 업데이트할 수 있습니다. 그러나 영구 통계에 사용하는 것과 동일한 도구를 사용하여 임시 통계를 삭제하고 해당 속성을 모니터링할 수 있습니다.
DROP STATISTICSTransact-SQL 문을 사용하여 임시 통계를 삭제합니다.
sys.stats 및 sys.stats_columns 카탈로그 뷰를 사용하여 통계를 모니터링합니다. sys_stats 영구적 통계와 임시 통계를 나타내는 is_temporary 열이 포함되어 있습니다.
주 복제본 또는 보조 복제본의 메모리 최적화 테이블에 대한 자동 통계 업데이트는 지원되지 않습니다. 보조 복제본에서 쿼리 성능 및 계획을 모니터링하고 필요한 경우 주 복제본에 대한 통계를 수동으로 업데이트해야 합니다. 그러나 누락된 통계는 주 복제본과 보조 복제본 모두에서 자동으로 생성됩니다.
SQL Server 통계에 대한 자세한 내용은 통계를 참조 하세요.
보조 데이터베이스의 오래된 영구 통계
SQL Server는 보조 데이터베이스에 대한 영구 통계가 부실한 경우를 검색합니다. 그러나 주 데이터베이스의 변경 내용을 제외하고는 영구 통계를 변경할 수 없습니다. 쿼리 최적화를 위해 SQL Server는 보조 데이터베이스에서 디스크 기반 테이블에 대한 임시 통계를 만들고 부실 영구 통계 대신 이러한 통계를 사용합니다.
주 데이터베이스에서 영구 통계가 업데이트되면 보조 데이터베이스에 자동으로 유지됩니다. 그런 다음 SQL Server는 임시 통계보다 최신인 업데이트된 영구 통계를 사용합니다.
가용성 그룹이 장애 조치될 때 모든 보조 복제본에서 임시 통계가 삭제됩니다.
한계 및 제한사항
임시 통계는 tempdb에 저장되므로 SQL Server 서비스를 다시 시작하면 모든 임시 통계가 사라집니다.
접미사 _readonly_database_statistic SQL Server에서 생성한 통계용으로 예약되어 있습니다. 주 데이터베이스에서 통계를 만들 때는 이 접미사를 사용할 수 없습니다. 자세한 내용은 통계를 참조하세요.
보조 복제본에서 메모리 최적화 테이블에 액세스
보조 복제본의 읽기 워크로드 격리 수준은 주 복제본에서만 허용됩니다. 보조 복제본에서 격리 수준의 매핑은 수행되지 않습니다. 이렇게 하면 주 복제본에서 실행할 수 있는 모든 보고 워크로드가 변경 없이 보조 복제본에서 실행될 수 있습니다. 이렇게 하면 보조 복제본을 사용할 수 없는 경우 보고 워크로드를 주 복제본에서 보조 복제본으로 쉽게 마이그레이션하거나 그 반대로 마이그레이션할 수 있습니다.
다음 쿼리는 주 복제본에서 실패하는 방식과 유사하게 보조 복제본에서 실행되지 않습니다.
메모리 최적화 테이블에서만 실행되는 쿼리의 경우 지원되는 격리 수준은 스냅샷, 반복 가능한 읽기 및 직렬화 가능입니다. 커밋되지 않은 읽기 또는 커밋된 격리 수준이 있는 쿼리는 데이터베이스 수준에서 MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 옵션을 사용하도록 설정하지 않은 한 오류를 반환합니다.
SET TRANSACTION ISOLATION LEVEL READ_COMMITTED -- This is not allowed BEGIN TRAN SELECT * FROM t_hk COMMIT오류 메시지:
Msg 41368, Level 16, State 0, Line 2 Accessing memory optimized tables using the CREAD_COMMITTED isolation level is supported only for autocommit transactions. It is not supported for explicit or implicit transactions. Provide a supported isolation level for the memory optimized table using a table hing, such as WITH (SNAPSHOT).메모리 최적화 테이블에서는 잠금 힌트가 지원되지 않습니다. 예를 들어 다음 쿼리는 모두 오류와 함께 실패합니다. NOLOCK 힌트만 허용되며 메모리 최적화 테이블과 함께 사용할 경우 NOOP입니다.
SELECT * FROM t_hk WITH (PAGLOCK) SELECT * FROM t_hk WITH (READPAST) SELECT * FROM t_hk WITH (ROWLOCK) SELECT * FROM t_hk WITH (READPAST) SELECT * FROM t_hk WITH (TABLOCK) SELECT * FROM t_hk WITH (XLOCK) SELECT * FROM t_hk WITH (UPDLOCK)컨테이너 간 트랜잭션을 처리할 때, 세션 격리 수준이 "스냅샷"인 경우 메모리 최적화 테이블에 대한 트랜잭션은 지원되지 않습니다. 예를 들면 다음과 같습니다.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT -- This is not allowed BEGIN TRAN SELECT * FROM t_hk COMMIT오류 메시지:
Msg 41332, Level 16, State 0, Line 5 Memory optimized tables and natively compiled stored procedures cannot be accessed or created when the session TRANSACTION ISOLATION LEVEL is set to SNAPSHOT.
용량 계획 고려 사항
디스크 기반 테이블의 경우 읽기 가능한 보조 복제본에는 다음 두 가지 이유로 tempdb 의 공간이 필요할 수 있습니다.
스냅샷 격리 수준은 행 버전을 tempdb에 복사합니다.
보조 데이터베이스에 대한 임시 통계는 tempdb에서 만들어지고 유지 관리됩니다. 임시 통계로 인해 tempdb의 크기가 약간 증가할 수 있습니다. 자세한 내용은 이 섹션의 뒷부분에 있는 Read-Only Access Database에 대한 통계를 참조하세요.
하나 이상의 보조 복제본에 대한 읽기 액세스를 구성하는 경우 주 데이터베이스는 삭제, 수정 또는 삽입된 데이터 행에 14바이트의 오버헤드를 추가하여 디스크 기반 테이블의 보조 데이터베이스에 행 버전에 대한 포인터를 저장합니다. 이 14비트 오버헤드는 보조 데이터베이스로 이월됩니다. 14 바이트 오버헤드가 데이터 행에 추가되면 페이지 분할이 발생할 수 있습니다.
행 버전 데이터는 주 데이터베이스에서 생성되지 않습니다. 대신 보조 데이터베이스는 행 버전을 생성합니다. 그러나 행 버전 관리 기능은 주 데이터베이스와 보조 데이터베이스 모두에서 데이터 스토리지를 증가합니다.
행 버전 데이터의 추가는 주 데이터베이스의 스냅샷 격리 또는 RCSI(읽기 커밋된 스냅샷 격리) 수준 설정에 따라 달라집니다. 아래 표에서는 디스크 기반 테이블에 대한 다양한 설정에서 읽을 수 있는 보조 데이터베이스의 버전 관리 동작에 대해 설명합니다.
읽을 수 있는 보조 복제본이 있나요? 스냅샷 격리 또는 RCSI 수준을 사용하도록 설정되었나요? 주 데이터베이스 보조 데이터베이스 아니오 아니오 행 버전 또는 14비트 오버헤드 없음 행 버전 또는 14비트 오버헤드 없음 아니오 예 행 버전 및 14 바이트 오버헤드 행 버전은 없지만 "14 바이트 오버헤드"가 있습니다. 예 아니오 행 버전이 없지만 14 바이트 오버헤드 행 버전 및 14 바이트 오버헤드 예 예 행 버전 및 14 바이트 오버헤드 행 버전 및 14바이트 오버헤드
관련 작업
가용성 복제본 속성 보기(SQL Server)
관련 내용
또한 참조하십시오
AlwaysOn 가용성 그룹 개요(SQL Server)
가용성 복제본에 대한 클라이언트 연결 액세스 정보(SQL Server)
가용성 그룹 리스너, 클라이언트 연결, 및 애플리케이션 페일오버 (SQL Server)
통계