버퍼 풀 검사를 트리거하는 작업은 대용량 메모리 컴퓨터에서 느리게 실행될 수 있습니다.
이 문서에서는 대용량 메모리 컴퓨터에서 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부터 버퍼 풀 검색에 오랜 시간(10초 이상)이 걸렸다는 오류 메시지가 SQL Server 오류 로그에 추가되었습니다.
버퍼 풀 검색에는 데이터베이스 ID 7, 명령 'BACKUP DATABASE', 작업 'FlushCache', 검색된 버퍼 115, 총 반복 버퍼 204640239, 대기 시간 0ms가 소요되었습니다. 자세한 내용은 'https://go.microsoft.com/fwlink/?linkid=2132602'를 참조하세요.
긴 검사를 진단하는 확장 이벤트
또한 동일한 빌드 SQL Server 2016 SP3, SQL Server 2017 CU23 및 SQL Server 2019 CU9부터 긴 버퍼 풀 검색을 식별하는 데 도움이 되는 buffer_pool_scan_complete 확장 이벤트가 도입되었습니다.
검색이 1초 이상 걸리는 경우 이벤트를 사용하도록 설정하면 XEvent가 다음과 같이 기록됩니다.
name | database_id | elapsed_time_ms | command | operation | scanned_buffers | total_iterated_buffers |
---|---|---|---|---|---|---|
buffer_pool_scan_complete | 7 | 1308 | BACKUP DATABASE | FlushCache | 243 | 19932814 |
참고 항목
임계값은 XEvent에 있으므로 더 세분화된 정보로 정보를 캡처할 수 있습니다.
해결 방법
SQL Server 2022 이전에는 이 문제를 제거할 방법이 없었습니다. 버퍼 풀에서 클린 버퍼(DBCC DROPCLEANBUFFERS)를 삭제하면 성능이 크게 저하될 수 있으므로 버퍼 풀을 지우는 작업을 수행하지 않는 것이 좋습니다. 메모리에서 데이터베이스 페이지를 제거하면 후속 쿼리 실행이 디스크의 데이터베이스 파일에서 데이터를 다시 읽습니다. 디스크 I/O를 통해 데이터에 액세스하는 이 프로세스로 인해 쿼리 속도가 느려집니다.
SQL Server 2022에서는 버퍼 풀 검사가 여러 코어를 활용하여 병렬 처리되므로 이 문제가 완화됩니다. 버퍼가 800만 개 미만인 경우 직렬 검색이 계속 사용되는 800만 버퍼(64GB)당 하나의 작업이 있습니다. 자세한 내용은 버퍼 풀 병렬 검사를 시청하세요.
자세한 정보
큰 버퍼 풀에서 발생할 수 있는 문제에 대한 자세한 내용은 SQL Server: 대형 RAM 및 DB 검사점을 참조 하세요.