Azure SQL 데이터베이스에서 메모리 내 OLTP 스토리지 모니터링
적용 대상: Azure SQL 데이터베이스
메모리 내 OLTP를 사용하면 메모리 최적화 테이블 및 테이블 변수의 데이터가 메모리 내 데이터용으로 설정된 데이터베이스 메모리의 일부인 메모리 내 OLTP 스토리지에 상주합니다.
- 프리미엄(DTU) 및 중요 비즈니스용(vCore) 서비스 계층의 데이터베이스 및 탄력적 풀은 메모리 내 OLTP를 지원합니다.
- 하이퍼스케일 서비스 계층은 메모리 내 OLTP 개체의 하위 집합을 지원하지만 메모리 최적화 테이블은 포함되지 않습니다. 자세한 내용은 해당 하이퍼스케일 제한 사항을 참조하세요.
데이터가 메모리 내 OLTP 스토리지 최대값에 맞는지 확인
다른 서비스 목표의 스토리지 용량을 결정합니다. 각 프리미엄 및 중요 비즈니스용 서비스 목표에는 최대 메모리 내 OLTP 스토리지 크기가 포함됩니다.
메모리 최적화 테이블에 대한 메모리 요구 사항 예측은 Azure SQL Database에서와 동일한 방식으로 SQL Server에서도 작동합니다. 예상 메모리 요구 사항을 검토하세요.
테이블 및 테이블 변수 행과 인덱스는 최대값에 포함됩니다. 또한 ALTER TABLE
문에는 전체 테이블 및 해당 인덱스의 새 버전을 생성할 수 있는 충분한 메모리가 필요합니다.
최대값에 도달하면 삽입 및 업데이트 작업이 실패할 수 있습니다. 이 시점에서는 메모리를 회수하기 위해 데이터를 삭제하거나 데이터베이스 또는 탄력적 풀의 서비스 목표를 확장해야 합니다. 자세한 내용은 메모리 내 OLTP 스토리지 부족 상황 수정 - 오류 41823 및 41840을 참조하세요.
모니터링 및 경고
Azure Portal에서 서비스 목표에 대한 스토리지 최대값의 비율로 메모리 내 OLTP 스토리지 사용량을 모니터링할 수 있습니다.
- SQL 데이터베이스의 개요 페이지에 있는 모니터링 페이지에서 차트를 선택합니다. 왼쪽 탐색 메뉴에서 모니터링을 찾고, 메트릭을 선택합니다.
- 메트릭 추가를 선택합니다.
- 기본에서 메모리 내 OLTP 스토리지 비율 메트릭을 선택합니다.
- 경고를 추가하려면 리소스 사용률 상자를 선택하여 메트릭 페이지를 연 다음 새 경고 규칙을 선택합니다. 메트릭 경고 규칙을 만들려면 지침을 따릅니다.
또는 다음 쿼리를 사용하여 메모리 내 스토리지 사용률을 표시합니다.
SELECT xtp_storage_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;
메모리 내 OLTP를 사용하여 메모리 부족 오류 해결
데이터베이스 또는 탄력적 풀에서 메모리 내 OLTP 스토리지 최대값에 도달하면 오류 41823(단일 데이터베이스의 경우) 또는 오류 41840(탄력적 풀의 경우)으로 인해 INSERT
, UPDATE
, ALTER
및 CREATE
문이 실패할 수 있습니다. 두 오류 모두 활성 트랜잭션이 중단됩니다.
41823 및 41840 오류는 데이터베이스 또는 탄력적 풀의 메모리 최적화 테이블 및 테이블 변수의 크기가 최대 메모리 내 OLTP 스토리지 크기에 도달했음을 나타냅니다.
이러한 오류를 해결하려면 다음 중 하나를 수행합니다.
- 잠재적으로 데이터를 기존의 디스크 기반 테이블에 오프로드딩하여 메모리 최적화 테이블에서 데이터를 삭제합니다. 또는
- 메모리 최적화 테이블 및 테이블 변수에 보관해야 하는 데이터를 위한 충분한 메모리 내 OLTP 스토리지가 있는 서비스 계층으로 업그레이드합니다.
참고 항목
드문 경우이지만 오류 41823 및 41840은 일시적일 수 있습니다. 즉, 사용 가능한 메모리 내 OLTP 스토리지가 충분하면 작업을 다시 시도했을 때 성공할 수 있습니다. 따라서 사용 가능한 전체 메모리 내 OLTP 스토리지를 모두 모니터링한 후에 오류 41823 또는 41840이 처음 발생했을 때 다시 시도하는 것이 좋습니다. 다시 시도 논리에 대한 자세한 내용은 메모리 내 OLTP를 통해 충돌 검색 및 다시 시도 논리를 참조하세요.
DMV로 모니터링
메모리 사용량을 사전에 모니터링하여 메모리 사용량이 증가하는 방식과 리소스 한도까지 남은 여유 공간 크기를 확인할 수 있습니다. 데이터베이스 또는 인스턴스의 개체에서 사용 중인 메모리 크기를 식별합니다. sys.dm_db_xtp_table_memory_stats 또는 sys.dm_os_memory_clerks DMV를 사용할 수 있습니다.
sys.dm_db_xtp_table_memory_stats
를 쿼리하여 모든 사용자 테이블, 인덱스 및 시스템 개체에 대한 메모리 사용량을 확인할 수 있습니다.SELECT object_name(object_id) AS [Name], * FROM sys.dm_db_xtp_table_memory_stats;
메모리 내 OLTP 엔진 및 메모리 최적화 개체에 할당된 메모리는 데이터베이스 내 다른 메모리 소비자와 동일한 방식으로 관리됩니다.
MEMORYCLERK_XTP
유형의 클럭은 메모리 내 OLTP 엔진에 할당된 모든 메모리를 고려합니다. 다음 쿼리를 사용하여 특정 데이터베이스 전용 메모리를 포함하여 메모리 내 OLTP 엔진에서 사용한 모든 메모리를 찾습니다.-- This DMV accounts for all memory used by the In-Memory OLTP engine SELECT [type], [name] , memory_node_id , pages_kb/1024. AS pages_MB FROM sys.dm_os_memory_clerks WHERE [type] LIKE '%xtp%';
type name memory_node_id pages_MB -------------------- ---------- -------------- -------------------- MEMORYCLERK_XTP Default 0 18 MEMORYCLERK_XTP DB_ID_5 0 1358 MEMORYCLERK_XTP Default 64 0
동적 관리 뷰 sys.dm_os_out_of_memory_events를 사용하여 Azure SQL Database의 메모리 부족 오류에 대한 자세한 정보를 확인할 수도 있습니다. 예시:
SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;