2016-08-03 2 views
1

시간을내어 질문을 읽어 주셔서 감사합니다. 우리는 대용량의 데이터를 처리하는 T-SQL을 사용하는 시스템을 구축했습니다. 이 데이터 처리를 시작하면이 작업을 완료하는 데 보통 약 15 분이 걸립니다. 이 시간 동안 어떤 이유로 데이터베이스의 모든 개체에 잠금 장치가있는 것으로 보입니다. 어느 정도까지는 필자는 작성중인 테이블을 쿼리 할 수 ​​없다는 것을 이해합니다. 또한 SQL Server에서는 개체 탐색기의 테이블 노드에서 F5 키를 사용하여 예를 들어 테이블 목록을 새로 고칠 때 시간 제한 잠금 메시지를 표시합니다. 다음 템플릿을 기반으로모든 테이블을 잠그는 SQL Server Large Transaction

내 코드 작품 :

이제
CREATE PROCEDURE Sample 

as 

SET NOCOUNT, XACT_ABORT ON 

BEGIN TRY 

BEGIN TRANSACTION 

... 

COMMIT TRANSACTION 

END TRY 

BEGIN CATCH 
    BEGIN 
     PRINT 'STORED PROCEDURE - Returned errors while processing' 
     ROLLBACK TRANSACTION 
    END 
END CATCH 

, 나는 이것이 내가 SELECT WITH (NOLOCK) 모든 테이블에 쿼리를 수행 할 수 있습니다 시작할 때. 그러나 뷰, 저장 프로 시저에 대한 정의를 보거나 기본적으로 다른 종류의 작업을 데이터베이스에서 수행 할 수는 없습니다.

나는 이미 READ UNCOMMITTED 격리 수준 설정을 설정했지만 그 차이가없는 것으로 보입니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

종류와 관련,

+0

분리 레벨의 작동 방식을 선택 제표에 영향을 ... 작은 일괄 트랜잭션을 수행하는이 DDL, DML..Locking에 영향을 미치지 않습니다, blockings 큰 주제는 그래서 잠금 blockings를 해결하는 방법에 대한 검색하십시오이다 거기서 시작해. – TheGameiswar

답변

0

당신 TRY의 CATCH 블록에있는 코드는 데이터 업데이트의 큰 금액을 수행한다. 격리 수준을 변경해도 잠금 문제는 해결되지 않습니다. 당신을 위해 무엇이 최선인지

이러한 기본적인 확인/변경을하는 것입니다 :

  • 업데이트를 나누어보십시오/작은 배치에 삽입; 잠금이 크게 줄어들어 물건이 부드럽게 움직입니다.
  • 데이터를 더 빨리 반환 할 수 있도록 업데이트 쿼리에 포함 된 테이블의 인덱싱을 확인하십시오.
0

독점 수준과 관련이없는 문제는 독점적 인 문제입니다.

데이터베이스 레벨까지 잠금 Escalation의 경우입니다.

않도록 단계적 확대가

관련 문제