Christian Bolton, Brent Ozar 등의 SQL Server 2008 내부 및 문제 해결 (일리노이의 로컬 라이브러리에서 빌려온)에 대한 나의 독서 책에 따르면 SQL 서버에 대한 이해와 확인을 구하고 웹에서 많은 검색을 시도하고 있습니다. 내 이해를 확인하거나 수정할 수 있습니다.
쿼리 메모리 부여가 필요한 모든 쿼리 또는 작업에는 작업 공간 메모리가 필요합니다. 일반적으로 정렬, 해시 일치 조인, 병렬 처리 (확실하지 않음), 대량 삽입 (확실하지 않음), 인덱스 재구성 등을 사용하는 쿼리에는 쿼리 작업 영역 메모리가 필요합니다.
작업 공간 메모리는 SQL Server 버퍼 풀의 일부이며 (버퍼 풀의 일부로 할당 됨) 최대 작업 공간 메모리는 버퍼 풀에 할당 된 메모리의 75 %입니다. 기본적으로 단일 쿼리는 작업 공간 메모리의 25 %를 초과 할 수 없습니다 (SQL 2008 / SQL 2012의 경우 기본적으로 리소스 관리자 기본 작업 그룹에 의해 제어 됨).
내 이해의 확인을 추구
1) 48GB RAM과 최대 서버 메모리가 40GB로 구성된 시스템을 고려하면 최대 작업 공간 메모리가 30GB로 제한되고 단일 쿼리가 작업 공간 메모리 (쿼리 메모리)를 10GB 이상으로 가져올 수 없음을 의미합니다. 따라서 대규모 해시 조인을 수행하고 10GB 이상의 메모리 (작업 공간 메모리)가 필요한 10 억 행으로 나쁜 쿼리를 수행하는 경우이 메모리 부여 대기열을 통과하거나 디스크에 즉시 유출해야합니까?
2) 대량 정렬 작업을 수행하는 쿼리에 5MB의 작업 영역 메모리가 할당되고 쿼리의 쿼리 실행 중 쿼리 최적화 프로그램이 잘못된 통계 또는 인덱스 누락으로 인해이 쿼리에는 실제로 30MB 의 작업 영역 메모리 가 필요하다는 것을 인식하는 경우 tempdb에 즉시 유출됩니다. 실행하는 동안 쿼리가 허용 된 작업 영역 메모리를 초과하면 실행 중에 시스템에 사용 가능한 작업 영역 메모리가 충분하더라도 디스크에 유출되어야합니다. 내 이해가 정확합니까?