해석된 Transact-SQL을 사용하여 메모리 액세스에 최적화된 테이블에 액세스Accessing Memory-Optimized Tables Using Interpreted Transact-SQL

이 항목은 다음에 적용됩니다.예SQL Server(2014부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2014)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

단지 몇 가지 예외를 제외하고 Transact-SQLTransact-SQL 쿼리 또는 DML 작업(SELECT, INSERT, UPDATE 또는 DELETE), 임시 일괄 처리, 테이블 반환 함수, 트리거, 뷰 및 저장 프로시저와 같은 SQL 모듈을 사용하여 메모리 액세스에 최적화된 테이블에 액세스할 수 있습니다.With only a few exceptions, you can access memory-optimized tables using any Transact-SQLTransact-SQL query or DML operation (select, insert, update, or delete), ad hoc batches, and SQL modules such as stored procedures, table-value functions, triggers, and views.

해석된 Transact-SQLTransact-SQLTransact-SQLTransact-SQL 일괄 처리 또는 고유하게 컴파일된 저장 프로시저가 아닌 저장 프로시저를 의미합니다.Interpreted Transact-SQLTransact-SQL refers to Transact-SQLTransact-SQL batches or stored procedures other than a natively compiled stored procedure. 메모리 액세스에 최적화된 테이블에 대한 해석된 Transact-SQLTransact-SQL 액세스를 interop 액세스라고 합니다.Interpreted Transact-SQLTransact-SQL access to memory-optimized tables is referred to as interop access.

SQL Server 2016SQL Server 2016부터 해석된 Transact-SQLTransact-SQL 쿼리는 메모리 액세스에 최적화된 테이블을 직렬 모드 대신 병렬로 스캔할 수 있습니다.Starting with SQL Server 2016SQL Server 2016, queries in interpreted Transact-SQLTransact-SQL can scan memory-optimized tables in parallel, instead of just in serial mode.

메모리 액세스에 최적화된 테이블은 고유하게 컴파일된 저장 프로시저를 사용하여 액세스할 수도 있습니다.Memory-optimized tables can also be accessed using a natively compiled stored procedure. 고유하게 컴파일된 저장 프로시저는 성능이 중요한 OLTP 작업에 권장됩니다.Natively compiled stored procedures are recommended for performance-critical OLTP operations.

해석된 Transact-SQLTransact-SQL 액세스는 다음과 같은 시나리오에 권장됩니다.Interpreted Transact-SQLTransact-SQL access is recommended for these scenarios:

  • 임시 쿼리 및 관리 태스크Ad hoc queries and administrative tasks.

  • 고유하게 컴파일된 저장 프로시저(예: 종종 OVER 함수라고 하는 window 함수)에서 사용할 수 없는 구문을 일반적으로 사용하는 보고 쿼리Reporting queries, which typically use constructs not available in natively compiled stored procedures (such as window functions, sometimes referred to as OVER functions).

  • 응용 프로그램 코드를 최소한으로 변경하거나 변경하지 않고 응용 프로그램에서 성능이 중요한 부분을 메모리 액세스에 최적화된 테이블로 마이그레이션하려는 경우.To migrate performance-critical parts of your application to memory-optimized tables, with minimal (or no) application code changes. 테이블을 마이그레이션하면 성능이 향상될 수 있습니다.You can potentially see performance improvements from migrating tables. 그런 다음 저장 프로시저를 고유하게 컴파일된 저장 프로시저로 마이그레이션하면 성능이 추가로 향상될 수 있습니다.If you then migrate stored procedures to natively compiled stored procedures, you may see further performance improvement.

  • Transact-SQLTransact-SQL 문을 고유하게 컴파일된 저장 프로시저에 사용할 수 없는 경우When a Transact-SQLTransact-SQL statement is not available for natively compiled stored procedures.

그러나 다음 Transact-SQLTransact-SQL 구문은 메모리 액세스에 최적화된 테이블의 데이터에 액세스하는 해석된 Transact-SQLTransact-SQL 저장 프로시저에서 지원되지 않습니다.However, the following Transact-SQLTransact-SQL constructs are not supported in interpreted Transact-SQLTransact-SQL stored procedures that access data in a memory-optimized table.

영역Area 지원되지 않음Unsupported
테이블에 대한 액세스Access to tables TRUNCATE TABLETRUNCATE TABLE

MERGE(메모리 액세스에 최적화된 테이블을 대상으로 사용)MERGE (memory-optimized table as target)

동적 및 키 집합 커서(자동으로 정적 커서로 강등됨)Dynamic and keyset cursors (these automatically degrade to static).

컨텍스트 연결을 사용하여 CLR 모듈에서 액세스Access from CLR modules, using the context connection.

인덱싱된 뷰에서 메모리 액세스에 최적화된 테이블 참조Referencing a memory-optimized table from an indexed view.
데이터베이스 간Cross-database 데이터베이스 간 쿼리Cross-database queries

데이터베이스 간 트랜잭션Cross-database transactions

연결된 서버Linked servers

테이블 힌트Table Hints

테이블 힌트에 대한 자세한 내용은For more information about table hints, see. 테이블 힌트(Transact-SQL)를 참조하세요.Table Hints (Transact-SQL). 메모리 내 OLTPIn-Memory OLTP를 지원하기 위해 SNAPSHOT이 추가되었습니다.The SNAPSHOT was added to support 메모리 내 OLTPIn-Memory OLTP.

다음 테이블 힌트는 해석된 Transact-SQLTransact-SQL을 사용하여 메모리 액세스에 최적화된 테이블에 액세스하는 경우 지원되지 않습니다.The following table hints are not supported when accessing a memory-optimized table using interpreted Transact-SQLTransact-SQL.

HOLDLOCKHOLDLOCK IGNORE_CONSTRAINTSIGNORE_CONSTRAINTS IGNORE_TRIGGERSIGNORE_TRIGGERS NOWAITNOWAIT
PAGLOCKPAGLOCK READCOMMITTEDREADCOMMITTED READCOMMITTEDLOCKREADCOMMITTEDLOCK READPASTREADPAST
READUNCOMMITTEDREADUNCOMMITTED ROWLOCKROWLOCK SPATIAL_WINDOW_MAX_CELLS = integerSPATIAL_WINDOW_MAX_CELLS = integer TABLOCKTABLOCK
TABLOCKXXTABLOCKXX UPDLOCKUPDLOCK XLOCKXLOCK

해석된 Transact-SQLTransact-SQL을 사용하여 명시적 또는 암시적 트랜잭션에서 메모리 액세스에 최적화된 테이블에 액세스하는 경우 적어도 다음 중 하나를 수행해야 합니다.When accessing a memory-optimized table from an explicit or implicit transaction using interpreted Transact-SQLTransact-SQL, you must do at least one of the following:

자동 커밋 모드에서 실행되는 쿼리에서 액세스하는 메모리 액세스에 최적화된 테이블에는 격리 수준 테이블 힌트가 필요하지 않습니다.An isolation level table hint is not required for memory-optimized tables accessed by queries running in auto-commit mode.

참고 항목See Also

메모리 내 OLTP에 대한 Transact-SQL 지원Transact-SQL Support for In-Memory OLTP

메모리 내 OLTP로 마이그레이션Migrating to In-Memory OLTP