데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

AppDomain unloading 오류 로그 – CLR 오류

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server를 운영할 때 SQL Server에서 지원하지 않는 기능을 어플리케이션으로 구현한 다음 SQL Server에서 로드해서 쓰는 경우가 많다. 일반적으로 CLR이라 불리는 기능으로 CLR 호출 시 발생하는 오류에 대해서 알아 보자.

 

이번 포스트는 CSS SQL Server Engineer 블로그에 게시된 내용으로 필자가 읽고 이해한 내용을 정리하였으며 번역의 오류나 기술적 오류가 있음을 미리 알려둔다. 자세한 내용은 원문을 참고하길 바란다.

 

SQL Server 오류 로그에 다음과 같은 내용이 기록되어 있었다.

...
2013-01-22 08:07:44.91 spid37s AppDomain 890288 (mssqlsystemresource.dbo[ddl].890287) unloaded.
2013-01-22 08:07:45.73 spid31s AppDomain 890289 (mssqlsystemresource.dbo[ddl].890288) unloaded.
2013-01-22 08:07:46.41 spid34s AppDomain 890290 (mssqlsystemresource.dbo[ddl].890289) unloaded.

...

 

도메인 이름은 항상 같은 것으로 도메인 이름은 데이터베이스와 개체 소유자를 기반으로 로드될 때마다 생성ID가 주어진다. 위의 패턴은 SQL Server가 MSSQLSYSTEMRESOURCE(DBO) 응용프로그램을 언로드한지 890000 시간을 나타낸다.

 

도메인이 로드되고 초기화될 때까지 SQL Server는 응용프로그램 도메인에 로드된 메시지를 기록하지 않는다.

 

DMV sys.dm_os_ring_buffers에서 시스템 변경에 관한 정보를 확인 할 수 있다.

select * from sys.dm_os_ring_buffers

 

Ring_buffer_type : RING_BUFFER_CLRAPPDOMAIN

 

Ring_buffer_type : RING_BUFFER_EXCEPTION

SQL Server에서 사용자 정의 오류 조건의 대부분을 처리하는 c++ 예외 유형(SQL 예외)이다. 예외 코드는 메이저와 마이너로 구성되며 형식은 메이저 * 100 + 마이너 빌드 코드로 sys.messages로 제공된다.

 

3617 에러는 메이저 36과 마이너 17로 구성된 것이다.

 

응용프로그램 도메인이 초기화 하는 동안 취소와 관련된 스택은 다음과 같다.

sqlservr!clr_ex_raise <------- Major = 36, Minor = 17
sqlservr!CAppDomain::CreateManagedDomain
sqlservr!CAppDomain::InitExpensive
sqlservr!CAppDomainManager::GetAppDomain
sqlservr!CCLRHost::GetAppDomain
sqlservr!CAssemblyMetaInfo::GetAppDomainForVerification
sqlservr!CAssemblyMetaInfo::CreateClrInterfaces
sqlservr!CAssemblyMetaInfo::InitClrInterfaces
sqlservr!CAssemblyMetaInfo::LoadAssemblyFromDatabase
sqlservr!CAssemblyMetaInfo::LoadAssemblyFromDatabase

 

CLR_APPDOMAIN 관련 링버퍼 스택 프레임이며 언로드가 발생한 위치를 확인 할 수 있다.

sqlservr!AppDomainRingBufferRecord::StoreRecord+0x9c
sqlservr!CAppDomain::StateTransition+0xcf
sqlservr!CAppDomainManager::AppDomainStateTransitionLockHeld+0xa5
sqlservr!CAppDomainManager::AppDomainStateTransition+0x30
sqlservr!CAppDomain::UnloadManaged+0x22
sqlservr!CAppDomain::Release+0xd3
sqlservr!CAutoRefc<CAppDomain>::~CAutoRefc<CAppDomain>+0x914a3f
sqlservr!CAssemblyMetaInfo::CreateClrInterfaces+0x135
sqlservr!CAssemblyMetaInfo::InitClrInterfaces+0x7b
sqlservr!CAssemblyMetaInfo::LoadAssemblyFromDatabase+0x144
sqlservr!CAssemblyMetaInfo::LoadAssemblyFromDatabase+0xa2
sqlservr!ResolveUdf+0x2c4
sqlservr!CAlgUtils::TrpGetExpressionPropsAlg+0x523
sqlservr!CAlgUtils::TrpGetExpressionPropsWithHandler+0x112
sqlservr!udf::FBindObject+0x5d
sqlservr!udf::FBind+0x2b3

 

 

간단히 정리하면 SQL Server 에러로그에 AppDomain 이라는 메시지는 CLR을 사용할 때 해당 CLR이 등록되어 있지 않거나 로드하지 못하여 발생하는 문제이다.

 

추가로 CLR사용시 메모리 누수에 관한 이슈도 함께 보면 좋을 듯 하다.

 

 

[참고자료]

http://blogs.msdn.com/b/psssql/archive/2013/01/30/appdomain-unloading-messages-flooding-the-sql-server-error-log.aspx

 

 


강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
1891 확장이벤트와 dm_os_wait_stats 대기유형 매핑 jevida(강성욱) 2016.10.11 1890
1890 장기 트랜잭션 확인 및 경고 설정 jevida(강성욱) 2016.10.11 1423
1889 SQL 데이터 수집툴 DiagManager 사용법 jevida(강성욱) 2016.10.11 1321
1888 Windows Server 2012 R2 그룹 관리 서비스 계정 및 SQL 서버 jevida(강성욱) 2016.10.11 1833
1887 Kerbros 구성 관리자 툴 jevida(강성욱) 2016.10.11 1161
1886 SQL Server Geography 및 Geometory 데이터 형식 jevida(강성욱) 2016.10.11 2392
1885 SQL Server를 이용한 신용카드 보안 -조직이 PCI DSS 준수를 달성 하기 위한 요건 jevida(강성욱) 2016.10.11 1364
1884 TDE 암호화 사용하기 jevida(강성욱) 2016.10.11 3308
1883 SQL Server 암호화 하기 jevida(강성욱) 2016.10.11 2735
1882 의도하지 않은 분산트랜잭션 사용 jevida(강성욱) 2016.10.11 877
1881 Affinity I/O Mask jevida(강성욱) 2016.10.11 1168
1880 LPE_BATCH 스핀락 jevida(강성욱) 2016.10.11 882
1879 SQL Server 17953 오류 jevida(강성욱) 2016.10.11 984
1878 SQL 연결 18056 오류 jevida(강성욱) 2016.10.11 1362
1877 SQL 2008 R2 Sp1 적용과 9013 오류 - 포맷 섹터 크기에 따른 오류 jevida(강성욱) 2016.10.11 1809
1876 JDBC 로깅 파일 위치 설정 jevida(강성욱) 2016.10.11 958
1875 NUMA Node 메모리 블록 jevida(강성욱) 2016.10.11 1046
» AppDomain unloading 오류 로그 – CLR 오류 jevida(강성욱) 2016.10.11 1187
1873 SQL Server IO and Latch 설명 jevida(강성욱) 2016.10.11 3172
1872 마지막 백업 시간 및 DBCC 확인 [1] jevida(강성욱) 2016.10.08 1591





XE Login