none
SQL Server Memory 최대 값 제한을 두었지만 초과해버렸습니다. RRS feed

  • 질문

  • 우선 환경은 SQL Server 2008 Cluster 환경입니다.

    SQL Server 메모리 최대 값을 28GB 로 지정하고 재부팅후 사용하고 있었는데

    얼마 전에 보니 작업관리자에서 메모리가 91% 치는 것을 보고 성능표를 봤더니 SQL Server 가 32GB를 사용하고 있습니다.

    최대 값을 초과해버렸습니다.

    왜 그런건지 궁금합니다.

    2015년 8월 25일 화요일 오전 5:04

답변

  • 안녕하세요.

    성능표라고 하면 어떤 값을 얘기하는 건가요?

    혹시 성능 카운터 SQLServer:memory Manager의 Target Server Memory나 Total Server memory인 건가요?

    일단 MAX Server 메모리를 설정해두어도 SQL Server는 그외의 메모리도 사용하게 됩니다.

    예를 들어서 worker thread 메모리나 확장 저장 프로시저, CLR 등이 있을 수 있습니다.

    질문주신 내용대로라면 SQL Server가 worker thread 메모리나 확장 저장 프로시저, CLR 등으로 4GB정도 메모리를 사용하고 있을 가능성이 있구요.

    성능표에 대해서 좀 더 설명해주시면 도움이 될 듯 싶습니다.

     

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    2015년 9월 1일 화요일 오후 1:04
  • 첨언을 조금 하겠습니다. (쉽게 이해하시도록 표현을 좀 풀겠습니다)

    SQL Server에 지정하시는 최대 메모리는 'Buffer Pool' 이라는 불리는 메모리에 대한 제한값을 설정하는 동작입니다.

    Buffer Pool안에는 DB에서 필요한 일반적인 메모리 구성 요소들(Table, Index, Plan Cache, 등등)로 구성이 되며

    이 메모리들은 SQL Server가 직접 관리하는 메모리 형식을 가집니다.

    그런데 좀 다른 메모리들도 사용을 하게 된는데, 그게 김영건 님이 답변주신 Worker(thread), OLEDB, CLR 등등입니다.

    결국 SQL Server에 지정하는 최대 메모리는 그런 메모리 크기를 모두 제하고 나머지 Buffer Pool용으로만 지정을 하시는 겁니다.

    도움이 되시면 좋겠네요.


    Best Regards, Jungsun Kim

    2015년 9월 1일 화요일 오후 5:04
    중재자
  • 안녕하세요! 추가로 첨언을 드리자면..

    32GB의 메모리에 28GB 는 너무 큰 수치를 입력하셨습니다.

    보통은 60%정도(19456 MB = 19GB)로 설정을 하시면 됩니다. 그리고 Memory\Available Mbytes  값을 꾸준히 관찰 하시면 됩니다.

    예를들어 19기가로 설정했지만 Available Mbytes 값이 최소 10기가정도라면..

    추가로 6기가 추가하고.. 또 추이를 지켜보고.. 늘려가는 형태가 좋습니다.

    그리고 최소 2~4기가는 남아있어야 합니다.

    감사합니다 ^^

    2015년 9월 2일 수요일 오전 12:42

모든 응답

  • 안녕하세요.

    성능표라고 하면 어떤 값을 얘기하는 건가요?

    혹시 성능 카운터 SQLServer:memory Manager의 Target Server Memory나 Total Server memory인 건가요?

    일단 MAX Server 메모리를 설정해두어도 SQL Server는 그외의 메모리도 사용하게 됩니다.

    예를 들어서 worker thread 메모리나 확장 저장 프로시저, CLR 등이 있을 수 있습니다.

    질문주신 내용대로라면 SQL Server가 worker thread 메모리나 확장 저장 프로시저, CLR 등으로 4GB정도 메모리를 사용하고 있을 가능성이 있구요.

    성능표에 대해서 좀 더 설명해주시면 도움이 될 듯 싶습니다.

     

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com

    2015년 9월 1일 화요일 오후 1:04
  • 첨언을 조금 하겠습니다. (쉽게 이해하시도록 표현을 좀 풀겠습니다)

    SQL Server에 지정하시는 최대 메모리는 'Buffer Pool' 이라는 불리는 메모리에 대한 제한값을 설정하는 동작입니다.

    Buffer Pool안에는 DB에서 필요한 일반적인 메모리 구성 요소들(Table, Index, Plan Cache, 등등)로 구성이 되며

    이 메모리들은 SQL Server가 직접 관리하는 메모리 형식을 가집니다.

    그런데 좀 다른 메모리들도 사용을 하게 된는데, 그게 김영건 님이 답변주신 Worker(thread), OLEDB, CLR 등등입니다.

    결국 SQL Server에 지정하는 최대 메모리는 그런 메모리 크기를 모두 제하고 나머지 Buffer Pool용으로만 지정을 하시는 겁니다.

    도움이 되시면 좋겠네요.


    Best Regards, Jungsun Kim

    2015년 9월 1일 화요일 오후 5:04
    중재자
  • 안녕하세요! 추가로 첨언을 드리자면..

    32GB의 메모리에 28GB 는 너무 큰 수치를 입력하셨습니다.

    보통은 60%정도(19456 MB = 19GB)로 설정을 하시면 됩니다. 그리고 Memory\Available Mbytes  값을 꾸준히 관찰 하시면 됩니다.

    예를들어 19기가로 설정했지만 Available Mbytes 값이 최소 10기가정도라면..

    추가로 6기가 추가하고.. 또 추이를 지켜보고.. 늘려가는 형태가 좋습니다.

    그리고 최소 2~4기가는 남아있어야 합니다.

    감사합니다 ^^

    2015년 9월 2일 수요일 오전 12:42