2013-11-15 3 views
1

insert 문은 다른 테이블의 select 문에서 가져온 문이 있습니다. 따라서 많은 레코드가 한 번에 삽입됩니다. 단일 레코드를 삽입하는 데 필요한 다른 프로세스가 있습니다. 단일 삽입 문을보다 신속하게 실행할 수 있도록 SQL Server를 얻으려면 어떻게합니까? 내 견해로는, 여러 개의 인서트가 실행되는 동안 꽤 오랫동안 하나가 차단됩니다. 단 하나가 "안으로"미끄러질 수 있던 경우에 좋을. 삽입물에 WITH (ROWLOCK)을 추가하려고했습니다.여러 개의 삽입 문이 하나의 문을 차단합니다.

+0

두 프로세스가 올바른 순서로 시작하도록 타이밍을 제어 할 수 있습니까? 그렇지 않으면 상황을 그대로 작동시키는 것이 가장 좋습니다. 등 코드 표 B 및 제 과정 FROM 표 A SELECT * INTO INSERT 같은 뭔가가 표 A 값으로 INSERT 같은 일을하고 있습니다 – Szymon

+0

주 테이블 기반 삽입에 의해 차단됩니다. – SK2185

+0

코드 (val1과를 vale2가) 는 단일 삽입은 – BrianK

답변

1

대량 삽입이 테이블 잠금으로 확대 될 수 있습니다. 테이블 DDL을 LOCK_ESCALATION=DISABLE으로 변경하면 테이블 잠금을 줄일 수 있지만 대량 삽입 성능이 저하 될 수 있습니다.

다른 방법으로는 INSERT/SELECT INTO 대량을 다시 작성하여 배치에 삽입하여 5000 locks at a time. 이상을 차지하지 않도록 할 수 있습니다. 그러나 이것은 각 작업 단위의 범위를 변경하게 될 것입니다. 이제는 작은 배치 각각을 커밋 할 것이므로 바람직하지 않을 수 있습니다.

+1

나는 묶음으로 부서지다. 그것이 다른 프로세스가 적시에 레코드를 삽입 할 수있는 유일한 방법이었습니다. – BrianK

관련 문제