버퍼 풀 검사를 트리거하는 작업은 대용량 메모리 컴퓨터에서 느리게 실행될 수 있습니다.
이 문서에서는 SQL Server 버퍼 풀을 검사하는 데 큰 메모리 컴퓨터에서 완료하는 데 시간이 오래 걸리는 방법을 설명합니다.
적용 대상: SQL Server
원래 KB 번호: 4566579
증상
Microsoft의 특정 작업은 버퍼 풀(메모리에 데이터베이스 페이지를 저장하는 캐시)의 검사를 트리거할 SQL Server 있습니다. RAM(1TB 이상의 메모리)이 많은 시스템에서 버퍼 풀을 검사하는 데 시간이 오래 걸릴 수 있습니다. 이렇게 하면 검사를 트리거한 작업이 느려집니다.
버퍼 풀 검사를 발생시키는 작업
버퍼 풀 검사를 트리거할 수 있는 몇 가지 작업은 다음과 같습니다.
- 데이터베이스 시작
- 데이터베이스 종료 또는 다시 시작
- AG 장애 조치(failover)
- 데이터베이스 제거(삭제)
- 데이터베이스에서 파일 제거
- 전체 또는 차등 데이터베이스 백업
- 데이터베이스 복원
- 트랜잭션 로그 복원
- 온라인 복원
-
DBCC CHECKDB
또는DBCC CHECKTABLE
작업
오류 로그에 따르면 검색에 오랜 시간이 걸렸습니다.
SQL Server 2016 SP3부터 SQL Server 2017 CU23 및 SQL Server 2019 CU9에서 SQL Server 오류 로그에 오류 메시지가 추가되어 버퍼 풀 검사가 10초 이상 오래 걸렸음을 나타냅니다.
버퍼 풀 검사는 데이터베이스 ID 7, 명령 'BACKUP DATABASE', 작업 'FlushCache', 검사된 버퍼 115, 반복된 총 버퍼 204640239, 대기 시간 0ms 등 14초가 걸렸습니다. 자세한 내용은 'https://go.microsoft.com/fwlink/?linkid=2132602'를 참조하세요.
긴 검사를 진단하는 확장 이벤트
또한 2016 SP3와 SQL Server 동일한 빌드부터 2017 CU23 및 SQL Server 2019 CU9를 SQL Server buffer_pool_scan_complete 확장 이벤트는 긴 버퍼 풀 스캔을 식별하는 데 도움이 되도록 도입되었습니다.
검색이 1초 이상 걸리는 경우 XEvent는 이벤트가 활성화될 때 다음과 같이 기록됩니다.
이름 | database_id | elapsed_time_ms | 명령 | 작업 | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | BACKUP DATABASE | FlushCache | 243 | 19932814 |
참고
임계값은 XEvent에 있으므로 더 세분화된 정보로 정보를 캡처할 수 있습니다.
해결 방법
2022년 SQL Server 이전에는 이 문제를 제거할 방법이 없었습니다. 버퍼 풀에서 클린 버퍼(DBCC DROPCLEANBUFFERS)를 삭제하면 성능이 크게 저하되기 때문에 버퍼 풀을 지우는 작업은 수행하지 않는 것이 좋습니다. 메모리에서 데이터베이스 페이지를 제거하면 후속 쿼리 실행이 디스크의 데이터베이스 파일에서 데이터를 다시 읽게 됩니다. 디스크 I/O를 통해 데이터에 액세스하는 이 프로세스로 인해 쿼리 속도가 느려집니다.
2022년 SQL Server 버퍼 풀 검사는 여러 코어를 활용하여 병렬화되므로 이 문제가 완화됩니다. 버퍼가 800만 개 미만인 경우 직렬 검색이 계속 사용되는 800만 버퍼(64GB)당 하나의 작업이 있습니다. 자세한 내용은 버퍼 풀 병렬 검사를 watch.
추가 정보
큰 버퍼 풀에서 발생할 수 있는 문제에 대한 자세한 내용은 SQL Server: 큰 RAM 및 DB 검사점 지정을 참조하세요.