1. SQL Error Log 발생한 에러
2012-11-27 17:16:55.590 spid3477 Error: 7886, Severity: 20, State: 1.2012-11-27 17:16:55.590 spid3477 A read operation on a large object failed while sending data to the client. A common cause for this is if the application is running in READ UNCOMMITTED isolation level. This connection will be terminated.
[그림 1-1]
- 어떤 쿼리(프로시저) 에서 발생하는 에러 인지를 찾기 에러가 주로 발생하는 시간 주기적 (15분 ~ 20분 사이) 발생하여
발생 후 10분 뒤부터 10분 동안 sp_trace_create 를 사용하여 Trace 수집
- SQL Error Log 시간대의 TRC 파일 비교 분석 하여 에러 원인 분석
- 원인 및 해결 방법
[그림 1-2]
이 프로저의 에서 호출하는 1개의 ROW Image 데이터 형식으로 라는 marshaled_data 필드를 가지고 있다. [그림 1-1] 601 에러가 먼저 발생 우 Error: 7886, Severity: 20, State: 1 가 발생한것을 알수 있다. [그림 1-2] SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 으로 인해 테이블 접근시 NOLOCK 로 커밋되지 않는 읽기르 우선 데이터를 읽어서 LOB 영역의 marshaled_data 데이터를 읽으려고 했으나 실제 marshaled_data 필드에 접근해 보니 일부 데이터의 위치가 변경되어 데이터를 찾지 못하게 되어 클라이언트에 데이터를 보내는 동안 큰 개체에서 읽기 작업이 실패 하게 되었고 클라이언트와 연결이 종료 된것으로 에러가 SQL LOG 에 찍히게 된것이다.
해결 방법은 프로시저에 적용 하였던 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 를 제거 후 해결 되었다.
'Database > MS-SQL' 카테고리의 다른 글
[스크랩] SELECT가 deadlock (0) | 2017.03.06 |
---|---|
[스크랩] 로그백업을 해도 로그 shrink가 안 되는 이유? (0) | 2017.02.02 |
[스크랩] MSSQL 에러로그 남기지 않기 (0) | 2017.01.18 |
[스크랩] 라이센스 키 확인하기, 교체하기 (0) | 2017.01.16 |
[스크랩] sp_lock, sys.dm_os_wait_stats(Transact-SQL) (0) | 2016.11.22 |