SQL Server 인스턴스용 Windows Server 2019에서 메모리를 확보하시겠습니까?

SQL Server 인스턴스용 Windows Server 2019에서 메모리를 확보하시겠습니까?

64GB 메모리를 갖춘 Windows Server 2019 Standard(x64)가 있습니다.

아래 스크린샷은 96%의 메모리 사용량을 보여줍니다.SQL 서버 윈도우 NT344.5MB를 실행하고 사용합니다.

여기에 이미지 설명을 입력하세요

서비스 종료 후 작업관리자 입니다.SQL 서버 윈도우 NT. 메모리 사용량이 8%로 감소했습니다.

여기에 이미지 설명을 입력하세요

서비스를 시작해요SQL 서버 윈도우 NT다시. 작업 관리자는 9%로 매우 낮지만 SQL 서버는 메모리 사용량이 96%였을 때보다 지금 더 많은 메모리를 사용하고 있습니다. 여기에 이미지 설명을 입력하세요

두 가지 질문:

  1. 메모리에 무슨 문제가 있는 걸까요?
  2. SQL Server 인스턴스를 다시 시작하지 않고도 메모리 사용량을 낮추려면 어떻게 해야 합니까?

답변1

여기서 중요한 세부 사항이 누락되었습니다. 작업 관리자에서는 SQL Server가 344.5MB의 RAM만 사용하는 것으로 표시되지만 실제로는 자체 사용을 위해 훨씬 더 많은, 거의 모든 RAM을 예약해 두었습니다. 작업 관리자는 이를 표시하지 않습니다. 작업 관리자의 숫자는 예약된 메모리가 표시되지 않기 때문에 실제로 시스템 메모리의 97%까지 추가되지 않습니다.

거의 모든 메모리가 다른 메모리에 사용되어 SQL Server가 344.5MB 이상을 사용할 수 없다는 가정은 완전히 잘못된 것입니다. 이렇게는 작동하지 않습니다. 작업 관리자는 오해의 소지가 있을 수 있으므로 실제 성능 카운터를 살펴보십시오.


더 잘 설명하기 위해 업데이트하세요.

SQL 서버디자인에 의해데이터를 메모리에 캐시하고 시간이 지남에 따라 시스템에서 사용 가능한 메모리를 거의 모두 소모합니다. 그러나 이 메모리는 작업 관리자에 표시되지 않습니다(또는 적어도 전부는 아님). SQL Server는 제대로 작동하려고 시도하고 OS에 "이 정도의 메모리가 필요하지만 캐싱에만 사용되므로 메모리 없이도 살아남을 수 있습니다. 그러니 필요하다면 자유롭게 되찾으세요." 이는 SQL Server가 실제로 예약한 것보다 훨씬 적은 양의 메모리를 사용하는 것으로 작업 관리자에 표시된다는 의미입니다.

이것은결코 아니다문제; 그것은 의도적으로 그리고 의도적으로 이루어졌습니다. 당신이 보고 있는 "문제"는 존재하지 않으며 작업 관리자에 보이는 것만이 오해의 소지가 있습니다.

SQL Server를 중지하면 작업 관리자에 표시되는 메모리와 표시되지 않는 메모리(더 많은 메모리) 모두 할당된 메모리가 모두 해제됩니다. 다시 시작하면 메모리가 거의 사용되지 않습니다. SQL Server가 메모리에 데이터를 로드하고 캐시하므로 시간이 지남에 따라 사용량이 다시 증가합니다. 하지만 이 기억의 대부분은 다시 말하지만~ 아니다해당 특정 도구에서는 볼 수 없기 때문에 작업 관리자에 표시됩니다.

또한 SQL Server가 실제로필요한메모리를 다른 방식으로 할당하고그 다음에작업 관리자가 이를 표시합니다. 실제로 SQL Server가 사용하는 메모리는 60GB입니다.필수의캐싱에만 사용하는 대신 그만큼 많은 메모리를 사용합니다.

답변2

이 컴퓨터에서 SQL Server를 실행하고 있으므로 SQL Server가 수행하는 작업을 수행합니다. 즉, OS에서 사용 가능한 모든 메모리를 (거의) 예약하므로 대규모 쿼리나 기타 작업을 수행할 때 RAM을 할당할 필요가 없습니다. , 이미 가지고 있습니다.

몇 가지 옵션이 있습니다.

  1. 받아들이십시오. 이 머신에서 SQL Server만 실행하고 있다면 의도한 대로 작동하는 것입니다. 그대로 두십시오.
  2. 모자를 씌우세요. 이 서버에서 다른 작업을 실행해야 하는 경우 SQL이 예약할 RAM의 양을 제한할 수 있습니다.

SQL이 흡수하는 RAM을 절대 사용하지 않는 한 옵션 2를 절대 수행하지 않을 것입니다. OS 수준 SQL 성능 카운터와 SQL 수준 동적 관리 뷰를 측정하는 경우에만 이를 알 수 있습니다.

큰 그림에서 실제로 해결하려는 문제는 무엇입니까? 이 시나리오에서 "메모리 확보"는 다른 용도로 메모리를 확보한다는 사실을 알지 못하는 한 무의미한 작업입니다. SQL 성능 문제가 있습니까? 그렇다면 잘못된 인덱스 디자인이나 최적화되지 않은 쿼리 대신 RAM으로 인해 병목 현상이 발생한다는 것을 어떻게 판단했습니까?

내가 당신을 이끌고 있는 것은성능 문제를 진단하려면 적절한 모니터링을 사용하십시오.이를 수행하려면 SQL에 대해 많이 알아야 하고 Windows에 대해서도 어느 정도 알아야 합니다. DBA가 아닌 경우 DBA를 고용하거나 계약을 맺거나, 구입한 제품에 대한 SQL인 경우 소프트웨어 공급업체와 협력하세요. 귀하의 회사가 DBA 없이 자체적으로 작성한 내용이라면, DBA를 구하십시오.

https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/monitor-memory-usage?view=sql-server-ver15

기본적으로 SQL Server 인스턴스는 시간이 지남에 따라 서버에서 사용 가능한 Windows 운영 체제 메모리의 대부분을 소비할 수 있습니다. 메모리가 획득되면 메모리 압력이 감지되지 않는 한 해제되지 않습니다. 이는 의도적으로 설계된 것이며 SQL Server 프로세스의 메모리 누수를 나타내지는 않습니다.

/편집 내용에 따라 편집:

저는 시스템 관리자는 아니지만 Windows에서 다른 모든 항목을 소비하기 때문에 SQL Server가 메모리를 거의 사용하지 않는 것 같습니다.

여기서는 거의 확실히 틀렸습니다. 위에서 언급했듯이 SQL Server는 시간이 지남에 따라 거의 모든 시스템 RAM을 할당합니다. sqlserver.exe 프로세스에서 사용 중인 RAM의 양은 SQL이 실제로 할당한 RAM의 양을 알려주지 않습니다. DMV와 perfcounters가 이를 알려줄 것입니다.

저는 SSMS를 사용하여 데이터베이스 작업을 하고 모든 것이 얼마나 느린지 직접 확인했습니다. 모든 테이블을 보기 위해 테이블 ​​창을 여는 것과 같은 간단한 작업에도 시간이 걸리고 시간이 초과되는 경우도 있습니다.

SQL Server에서 실행하지 말고 워크스테이션에서 실행하세요.

관련 정보