안녕하세요.
현재 메모리 사용 제한을 걸어두고 서비스를 하고 있습니다.
시스템 램은 2GB이고 IIS가 같이 돌고 있어서 메모리 상한을 1GB로 잡아둔 상태입니다.
문제는 서비스 자체가 복잡한 쿼리들이 많아서 상한까지 찬다는 것인데요.
상한이전의 쿼리들은 캐싱이 되서 빠르겠지만 그 이후의 쿼리들은 캐싱이 안되는 문제가 발생하더군요.
이때 DISK I/O가 발생이 되어 퍼포먼스가 현저히 저하되는 문제가 발생이 됩니다.
제 생각엔 상한까지 다 차있는 상태에서 새로운 쿼리를 날리면 처음이니 좀 느릴테고...
이 때 메모리에서 쓰지 않거나 시간적으로 이전의 페이지들을 릴리즈 하고 새로 들어온 쿼리를 캐싱해야 맞는거 같은데
실제 테스트 결과는 그렇게 동작하지 않는 것 처럼 보이더군요.
제가 해본 항목은 다음과 같습니다.
MIN : 0, MAX : 1GB -> 0~1GB 사이에 다이나믹하게 할당
MIN : 1GB, MAX : 1GB -> MSDN에서 MSSQL2005에서는 이렇게 하면 고정이라고 본것 같습니다.
둘다 결과는 동일합니다. ㅜㅜ;
OS차원에서 메모리 반환을 요청해야 돌려준다는데 뭐 1GB만 잡아놨으니 나머지 1GB로 어플들은 잘 돌고 있는 상황입니다.
어떻게 처리를 해야할까요? |