Database/MS-SQL

[스크랩] TYPE:Error EVENT:7886 클라이언트에 데이터를 보내는 동안 큰 개체에서 읽기 작업이 실패했습니다.

99iberty 2017. 1. 25. 16:04


http://bluejini.co.kr/244


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; 를 제거 후 해결 되었다.