메모리 내 OLTP 가비지 수집

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

데이터 행이 더 이상 활성화되지 않은 트랜잭션에 의해 삭제된 경우 부실한 것으로 간주됩니다. 부실 행은 가비지 수집에 적합합니다. 다음은 메모리 내 OLTP에서 가비지 수집의 특징입니다.

  • 비차단. 가비지 수집은 워크로드에 미치는 영향을 최소화하면서 시간이 지남에 따라 분산됩니다.

  • 협력. 사용자 트랜잭션은 기본 가비지 수집 스레드를 사용하여 가비지 수집에 참여합니다.

  • 효율적인 경우. 사용자 트랜잭션은 사용 중인 액세스 경로(인덱스)에서 유효하지 않은 행의 연결을 해제합니다. 이렇게 하면 행이 마지막으로 제거될 때 필요한 작업이 줄어듭니다.

  • 반응. 메모리 압력으로 인해 공격적인 가비지 수집이 발생합니다.

  • 확장 가능. 커밋 후 사용자 트랜잭션은 가비지 수집 작업의 일부를 수행합니다. 트랜잭션 작업이 많을수록 트랜잭션이 부실 행을 더 많이 디링크합니다.

가비지 수집은 주 가비지 수집 스레드에 의해 제어됩니다. 주 가비지 수집 스레드는 1분마다 실행되거나 커밋된 트랜잭션 수가 내부 임계값을 초과하는 경우 실행됩니다. 가비지 수집기의 작업은 다음과 같습니다.

  • 행 집합을 삭제하거나 업데이트했으며 가장 오래된 활성 트랜잭션 이전에 커밋된 트랜잭션을 식별합니다.

  • 이러한 이전 트랜잭션에서 만든 ID 행 버전입니다.

  • 이전 행을 각각 16개 행의 하나 이상의 단위로 그룹화합니다. 가비지 수집기의 작업을 더 작은 단위로 배포하기 위해 수행됩니다.

  • 이러한 작업 단위를 각 스케줄러에 대해 하나씩 가비지 수집 큐로 이동합니다. 자세한 내용은 가비지 수집기 DMV 를 참조하세요. sys.dm_xtp_gc_stats(Transact-SQL), sys.dm_db_xtp_gc_cycle_stats(Transact-SQL)sys.dm_xtp_gc_queue_stats(Transact-SQL).

사용자 트랜잭션이 커밋되면 실행된 스케줄러와 연결된 큐에 대기 중인 모든 항목을 식별한 다음 메모리를 해제합니다. 스케줄러의 가비지 수집 큐가 비어 있으면 현재 NUMA 노드에서 비어 있지 않은 큐를 검색합니다. 트랜잭션 활동이 적고 메모리 가중이 있는 경우 기본 가비지 수집기 스레드가 개입하여 어떤 큐에서든 행의 가비지 수집에 액세스할 수 있습니다. 예를 들어 많은 수의 행을 삭제한 후 트랜잭션 작업이 없고 메모리 압력이 없으면 트랜잭션 작업이 다시 시작되거나 메모리 압력이 있을 때까지 삭제된 행이 가비지 수집되지 않습니다.

참고 항목

메모리 내 OLTP에 대한 메모리 관리