메모리 최적화 테이블 소개
메모리 최적화 테이블은 CREATE TABLE(Transact-SQL)을 사용하여 생성된 테이블입니다.
기본적으로 메모리 최적화 테이블은 완전히 영구적입니다. (전통적인) 디스크 기반 테이블에서의 트랜잭션과 마찬가지로, 메모리 최적화 테이블에서의 트랜잭션도 완전 원자적이고, 일관적이며, 격리되고, 영속성(ACID)입니다. 메모리 최적화 테이블과 네이티브 컴파일된 저장 프로시저들은 Transact-SQL 기능의 일부만 지원합니다.
SQL Server 2016 및 Azure SQL Database에서는 메모리 내 OLTP별 콜레이션 또는 코드 페이지에 대한 제한이 없습니다.
메모리 최적화 테이블의 주 메모리는 주 메모리입니다. 메모리에서 테이블에서 행을 읽고 그 행을 메모리에 쓰는 방식입니다. 테이블 데이터의 또 다른 복사본은 디스크에 유지되지만, 이는 지속성을 위한 목적입니다. 영구 테이블에 대한 자세한 내용은 메모리 최적화를 위한 객체 저장 생성 및 관리 문서를 참조하세요. 메모리 최적화 테이블의 데이터는 데이터베이스 복구 중(예: 서버 재부팅 후) 디스크에서만 읽힙니다.
더 큰 성능 향상을 위해 인메모리 OLTP는 트랜잭션 지속 지연 시간을 가진 영구 테이블을 지원합니다. 지연된 영구 트랜잭션은 트랜잭션이 커밋된 직후 디스크에 저장되어 제어권이 클라이언트로 반환됩니다. 성능 향상의 대가로, 디스크에 저장되지 않은 커밋된 트랜잭션은 서버 충돌이나 장애 조치 시 손실됩니다.
기본 영구 메모리 최적화 테이블 외에도, SQL Server는 기록되지 않은 비영구 메모리 최적화 테이블을 지원하며, 이들의 데이터는 디스크에 영속화되지 않습니다. 즉, 이 테이블에서의 트랜잭션은 디스크 IO가 필요하지 않지만, 서버 장애나 장애 조치가 발생하면 데이터가 손실됩니다.
인메모리 OLTP는 SQL Server와 통합되어 개발, 배포, 관리 가능성, 지원 가능성 등 모든 측면에서 원활한 경험을 제공합니다. 데이터베이스는 인메모리 객체와 디스크 기반 객체 모두를 포함할 수 있습니다.
메모리 최적화 테이블의 행들은 버전 관리가 되어 있습니다. 즉, 테이블의 각 행은 여러 버전을 가질 수 있습니다. 모든 행 버전은 동일한 테이블 데이터 구조에서 유지됩니다. 행 버전 관리는 동일한 행에 대한 동시 읽기와 쓰기를 가능하게 하는 데 사용됩니다. 같은 행에 대한 동시 읽기와 쓰기에 대한 자세한 내용은 '메모리 최적화 테이블의 항목들'을 참조하세요.
대략적인 단계와 사용 한계
단계:
(1) 데이터베이스 생성과 파일 그룹 MEMORY_OPTIMIZED_DATA (데이터베이스 변경, 파일 그룹 추가, 각 데이터베이스는 MEMORY_OPTIMIZED_DATA 파일 그룹이 하나만 가질 수 있습니다!!) ) (2) 파일 그룹에 데이터 파일을 저장할 폴더를 추가하세요 (미리 이 폴더를 만들지 말고, 파일 그룹에 add file()을 사용하세요) (3) 영구적/비영속적 메모리 최적화 테이블을 생성하세요(SQL Server 2014는 기본적으로 영속화되어 있습니다). 또한 비집계된 해시 인덱스를 기반으로 기본 키를 정의해야 합니다. 해시된 인덱스는 메모리 최적화 테이블에서 지원되는 유일한 인덱스 유형입니다. (4) 로컬 컴파일된 저장 프로시저 사용: 메모리 최적화 테이블은 메모리 최적화 테이블만 참조하는 로컬 컴파일된 저장 프로시저를 지원합니다.
한계:
(1) 메모리 최적화 테이블은 CONTAINS MEMORY_OPTIMIZED_DATA 파일 그룹과 함께 데이터베이스 아래에 배치되어야 합니다. (2) 메모리 최적화 테이블은 집계되지 않은 해시 인덱스를 기반으로 기본 키를 정의해야 하며, 테이블도 정의되어야 합니다외래키 또는 제약 검사는 지원되지 않습니다 (3) 메모리 최적화 테이블에 충분한 메모리가 있어야 하며, 그렇지 않으면 업데이트 삽입과 같은 작업이 실패합니다. (4) SQL Server 2014는 이 테이블들에 많은 제한이 있습니다. 예를 들어, 외래 키나 제약 검사(MySQL의 메모리 저장 엔진과 비슷한 느낌)를 지원하지 않으며,IDENTITY 필드나 DML 트리거도 지원되지 않습니다。
튜토리얼을 활용하세요
데이터베이스 버전은 다음과 같습니다:
Microsoft SQL Server 2022 (RTM-CU15-GDR) (KB5046059) - 16.0.4150.1 (X64) 2024년 9월 25일 17:34:41 저작권 (C) 2022 마이크로소프트 코퍼레이션 엔터프라이즈 에디션: 리눅스(Ubuntu 22.04.4 LTS<X64>)에서 코어 기반 라이선스 (64비트)
먼저, 다음 명령어로 데이터베이스와 파일 그룹을 생성하세요:
메모리 최적화 그룹을 생성하지 않으면, 메모리 최적화 테이블을 생성할 때 오류가 보고됩니다:메모리 최적화 테이블을 만들 수 없습니다. 메모리 최적화 테이블을 생성하려면 데이터베이스가 온라인 상태이고 최소 하나의 컨테이너를 가진 MEMORY_OPTIMIZED_FILEGROUP가 있어야 합니다.
다음 명령어로 두 개의 메모리 최적화 테이블, 하나는 영속적이고 다른 하나는 비영속 테이블을 생성하세요:
메모리 최적화 테이블에는 두 가지 옵션이 있습니다 (DURABILITY = SCHEMA_AND_DATA), (DURABILITY = SCHEMA_ONLY) 내구성 표: 내구성 =SCHEMA_AND_DATA 비영속 테이블: 내구성 =SCHEMA_ONLY
테스트는 메모리 최적화 테이블에 별도로 삽입됩니다10만 개의 기사(실제로는 100002 항목) 데이터, 명령어는 다음과 같습니다:
지속성 기능은 켜지는 데 28초, 지속성 없이는 1초가 걸립니다。
참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다. |