SQL Server에서 메모리 회수


10

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

답변:


19

이것은 SQL Server가 정확히 어떻게 가정 일에.

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


1
기능보다 버그처럼 들립니다. SQL Server는 사용 가능한 RAM의 95 %를 사용하여 작업을 수행하고 완료되면 해제하지 않습니다.
Alchemical

1
@Alchemical " 완료 "의 의미에 따라 다릅니다 . SQL Server 컴퓨터의 모든 RAM을 사용할 있습니다. 디스크 캐시로 사용하십시오. SQL Server 사용이 완료 될 때까지 디스크 캐시로 사용하여 " 완료 " 하지 않습니다 .
Ian Boyd

8

다른 포스터는 이것이 의도적으로 맞는 것이지만 최대 메모리를 서버의 RAM보다 조금 작게 제한하려고합니다. 이 일련의 이벤트에 대해 생각해보십시오.

  • SQL 2000은 행복하게 실행되어 모든 서버의 RAM을 사용합니다.
  • 누군가 RDP를 사용하거나 패치를 다운로드하려면 IE를 가져와야합니다. 그렇지 않으면 백업이 시작됩니다.
  • SQL은 OS가 작동하기 위해 할당 해제하고 충분한 메모리를 확보해야합니다.
  • 메모리를 비우고 디스크에 페이징하는 동안 성능이 저하됩니다.
  • 일단 안정되면 일이 잘 진행됩니다
  • 다른 작업이 완료되고 SQL이 점차 사용 가능한 RAM을 회수합니다.
  • 반복

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


이 동작은 2005이고 2008-2000은 OS에 요청시 메모리를 해제하지 않습니다.
Paul Randal

2
정확히 주문형은 아니지만 메모리를 OS로 다시 릴리스합니다. 내가 게시 한 링크에서 : "SQL Server가 메모리를 동적으로 사용하는 경우 시스템은 주기적으로 시스템에 쿼리하여 사용 가능한 실제 메모리 양을 결정합니다. Microsoft Windows 2000에서 SQL Server는 4MB 사이의 사용 가능한 실제 메모리를 유지하기 위해 버퍼 캐시를 늘리거나 줄입니다. 사용 가능한 메모리를 유지 관리하면 Windows 2000의 페이징이 방지됩니다. 사용 가능한 메모리가 적 으면 SQL Server는 Windows 2000으로 메모리를 해제합니다. 메모리가 더 있으면 SQL Server는 버퍼 풀에 메모리를 할당합니다. "
sh-beta

아-사실-그것은 약간의 물리적 메모리를 해제하는 트릭을 수행합니다-당신이 맞습니다!
Paul Randal

4

OS가 RAM이 부족하다는 신호를 보이거나 서비스를 중지했다가 다시 시작한 경우에만 해제합니다. 할 일은 'max server memory'값을 구성하여 SQL이 사용할 최대 양을 제한하는 것입니다. 서버에 RAM이 필요한 다른 것이 없다면 (아마도 없을 것입니다) 걱정하지 않아도됩니다.


4

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

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


3

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


2

메모리 관리자가 OS의 메모리 압력 요청에 응답하도록 다시 쓰여질 때 SQL Server 2005부터 설명합니다.

SQL Server 2000 및 그 이전 버전에서는 메모리를 확보 한 후에는 OS가 아무리 소리를 지르더라도 메모리를 돌려주지 않습니다.

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


아 하 ... 네, 실제로 SQL 2000입니다.
BIBD

3
OS가 소리를 지르면 돌려주지 않지만 OS가 사용 가능한 실제 메모리에 대한 특정 임계 값 아래에 있음을 알면 돌려줍니다. msdn.microsoft.com/en-us/library/ms178067.aspx
sh-beta

sh-beta가 말한 것을 강화하기 위해 SQL Server 2000은 Windows XP (2001)가 " OS가 소리 를 지도록 그것은 "( msdn.microsoft.com/en-us/library/aa366799(v=vs.85).aspx ). SQL Server 2005는 새로운 Windows 기능을 활용합니다. 그러나 SQL Server 2000을 작성할 때 OS에서 소리를 지르는 방법이 없었기 때문에 SQL Server가 주기적으로 메모리 부족을 확인하도록했습니다.
Ian Boyd

0

오래된 질문이지만 알고 있지만 (최소한) SQL에서 메모리를 해제하도록하는 방법은 청크에 가능한 많은 메모리를 할당하고 15 초 동안 기다리는 응용 프로그램을 작성하는 것입니다 (예 : Sleep (15000)). 할당 된 메모리를 해제하고 종료하는 단계; 나는 이것을 시도했고 SQL은 메모리를 해제하여 시스템은 RAM을 되 찾는다. 위와 같은 코드를 작성하는 것은 메모리 블록 체인 (포인터 및 크기)을 유지하기 위해 스터 트 체인을 설정하는 것만으로 C / C ++를 사용하는 것이 쉽지 않습니다. 최소값 (1024보다 작음)을 설정 한 다음 링크 된 목록을 탐색하여 할당 된 블록을 해제하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.