2011-04-19 5 views
0

SQL Server 2008 R2를 사용하고 있으며 수백만 개의 레코드를 실행하고 변환하는 데 몇 시간이 걸리는 변환을 VB.NET으로 작성했습니다. 트랜잭션을 롤백하는 프로세스를 취소해야하는 경우가 있습니다. 그럴 때 롤백하는 데 몇 시간이 걸리지 않기를 바랍니다.많은 양의 레코드가 포함 된 변환에 대한 트랜잭션 격리 수준을 설정하는 방법

따라서 트랜잭션을 모두 제거하여 롤백 할 시간이 없지만 모든 레코드를 원래 상태로 둡니다. 그러나 나는 수백만 개의 레코드가있는 하나의 테이블을 가지고있다. 나는 시작할 모든 기록을 삭제합니다. 모든 기록을 삭제하는 데 몇 시간 걸립니다. 테이블의 RowCount를 보면 0이됩니다. 모두 삭제 된 것처럼 보이지만 뭔가를 기다리고 있으며 무엇을 알아 내지 못합니다. READ UNCOMMITTED의 분리 레벨을 가진 트랜잭션에 DELETE 명령을 넣는 것이 도움이되기를 바랍니다.

몇 시간이 걸리기 때문에 많은 시도를하기 전에 많은 양의 데이터에서 트랜잭션 격리 수준에 대한 최적의 방법에 대한 의견을 듣고 싶습니다. 또한, 전체 컨버전을 READ COMMUNICATION의 트랜잭션에 넣으면 프로세스를 취소해도 시간이 걸리지 않을 것이라고 생각하십니까?

답변

2

격리 수준은 롤백 또는 트랜잭션 커밋과는 아무런 관련이 없습니다. 손실 된 업데이트, 팬텀 읽기, 반복 읽기, 더티 읽기 등을 방지하기위한 제어 기능을 제공합니다. 수행하는 데 2 ​​시간이 소요됩니다. .IT 아마

는 SET 기반 방식으로 작성하면 코드가 단순 또는 대량 회복이 빠른 BCP 또는 BULK INSERT를 사용할 때 데이터를 삽입하는 것입니다 않습니다

복구 수준을 롤백 2 시간 걸릴 것 또는 당신은 루핑 악의적 인 커서를 사용하여?

테이블에서 최적화되지 않은 트리거가 있습니까?

는이 최소 기록 또는 때문에 모든 행이 테이블을자를 삭제하려면 배치의 일괄 삭제 처리 예를 들어 10000 또는 그래서 당신은 삭제하지 않는 경우에 나는 악 커서를 사용하지 않는

+0

모든 I 트리거가 없다면, 나는 TRUNCATE TABLE에 대해 몰랐다. TRUNCATE TABLE과 BULK INSERT에 대해 팁 –

+0

+1을 주셔서 감사합니다. – SQLMason

1

나는 수백만 개의 레코드가있는 하나의 테이블을 가지고 있습니다. 나는 시작할 모든 기록을 삭제합니다. 모든 레코드를 삭제하는 데 단지 시간이 걸립니다.

truncate table xxx ----는 테이블 크기에 관계없이 몇 초의 시간이 필요합니다.

는 몇 시간이 걸릴 것이기 때문에 내가 이것을 시도하기 전에 데이터의 큰 양의 트랜잭션 격리 수준을위한 가장 좋은 방법은 무엇인지에 대하여 의견을 얻고 싶었다.

데이터 마운트 및 필요에 따라 다릅니다. 일반 답변 없음. 하지만 데스크톱 레벨이 아닌 하드웨어가 있으면 도움이됩니다. 데이터베이스 서버 (즉 1-2 디스크가 아닌 꽤 많은 디스크)에서 몇 분 안에 delete 문에서 2-5 백만 행을 처리하는 데 문제가 없습니다. 내가 READ의 트랜잭션에서 전체 변환을 넣어 내가 프로세스를 취소하는 경우가 어떤 시간을 갖지 것 커밋되지 않은 경우에도

, 당신은 생각하십니까?

아니요. SQL Server가 최적화되어 있지 않아 지금까지 수행 된 모든 변경 사항을 롤백해야하므로 롤백에 시간이 걸립니다.

관련 문제