Windows에서 더 이상 제공하지 않을 때까지 메모리 사용량이 점차 증가하는 SQL Server 인스턴스가 있습니다. 가끔 큰 쿼리 결과로 인해 인스턴스가 커지는 것은 논리적으로 보입니다.
SQL Server가 더 이상 필요하지 않은 메모리를 해제하도록 설득 할 수있는 방법이 있습니까 (서비스를 다시 시작하는 것 제외)?
편집 :
SQL Server 2000 SQL Server 8.00.2039-SP4 (Standard Edition)를 사용하고 있습니다.
다음 쿼리를 사용하여 찾을 수있었습니다.
SELECT 'SQL Server '
+ CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - '
+ CAST(SERVERPROPERTY('productlevel') AS VARCHAR) + ' ('
+ CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')'
따라서 답변을 요약하면 다음과 같습니다.
MS SQL Server에 즉시 필요하지 않은 메모리를 해제하도록 프롬프트 할 수있는 방법은 없습니다. SQL Server는 필요할 때 자동으로 메모리를 해제해야하지만 그 전에는 그렇지 않습니다. 메모리 문제가있는 경우 "최대 서버 메모리"메모리 옵션 값을 줄여야합니다.
이것이 바로 SQL Server가 작동하는 방식 입니다.
해당 컴퓨터에 다른 서비스가 있고 SQL이 사용 가능한 모든 메모리를 사용하지 않도록하려면 최대 서버 메모리를 설정해야합니다. MSDN에서 SQL Server 메모리 옵션 을 참조하십시오.
다른 포스터는 이것이 의도적으로 올바르지 만 최대 메모리를 서버의 RAM보다 약간 적게 제한하고 싶습니다. 이 일련의 이벤트에 대해 생각해보십시오.
이를 방지하려면 최대 서버 메모리 제한을 실제 실제 메모리의 약 80-90 %로 구성하십시오. SQL 2000에 대한 지침 : http://msdn.Microsoft.com/en-us/library/ms178067.aspx
OS가 RAM 굶주 리거나 서비스를 중지했다가 다시 시작하는 경우)에만 해제됩니다.해야 할 일은 'max'를 구성하여 SQL이 사용할 최대 양을 제한하는 것입니다. 서버 메모리의 값. RAM (그리고 바라건대 없을 것입니다) 필요로하는 서버에 아무것도 없다면 나는 그것에 대해 걱정하지 않을 것입니다.
SQL Server는 메모리를 소비하고 운영 체제에서 메모리 부족이 있음을 알리지 않는 한 다시 제공하지 않습니다. Portman이 지적했듯이 이것은 의도적으로 설계된 것이며 메모리 소비를 제한하려면 SQL Server가 사용할 최대 서버 메모리를 설정해야합니다.
여러분이 설명하는 동작은 메모리 관리자가 OS의 메모리 압력 요청에 응답하도록 다시 작성되었을 때 SQL Server 2005부터 시작된 것입니다.
SQL Server 2000 이전의 경우 OS가 아무리 외쳐도 메모리를 확보하면 되돌려주지 않습니다.
CodeSlave-2000, 2005 또는 2008에서 실행 중입니까?
이전 질문은 알고 있지만 SQL이 메모리를 해제하도록 강제하는 방법은 (예 : Sleep (15000)) 15 초 동안 (예 : Sleep (15000)) 청크로 가능한 한 많은 메모리를 할당하는 애플리케이션을 작성하는 것입니다. 할당 된 메모리를 해제하고 종료합니다. 나는 이것을 시도했고 SQL은 메모리를 해제하여 시스템이 RAM을 되 찾는다. 위와 같은 코드를 작성하는 것은 C/C++를 사용하여 거의 사소한 일입니다. 메모리 블록 체인 (포인터 및 크기)을 유지하기 위해 stuct 체인을 설정하는 문제입니다. "malloc ()"이 실패 할 때까지 크기를 점진적으로 줄입니다. 최소값 (1024 미만)을 지정한 다음 연결된 목록을 탐색하여 할당 된 블록을 해제합니다.