해석된 Transact-SQL을 사용하여 메모리 액세스에 최적화된 테이블에 액세스
적용 대상: SQL Server Azure SQL Database Azure Synapse Analytics PDW(Analytics Platform System)
몇 가지 예외를 제외하고 모든 Transact-SQL 쿼리 또는 DML 작업(선택, 삽입, 업데이트 또는 삭제), 임시 배치 및 저장 프로시저, 테이블 값 함수, 트리거 및 보기와 같은 SQL 모듈을 사용하여 메모리에 최적화된 테이블에 액세스할 수 있습니다.
해석된 Transact-SQL은 고유하게 컴파일된 저장 프로시저가 아닌 Transact-SQL 일괄 처리 또는 저장 프로시저를 나타냅니다. 메모리 최적화 테이블에 대한 해석된 Transact-SQL 액세스를 interop 액세스라고 합니다.
SQL Server 2016(13.x)부터 해석된 Transact-SQL의 쿼리는 직렬 모드가 아닌 메모리 최적화 테이블을 병렬로 검색할 수 있습니다.
기본적으로 컴파일된 저장 프로시저를 사용하여 메모리에 최적화된 테이블에 액세스할 수도 있습니다. 성능에 중요한 OLTP 작업에는 고유하게 컴파일된 저장 프로시저를 사용하는 것이 좋습니다.
해석된 Transact-SQL 액세스는 다음 시나리오에 권장됩니다.
임시 쿼리 및 관리 태스크
일반적으로 고유하게 컴파일된 저장 프로시저에서 사용할 수 없는 구문을 사용하는 보고 쿼리(예: 창 함수, OVER 함수라고도 함).
애플리케이션 코드 변경을 최소화(또는 아니요)하여 애플리케이션의 성능에 중요한 부분을 메모리 최적화 테이블로 마이그레이션합니다. 테이블 마이그레이션에서 성능이 향상될 수 있습니다. 그런 다음 저장 프로시저를 고유하게 컴파일된 저장 프로시저로 마이그레이션하는 경우 추가 성능이 향상될 수 있습니다.
고유하게 컴파일된 저장 프로시저에 Transact-SQL 문을 사용할 수 없는 경우
그러나 메모리에 최적화된 테이블의 데이터에 액세스하는 해석된 Transact-SQL 저장 프로시저에서는 다음과 같은 Transact-SQL 구성이 지원되지 않습니다.
영역 | 지원되지 않음 |
---|---|
테이블에 대한 액세스 | TRUNCATE TABLE MERGE(메모리 최적화 테이블을 대상으로 함) 동적 및 키 집합 커서(자동으로 정적 커서로 강등됨) 컨텍스트 연결을 사용하여 CLR 모듈에서 액세스합니다. 인덱싱된 뷰에서 메모리 최적화 테이블 참조 |
데이터베이스 간 | 데이터베이스 간 쿼리 데이터베이스 간 트랜잭션 연결된 서버 |
테이블 힌트
표 힌트에 대한 자세한 내용은 다음을 참조하세요. 테이블 힌트 (Transact-SQL) 메모리 내 OLTP를 지원하기 위해 SNAPSHOT이 추가되었습니다.
다음 테이블 힌트는 해석된 Transact-SQL을 사용하여 메모리 최적화 테이블에 액세스하는 경우 지원되지 않습니다.
HOLDLOCK
PAGLOCK
READUNCOMMITTED
TABLOCKXX
IGNORE_CONSTRAINTS
READCOMMITTED
ROWLOCK
UPDLOCK
IGNORE_TRIGGERS
READCOMMITTEDLOCK
SPATIAL_WINDOW_MAX_CELLS = integer
XLOCK
NOWAIT
READPAST
TABLOCK
해석된 Transact-SQL을 사용하여 명시적 또는 암시적 트랜잭션에서 메모리 최적화 테이블에 액세스하는 경우 적어도 다음 중 하나를 수행해야 합니다.
SNAPSHOT, REPEATABLEREAD 또는 SERIALIZABLE과 같은 격리 수준 테이블 힌트를 지정합니다.
MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT 데이터베이스 옵션을 ON으로 설정합니다.
자동 커밋 모드에서 실행되는 쿼리에서 액세스하는 메모리 최적화 테이블에는 격리 수준 테이블 힌트가 필요하지 않습니다.