it-swarm-ko.tech

SQL Server 2005 :이 쿼리를 실행하기위한 시스템 메모리가 부족합니다.

꽤 오랫동안 (수년) 안정적으로 실행되어 온 SQL 서버 중 하나가 최근 메모리 부족 오류를 발생 시켰습니다. 애플리케이션 이벤트 로그에서 다음을 볼 수 있습니다.

이벤트 ID : 701

설명 :이 쿼리를 실행하기위한 시스템 메모리가 부족합니다.

이 서버를 관리하는 우리 팀은 대부분 sysadmin 업무를 두 배로하는 개발자들로 구성되어 있습니다. 그러나 우리의 주요 전문 지식은 개발입니다. 즉,이 문제를 해결하는 방법을 잃어 버렸습니다. 우리는 포럼을 수색하고 있으며 일치하는 것을 찾지 못했습니다.

따라서 다음은 문제 해결에 도움이되는 몇 가지 세부 정보입니다.

  • 최소 서버 메모리는 0으로 설정됩니다.
  • 최대 서버 메모리는 2000으로 설정되어 있습니다.
  • 총 실제 메모리는 3,325.85MB (sysinfo에서)입니다.
  • 총 가상 메모리는 7.10GB (sysinfo에서)입니다.
  • 우리는 AWE를 사용하여 메모리를 할당하지 않았지만 이제 차이가 있는지 확인해야합니다.
  • 이 오류는 쿼리를 실행하지 않고 트랜잭션 로그를 백업하는 작업에서 발생했습니다.
  • 연결된 서버가 많이 있습니다. 다른 쪽의 RDBMS 유형은 SQL Server (2005 및 2000), Oracle 10g 및 OSI PI 시스템입니다.
  • 이 시점에서 간헐적입니다. 우리는 오류와 시간이나 사건을 연관시킬 수 없습니다.
  • 물론 재부팅하면 잠시 동안 사라지는 것처럼 보이며 이는 오류 메시지의 특성으로 인해 의미가 있습니다.
  • 이 서버는 응용 프로그램 서버 (두 개의 Windows 서비스)와 웹 서버 및 데이터베이스 서버로 세 배가됩니다.

편집하다 :

우리는 SP3에 있습니다. 우리가 찾은 대부분의 게시물은 SP1 이전 버전으로 적용되지 않습니다.

SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

보고

9.00.4035.00 SP3 스탠다드 에디션

13
Aaron Daniels

-g 시작 매개 변수도 사용하는 것이 좋습니다. 대부분의 사람들에게 효과가있는 것 같고 아마 당신에게도 효과가있을 것입니다. 내 유일한 관심사는 근본적인 문제가 해결되지 않을 수 있다는 것입니다. 예를 들어 연결된 서버로 인해 메모리 누수가 발생하고 MTL이 512Mb로 증가하면 메모리 문제 사이에 더 긴 기간이 될까요? 나는 그것에 대한 답을 모르지만 Perfmon이 좋은 시작일 수 있다는 점에서 UndertheFold에 동의하는 경향이 있습니다.

4
Mike Thien

오류 메시지 "이 쿼리를 실행하기위한 시스템 메모리가 부족합니다."는 VAS (가상 주소 공간)를 사용할 수없고 일반적인 의미의 메모리가 아니라는 것을 나타냅니다. SQL Server 프로세스 공간 내에서.

이 서버에서 3GB로만 실행하고 SQL Server가 최대 2GB로 할당되었다는 점을 감안할 때 OS와 더 중요한 것은 상자에있는 다른 모든 것이 1GB 미만으로 플레이 할 수 있음을 의미합니다. 그것은 많은 메모리가 아닙니다.

이 문제가 실제로 메모리 누수의 결과 인 경우 소비되는 것은 SQL Server 프로세스 공간 (memToLeave) 외부의 VAS입니다.

MemToLeave 부분에 더 많은 메모리를 할당하려면 -g 시작 매개 변수를 사용하는 것이 좋습니다.

자세한 내용은 다음 문서를 참조하십시오.

http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/

SQL Server의 최대 메모리 설정을 줄이고 싶을 수도 있지만 마지막 수단으로이 작업을 수행합니다.

7
John Sansom

이것은 연결된 서버 드라이버의 메모리 누수와 관련이있을 수 있습니다. 이 포럼 스레드에 따라 :

다음은 Microsoft가 우리에게 말한 것입니다.

특히 fox pro 드라이버는 연결된 서버를 사용하여 데이터를 처리하여 시간이 지남에 따라 축적되는 메모리 누출을 유발합니다.

1
splattne

이 서버는 응용 프로그램 서버 (두 개의 Windows 서비스)와 웹 서버 및 데이터베이스 서버로 세 배가됩니다.

최소 메모리를 설정합니다.이 다른 프로세스가 SQL에서 메모리를 "훔치는"가능성이 있습니다.

Perfmon을 사용하여 카운터 로그를 실행하여이를 확인하고/또는 실제 문제를 식별하기 위해 더 많은 정보를 제공 할 수 있습니다.

0
CPU_BUSY

이 블로그에서 가져온 참조!

이 문제를 해결하기위한 다른 대안이 있습니다.

먼저, SQL Server 설정에서 "최소 서버 메모리"및 "최대 서버 메모리"를 확인하십시오. 두 값에서 매우 작은 차이를 발견 한 경우 "최대 서버 메모리"를 늘리십시오.

Second, 메모리 사용량 정보가 포함 된 장기 실행 쿼리를 찾았으며이 쿼리가 유휴 상태 인 경우이 프로세스를 확인하고 종료하십시오. 데이터베이스 성능 최적화는 메모리 사용에있어 중요한 부분입니다.

셋째, 적절한 인덱싱이 없으면 시스템 DISK I/O가 증가하고 메모리에 직접적인 영향을 미치기 때문에 장기 실행 쿼리에 대한 인덱스 사용을 찾았습니다.

넷째, 가상 메모리 페이징 파일의 크기를 확인하고이 파일의 크기를 늘립니다.

다섯째, "쿼리 당 최소 메모리"의 크기가 실제로 기본적으로 1024KB인지 확인하지만 드물게이 매개 변수의 크기를 줄일 수 있습니다. . 실제로 이것은 권장되지 않지만 시도해 볼 수 있습니다.

여섯째, 이 DBCC 명령을 실행 해보십시오.이 명령은 서버의 전반적인 성능에 영향을 미칠 수 있으므로 권장하지 않습니다. 그러나 이것을 시도 할 수 있습니다.

0
Anvesh