2017-11-21 15 views
1

문제가 있습니다.Execute 문이 오래 지연됩니다.

2017년 11월 20일 20 : 30 : 10,324 [DEBUG] [] 테이블에 데이터를 저장

2017년 11월 20일 21시 반 나는베이스에서 일부 데이터를 삽입 할 때 나는 긴 지연이 : 28,245 [DEBUG] [] 끝났습니다!

1 시간, Karl!

String query = "INSERT INTO {0}table (id, doc_id, num_doc, amount, unload_date, status) VALUES (?, ?, ?, ?, ?, ?)"; 

pstmt = lib.getConnection().prepareStatement(MessageFormat.format(query, "my_schema")); 
pstmt.setLong(1, id); 
pstmt.setLong(2, docId); 
pstmt.setString(3, numDoc); 
pstmt.setBigDecimal(4, amount); 
pstmt.setDate(5, new Date()); 
pstmt.setInt(6, 0); 
pstmt.execute(); 

이런 일이 발생할 수있는 이유가 있습니까?

+0

prog가 아닌 명령 줄에서 삽입하려고하면 시간이 얼마나 걸립니까? DB의 건강 검진 결과는 무엇입니까? – Ravik

+0

또한 삽입이 실행되는 동안 sp_who를 통해 다른 프로세스를 확인하고 다른 spid 수정 데이터에 의해 차단되고 있는지 확인하십시오. 일부 SQL 클라이언트는 기본적으로 'autocommit off'로 실행될 수 있습니다. 이는 사용자가 입력을 차단할 수있는 것을 인식하지 못하고 테이블에 잠금을 남길 수 있음을 의미합니다. –

답변

0

쿼리가 느리게 실행되는 경우 쿼리가 isql과 같은 다른 클라이언트에서도 실행되고 있는지 확인하는 것이 좋습니다.

두 번째 단계는 isql이 로컬에서 실행될 때 다소 네트워크 관련이 있는지 확인하고 삽입이 느려지는 것입니다.

쿼리가 여전히 느린 경우 다음이 될 수 같은 데이터베이스 관련 느린 디자인 : 나는 설정으로 삽입을 실행하는 것 열에

  • 인덱싱되지 않은 외래 키
  • 느린 트리거

set statistics io on 
set statement_cache off 

그리고 I/O 수가 적은지 확인하십시오. 대형 스캔이 처리되면 정보로 이어집니다.

위의 작업이 아닌 경우 데이터베이스 대기 이벤트로 인해 작업이 느려지는지 확인해야합니다. 대기 이벤트를 조사하려면 다음 코드를 실행하십시오.

select * from master..monProcessEvents where SPID = @@SPID 

추가 MDA 구성이 필요할 수 있습니다. 쿼리는 어떤 이벤트로 인해 작업이 느리게 진행되는지에 대한 정보를 표시합니다.