Azure SQL Managed Instanc에서 메모리 내 OLTP(미리 보기)를 사용하여 애플리케이션 성능 개선
적용 대상: Azure SQL Managed Instance
메모리 내 OLTP를 사용하여 트랜잭션 처리, 데이터 수집 및 일시적인 데이터 시나리오의 성능을 개선할 수 있습니다. 중요 비즈니스용 서비스 계층에는 vCore 수에 따라 결정되는 한도인 특정 양의 최대 메모리 내 OLTP 메모리가 포함됩니다.
다음 단계에 따라 Azure SQL Managed Instance에서 기존 데이터베이스에 메모리 내 OLTP를 채택합니다.
1단계: 메모리 내 OLTP로 마이그레이션할 개체 식별
SQL Server Management Studio(SSMS)에는 활성 워크로드가 있는 데이터베이스에 대해 실행할 수 있는 트랜잭션 성능 분석 개요 보고서가 포함되어 있습니다. 이 보고서에서는 메모리 내 OLTP로 마이그레이션할 후보 테이블 및 저장 프로시저를 식별합니다.
SSMS에서 보고서를 생성합니다.
- 개체 탐색기에서 데이터베이스 노드를 마우스 오른쪽 단추로 클릭합니다.
- 보고서>표준 보고서>트랜잭션 성능 분석 개요를 선택합니다.
메모리 내 OLTP의 이점 평가에 대한 자세한 내용은 테이블 또는 저장 프로시저가 메모리 내 OLTP로 이식되어야 하는지 결정을 참조하세요.
2단계: 비교 가능한 테스트 데이터베이스 만들기
데이터베이스에 메모리 최적화 테이블로 변환하면 도움이 되는 테이블이 있음을 보고서에서 표시한다고 가정합니다. 먼저 테스트하여 해당 내용을 확인하는 것이 좋습니다.
프로덕션 데이터베이스의 테스트 복사본이 필요합니다. 테스트 데이터베이스는 동일한 서비스 계층(중요 비즈니스용)에 있어야 하며 vCore는 프로덕션 데이터베이스로 계산됩니다.
쉽게 테스트하려면 테스트 데이터베이스를 다음과 같이 조정합니다.
SQL Server Management Studio(SSMS)를 사용하여 데이터베이스에 연결합니다.
쿼리에서
WITH (SNAPSHOT)
옵션이 필요하지 않도록 하려면 다음 T-SQL 문에 표시된 대로 현재 데이터베이스의MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
옵션을 설정합니다.ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
3단계: 테이블 마이그레이션
테스트하려는 테이블의 메모리 최적화 복사본을 생성하고 채워야 합니다. 다음 방법 중 하나로 생성할 수 있습니다.
- SSMS의 간편한 메모리 최적화 마법사.
- T-SQL 명령을 사용합니다.
SSMS의 메모리 최적화 마법사
이 마이그레이션 옵션을 사용하려면 다음을 수행합니다.
SSMS에서 데이터베이스에 연결합니다.
개체 탐색기에서 테이블을 마우스 오른쪽 단추로 클릭하고 메모리 최적화 관리자를 선택합니다.
테이블 메모리 최적화 관리자 마법사가 표시됩니다.
마법사에서 마이그레이션 유효성 검사(또는 다음 버튼)를 선택하여 테이블에 메모리 최적화 테이블에서 지원되지 않는 지원되지 않는 기능이 있는지 확인합니다. 자세한 내용은 다음을 참조하세요.
- 메모리 최적화 어드바이저의 메모리 최적화 체크리스트.
- 메모리 내 OLTP에서 지원되지 않는 Transact-SQL 구문.
- 메모리 내 OLTP로 마이그레이션.
테이블에 지원되지 않는 기능이 없는 경우 어드바이저는 실제 스키마 및 데이터 마이그레이션을 자동으로 수행할 수 있습니다.
수동 T-SQL
이 마이그레이션 옵션을 사용하려면 다음을 수행합니다.
- SSMS(또는 유사한 유틸리티)를 사용하여 테스트 데이터베이스에 연결합니다.
- 테이블 및 해당 인덱스에 대한 전체 T-SQL 스크립트를 가져옵니다.
- SSMS에서 테이블 노드를 마우스 오른쪽 단추로 클릭합니다.
- 스크립트 테이블 형식>생성 위치>새 쿼리 창을 선택합니다.
- 스크립트 창에서
CREATE TABLE
문에WITH (MEMORY_OPTIMIZED = ON)
을 추가합니다. - CLUSTERED 인덱스가 있는 경우 NONCLUSTERED로 변경합니다.
- sp_rename을 사용하여 기존 테이블의 이름을 바꿉니다.
- 편집된
CREATE TABLE
스크립트를 실행하여 테이블의 새 메모리 최적화 복사본을 생성합니다. INSERT...SELECT * INTO
를 사용하여 메모리 최적화 테이블에 데이터를 복사합니다.INSERT INTO [<new_memory_optimized_table>] SELECT * FROM [<old_disk_based_table>];
4단계(선택 사항): 저장 프로시저 마이그레이션
메모리 내 기능은 성능 향상을 위해 저장 프로시저를 수정할 수도 있습니다.
네이티브 컴파일된 저장 프로시저에 대한 고려 사항
네이티브 컴파일된 저장 프로시저에는 해당 T-SQL WITH
절에 다음 옵션이 있어야 합니다.
- NATIVE_COMPILATION: 프로시저의 Transact-SQL 문이 효율적인 실행을 위해 모드 네이티브 코드로 컴파일됨을 의미합니다.
- SCHEMABINDING: 저장 프로시저를 삭제하지 않는 한 테이블에서 저장 프로시저에 영향을 주는 방식으로 열 정의를 변경할 수 없음을 의미합니다.
네이티브 모듈은 트랜잭션 관리에 하나의 큰 ATOMIC 블록 을 사용해야 합니다. 명시적 BEGIN TRANSACTION
또는 ROLLBACK TRANSACTION.
역할이 없습니다. 코드에서 비즈니스 규칙 위반을 감지하는 경우 THROW 문으로 Atomic 블록을 종료할 수 있습니다.
네이티브 컴파일을 위한 일반 CREATE PROCEDURE
일반적으로 네이티브 컴파일된 저장 프로시저를 생성하는 T-SQL은 다음 템플릿과 유사합니다.
CREATE PROCEDURE schemaname.procedurename
@param1 type1, ...
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'<desired sys.syslanuages.sysname value>'
)
...
END;
TRANSACTION_ISOLATION_LEVEL
의 경우 SNAPSHOT은 네이티브 컴파일된 저장 프로시저의 가장 일반적인 값입니다. 그러나 다른 값의 하위 집합에서도 지원됩니다.- REPEATABLE READ
- 직렬화 가능
LANGUAGE
값은sys.syslanguages
뷰의name
열에 있어야 합니다. 예들 들어N'us_english'
입니다.
저장 프로시저를 마이그레이션하는 방법
마이그레이션 단계는 다음과 같습니다.
CREATE PROCEDURE
스크립트를 일반 해석 저장 프로시저로 가져옵니다.- 이전 템플릿에 맞게 해당 헤더를 다시 작성합니다.
- 저장 프로시저 T-SQL 코드가 네이티브 컴파일된 저장 프로시저에서 지원되지 않는 기능을 사용하는지 여부를 확인합니다. 필요한 경우 해결 방법을 구현합니다. 자세한 내용은 네이티브 컴파일된 저장 프로시저 마이그레이션 문제를 참조하세요.
- sp_rename을 사용하여 이전 저장 프로시저의 이름을 바꿉니다. 또는 삭제합니다.
- 편집된
CREATE PROCEDURE
T-SQL 스크립트를 실행합니다.
5단계: 테스트에서 워크로드 실행
프로덕션 데이터베이스에서 실행되는 워크로드와 유사한 테스트 데이터베이스에서 워크로드를 실행합니다. 이렇게 하면 테이블 및 저장 프로시저에 대한 메모리 내 기능을 사용할 때 성능이 향상됩니다.
워크로드의 주요 특성은 다음과 같습니다.
- 동시 연결 수.
- 읽기/쓰기 비율.
테스트 워크로드를 조정하고 실행하려면 간편한 ostress.exe 도구를 사용하는 것이 좋습니다.
네트워크 대기 시간을 최소화하려면 데이터베이스가 있는 동일한 Azure 지역에서 테스트를 실행합니다.
6단계: 사후 구현 모니터링
프로덕션에서 메모리 내 구현의 성능 효과를 모니터링하는 것이 좋습니다.