SQL Server에서 메모리를 해제하려면 어떻게해야합니까?


19

SQL이 RAM을 좋아하지만 Windows가 요청할 때 해제합니다. 이것이 SQL이 작동하는 방식이라는 것을 알고 있습니다. 그러나 SQL이 실제로 RAM을 반환한다고 확신하지 못하는 Windows 관리자가 있습니다.이 특정 (가상) 서버에서 Analysis Services가 완료되면 SQL이 많이 필요하지 않지만이 서버에는 다른 것이 없습니다. SQL에 많은 것을 요구하십시오.

따라서 가상 환경의 문제가 "SQL이 너무 많은 RAM을 사용하고 있기 때문에"문제가 아니라는 것을 Windows Admins에게 안심 시키려고하지만 서비스를 다시 시작하지 않고 SQL을 해제하도록 설득 할 수는 없습니다.

큐브를 처리 할 때 SQL 서비스는 행복하게 8GB의 RAM을 사용하지만 그에 대한 압박이 없기 때문에 정상적인 하루 동안 많은 부분이 해제되지 않습니다. Windows 사람들은 비명을 지르며 SQL을 출시하는 것이 훨씬 좋습니다.

최대 메모리 설정을 사용하고 싶지 않습니다. 실제로 처리 할 때 SQL이 많은 RAM을 사용하기를 원하기 때문입니다. 나중에 다시 내려 가기를 원합니다.

SQL Server 에서 메모리를 해제하지 않고 SQL Server에서 메모리회수 하는 SQL Server 의 복제본 일 가능성이 있지만 다른 대답이 있는지 궁금합니다. Windows가이를 되 찾을 때까지 Windows 사용자를 설득하지는 않습니다. 서비스를 다시 시작하는 것은 선택 사항이지만 실제로 그 아이디어의 팬이 아닙니다.

Windows에서 다시 요청하는 방법을 알고 싶습니다 ...


2
시스템 관리자가 사용중인 RAM에 대해 불평하는 것은 무엇입니까? RAM을 사용하지 않을 때는 똥이납니다. 사용하지 않으면 낭비 될뿐입니다 ...
Mark Henderson

기계에 메모리가 필요하지 않은 경우에도 얻지 못합니다. 문제는 어디에 있습니까? 유휴 SQL 서비스가있는 작업로드가 다른 메모리를 필요로 할 때 대부분의 메모리를 유지한다는 점을 감안할 때 운영 체제와 응용 프로그램이 정상적으로 작동하는 방식은 다음 SQL 작업의 응답 시간 및 / 또는 성능을 향상시킬 수 있습니까?
Oskar Duveborn 8 :

Windows 관리자는 프로세스에 RAM이 너무 많기 때문에 SQL이 시스템에 스트레스를주고 있다고 생각합니다. 상자가 SQL의 스트레스를받지 않는다는 것을 알고 SQL 서비스를 다시 시작하여 SSAS 처리를 위해 데이터를 가져올 때 많은 RAM을 소비한다는 것을 보여줌으로써 상자를 보여줄 수 있습니다. 그래서 SQL이 나머지 하루 동안 사용하는 RAM의 양을 보여주기 위해 SQL이 메모리를 해제하기를 원합니다. 더 많은 RAM을 제공하는 것이 아니라 SQL에 대한 비난을 멈추게합니다.
Rob Farley

2
Farseeker와 함께 sysadmin은 RAM을 사용하고있는 것을 기쁘게 생각합니다. 교정되지 않으면 서버가 필요하지 않습니다. sysadmin에게 페이지 오류를보고 시스템에 스트레스가 없음을 보여달라고 요청하십시오.
Nick Kavadias

2
sysadmin이 Page Faults가 무엇을 나타내는 지 이해하지 못하고 왜 메모리가 소비되었지만 실제 Page Fault가 발생하지 않는지 문제가되지 않는다면, 어떻게 도와야할지 모르겠습니다. 당신은 바보를 고칠 수 없습니다. 그러나 할 수있는 한 가지는 sp_configure 를 사용하여 시스템을 사용하지 않을 때 max memory down을 구성하고 필요할 때이를 백업하는 것입니다. 그러나 이것은 꽤 어리석은 것처럼 보입니다. sp_configure일반적으로 한 번 설정하고 혼자 두어야합니다.
베이컨 비트

답변:


12

유일한 선택은 SQL 서비스를 다시 시작하거나 많은 메모리를 소비하는 응용 프로그램을 실행하여 SQL을 강제로 해제하는 것입니다.

@Nick Kavadias의 제안을 좋아합니다. Memory : Page Faults / Sec 성능 카운터를 모니터링하여 SQL이 OS의 메모리를 압박하지 않았 음을 보여줍니다.


2
Thanks Mitch ... 메모장 용 10GB 텍스트 파일을 찾아 보겠습니다.
Rob Farley

lol !, 사실 그것은 나쁜 생각이 아닙니다!
Mitch Wheat

아마 2GB 파일을 사용할 수도 있습니다.
Mitch Wheat

5

그들에게 그렇게 할 것을 보여주는 한 가지 방법은 SQL Server가 모든 메모리를 씹는 것입니다. 그런 다음 네트워크를 통해 큰 파일을 복사하십시오 (큰 SQL 백업 파일은이 작업에 효과적입니다). 이로 인해 시스템 캐시가 채워지고 Windows에서 메모리에 대한 SQL을 요청하기 시작합니다. SQL은 최소 메모리 설정에 도달 할 때까지 메모리를 OS로 다시 리턴하기 시작합니다.

(죄송 합니다만 트위터를 통해 전체 질문을 얻지 못했습니다. 분명히 140 자 이상이 필요했습니다.)


1
버퍼를 정리하고 삭제 한 후에 SQL에 메모리를 요구하지만 SQL을 수행하기 위해 상자를 절일 필요없이 사용할 수있는 프로세스를 원합니다.
Rob Farley

다른 방법을 통해 문제를 강요하지 않고 Windows 메모리 관리자가 메모리를 다시 요청하도록 할 수있는 방법이 없다고 생각합니다. 아마도 win32 API에 직접 도달하는 것을 작성할 수는 있지만 Windows를 메모리를 다시 요청하도록 트리거하는 유일한 방법은 다른 프로세스에 더 많은 메모리가 필요하다는 것입니다. Bob 또는 Paul에게 자세한 정보가있을 수 있습니다.
mrdenny

3
VMware의 벌룬 드라이버는이 작업을 정확하게 수행합니다. SQL Server (또는 다른 응용 프로그램)가 메모리를 포기하도록 Windows에 더 많은 메모리를 요구합니다.
브렌트 오자르

그래, 나는 그런 일을하지 않아도되기를 바랐다.
Rob Farley

VMware의 ballon 드라이버 인 @BrentOzar는 실제 프로세스 메모리가 아니라 시스템 캐시 에서만 메모리를 회수 합니다. OS에 "사소한 일에 사용 가능한 모든 메모리를 사용하지 마십시오"라고 알려주는 방법으로 설계되었습니다.
Massimo

2

'큐브'에 대해 언급 했으므로 AS 엔진 또는 관계형 엔진에 대해 이야기하고 있는지 명확하지 않습니다. 관계형 엔진은 요청시 메모리를 확보 할 수 있습니다.

DBCC FREESYSTEMCACHE('<cache name>');

여기서 '캐시 이름'은 sys.dm_os_memory_clerks 에서 가져옵니다 . DBCC FREESYSTEMCACHE 의 스펙은 거버너 풀만 언급하지만 실제로 더 많은 캐시를 제거 할 수 있습니다.

그러나 버퍼 풀에서 모든 메모리를 사용하는 경우 전체 버퍼 풀을 제거하면 성능이 크게 저하되고 IO로드가 크게 증가합니다. SQL이 이것을 스스로 처리하도록하십시오.


1
안녕하세요 Remus, 관계형 버퍼 캐시는 큐브 처리 후 크기가 큽니다. 그 후 캐시를 정리하고 삭제하고 메모리를 Windows로 반환하려고합니다. DBCC DROPCLEANBUFFERS 및 FREESYSTEMCACHE는 캐시를 비우지 만 메모리를 Windows로 반환하지 않으므로 완전히 원하는 것은 아닙니다.
Rob Farley

2
이론적으로 메모리 압력을 위조 할 수 있습니다 (예 : QueryMemoryResourceNotification msdn.microsoft.com/en-us/library/aa366799%28VS.85%29.aspx ). 정말 실제로 거기에 가지 않을 것입니다. SQL이 커밋 된 메모리를 해제하지 않으면 OS에 필요하지 않기 때문입니다. SQL은 호스트에서 유일한 애플리케이션이기 때문에 OS에 메모리가 필요하지 않습니다 ( stackoverflow.com/questions/1401834/… )? SQL을 따라 다른 응용 프로그램을 실행하면 응용 프로그램이 나옵니다.
레무스 루사 누

2

AS 및 DS 엔진을 사용하면 메모리에 제한을 두어 안전한 임계 값 아래로 유지할 수 있습니다. 이는 많은 RAM 및 / 또는 여러 SQL 인스턴스가있는 64 비트 시스템에서 권장됩니다. 적어도 데이터베이스 엔진의 경우 메모리 캡을 현재 사용량 이하로 변경하면 서비스를 다시 시작하지 않고도 즉시 메모리 양이 줄어들지 만 SSAS는 확실하지 않습니다.


모자를 쓰는 것은 괜찮지 만 처리 후 최대 메모리를 아래로 내리고 버퍼를 청소하고 떨어 뜨리고 Windows에 약간의 메모리 압력을 요청하면 다시 밀어 내고 싶습니다.
Rob Farley

1

내가 찾은 가장 쉬운 것은 서버 메모리 속성으로 이동하여 더 작은 값을 입력하고 적용하고 몇 분 기다린 다음 구성을 다시 조정하는 것입니다.

우리는 또한 스로틀 링 SQL 서버 메모리 사용으로 인해 캐싱 등에 더 많은 램을 제공하기 때문에 실제로 서버의 성능을 향상시킬 수 있음을 발견했습니다.

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