it-swarm-ko.tech

SQL Server에서 메모리 회수

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) + ')'
10
BIBD

따라서 답변을 요약하면 다음과 같습니다.

MS SQL Server에 즉시 필요하지 않은 메모리를 해제하도록 프롬프트 할 수있는 방법은 없습니다. SQL Server는 필요할 때 자동으로 메모리를 해제해야하지만 그 전에는 그렇지 않습니다. 메모리 문제가있는 경우 "최대 서버 메모리"메모리 옵션 값을 줄여야합니다.

4
BIBD

이것이 바로 SQL Server가 작동하는 방식 입니다.

해당 컴퓨터에 다른 서비스가 있고 SQL이 사용 가능한 모든 메모리를 사용하지 않도록하려면 최대 서버 메모리를 설정해야합니다. MSDN에서 SQL Server 메모리 옵션 을 참조하십시오.

19
Portman

다른 포스터는 이것이 의도적으로 올바르지 만 최대 메모리를 서버의 RAM보다 약간 적게 제한하고 싶습니다. 이 일련의 이벤트에 대해 생각해보십시오.

  • SQL 2000은 원활하게 실행되며 서버의 모든 RAM을 소모합니다.
  • 누군가 RDP를 사용하거나 IE 패치를 다운로드하거나 백업을 시작해야합니다.
  • SQL은 OS가 작동 할 수 있도록 충분한 메모리를 할당 해제하고 확보해야합니다.
  • 메모리를 확보하고 디스크로 페이징하는 동안 성능 저하
  • 일단 안정되면 일이 잘 진행됩니다.
  • 다른 작업이 완료되고 SQL이 점차적으로 해제 된 RAM을 회수합니다.
  • 반복

이를 방지하려면 최대 서버 메모리 제한을 실제 실제 메모리의 약 80-90 %로 구성하십시오. SQL 2000에 대한 지침 : http://msdn.Microsoft.com/en-us/library/ms178067.aspx

8
sh-beta

OS가 RAM 굶주 리거나 서비스를 중지했다가 다시 시작하는 경우)에만 해제됩니다.해야 할 일은 'max'를 구성하여 SQL이 사용할 최대 양을 제한하는 것입니다. 서버 메모리의 값. RAM (그리고 바라건대 없을 것입니다) 필요로하는 서버에 아무것도 없다면 나는 그것에 대해 걱정하지 않을 것입니다.

4
SqlACID

SQL Server는 메모리를 소비하고 운영 체제에서 메모리 부족이 있음을 알리지 않는 한 다시 제공하지 않습니다. Portman이 지적했듯이 이것은 의도적으로 설계된 것이며 메모리 소비를 제한하려면 SQL Server가 사용할 최대 서버 메모리를 설정해야합니다.

3
K. Brian Kelley

여러분이 설명하는 동작은 메모리 관리자가 OS의 메모리 압력 요청에 응답하도록 다시 작성되었을 때 SQL Server 2005부터 시작된 것입니다.

SQL Server 2000 이전의 경우 OS가 아무리 외쳐도 메모리를 확보하면 되돌려주지 않습니다.

CodeSlave-2000, 2005 또는 2008에서 실행 중입니까?

2
Paul Randal

이전 질문은 알고 있지만 SQL이 메모리를 해제하도록 강제하는 방법은 (예 : Sleep (15000)) 15 초 동안 (예 : Sleep (15000)) 청크로 가능한 한 많은 메모리를 할당하는 애플리케이션을 작성하는 것입니다. 할당 된 메모리를 해제하고 종료합니다. 나는 이것을 시도했고 SQL은 메모리를 해제하여 시스템이 RAM을 되 찾는다. 위와 같은 코드를 작성하는 것은 C/C++를 사용하여 거의 사소한 일입니다. 메모리 블록 체인 (포인터 및 크기)을 유지하기 위해 stuct 체인을 설정하는 문제입니다. "malloc ()"이 실패 할 때까지 크기를 점진적으로 줄입니다. 최소값 (1024 미만)을 지정한 다음 연결된 목록을 탐색하여 할당 된 블록을 해제합니다.

0
A Passer by