반응형
CRL 사용 환경의 메모리 누수
- App Domain Unload due to Memory Pressure
- Version: SQL Server 2005, 2008R2
[문제 발생]
l SQLServer Log에 unload memory pressure 오류 로그 남음.(특히 전체 백업 이후)
l Memoryunload 발생시 간헐적 CPU 증가 현상 발생
[원인]
- CLR을 사용하는 SQL Server 환경에서 가비지 수집 핸들 해제 오류 가능성.
- 실제 메모리부족 현상 가능성.
- 인터넷 검색결과 여러 커뮤니티에서 해당 이슈 제기
- http://social.msdn.microsoft.com/Forums/sqlserver/en-US/7e36aa04-00ce-46a8-9a29-f63f4ac3b6b5/appdomain-unloads-due-to-memory-pressure
- http://www.sql-server-performance.com/forum/threads/app-domain-is-marked-for-unloaded-due-to-memory-pressure.26217/
- http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=117839
- 대부분의커뮤니티에서는 SQL Server 2005에서 발생 하였는데 이번 케이스의 경우는 SQL Server 2008R2에서 발생.
[해결 방법]
- 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은 성능 향상을 위해 코드에서 실행을 완료한 후 소멸되지 않고 나중에 실행하도록 메모리에 캐시한다.
[참고 자료]
- sys.dm_clr_appdomains : http://msdn.microsoft.com/ko-kr/library/ms187720.aspx
반응형
'SQL Server > SQL Server Tip' 카테고리의 다른 글
TCP Provider: The semaphore timeout period has expired (0) | 2015.07.21 |
---|---|
SQL Server 연결 실패 (0) | 2015.07.21 |
Windows8 에서 TFS 2012 Express 오류 (0) | 2015.07.21 |
WindowsServer 2012 Hyper-V 와 특정 NIC의 VMQ 이슈 (0) | 2015.07.21 |
인덱스 튜닝을 통한 DB 성능 향상 (0) | 2015.07.21 |