SQL Server/SQL Server Tip

CRL 사용 환경의 메모리 누수

SungWookKang 2015. 7. 21. 08:50
반응형

CRL 사용 환경의 메모리 누수

-      App Domain Unload due to Memory Pressure

   

-      Version: SQL Server 2005, 2008R2

   

[문제 발생]

l  SQLServer Log에 unload memory pressure 오류 로그 남음.(특히 전체 백업 이후)

l  Memoryunload 발생시 간헐적 CPU 증가 현상 발생

    

   

[원인]

   

   

[해결 방법]

  • SQLServer 2005를 사용하는 경우 핫픽스 적용 : http://support.microsoft.com/kb/917271
  • CLR을 사용하는코드(C# 응용 프로그램)의 가비지 핸들 강제 호출. (적용)
  • 메모리 사용량확인 후 실제 메모리 증설. (적용)

   

[적용 후 결과]

  • CLR코드 수정 후 간헐적 unload 발생 (빈도는낮아 졌음)
  • CPU튀는 현상 사라짐.

   

[CLR개체 특성]

CLR 개체가 실행될 때마다 SQL Server에서는 필요한 코드를 로드 및 실행할수 있는 AppDomain을 생성한다. AppDomain에 대한 격리 수준은 소유자마다 데이터베이스당 하나의 AppDomain이다. 즉, 사용자가 소유한 모든 CLR 개체는항상 동일한 데이터베이스별 AppDomain에서 실행된다. 사용자가 CLR 데이터베이스 개체를 다른 데이터베이스에 등록할 경우 CLR 데이터베이스개체는 다른 응용 프로그램 도메인에서 실행된다. AppDomain은 성능 향상을 위해 코드에서 실행을 완료한 후 소멸되지 않고 나중에 실행하도록 메모리에 캐시한다. 

 

  

[참고 자료]

반응형