2012-08-22 3 views
0

매일 데이터베이스로 데이터를 가져 오는 SSIS 패키지가 있습니다.데이터를 삽입하고 동시에 데이터를 쿼리하는 표준 프로토콜

사람들이 동시에 데이터베이스를 쿼리하는 경우가 있습니다.

특정 테이블에 테이블 잠금이 있으므로로드하는 중 (데이터 가져 오기) 시간이 초과됩니다.

동시에 데이터를 삽입하고 데이터를 쿼리하는 표준 프로토콜은 무엇입니까?

+0

모두 데이터 및 비즈니스 규칙에 따라 다릅니다. 표준 프로토콜이 없습니다. 그건 테이블 잠금 장치를 가져가는 것이 꽤 극단적이라고 말했습니다. 그들은 좋은 이유가 있어야합니다. 나는 그 시간 동안 테이블을 업데이트하는 유일한 프로세스 인 것으로 의심되거나 (또는 ​​예상) 테이블 락만 취한다. 페이지 잠금은 전체 테이블을 종료하지 않고 성능을 더 잘 혼합 한 것입니다. – Paparazzi

+0

@Blam은 SSIS 프로세스가 필연적으로 테이블 잠금을 사용하지 않는다고 말하고 있습니까? –

+0

죄송합니다. 제가 읽는 방식은 패키지가 아닌 다른 것으로 테이블 잠금 장치였습니다. 테이블 자물쇠가 포장에서 나옵니까? 그렇다면 내 의견을 삭제할 것입니다. – Paparazzi

답변

2

몇 가지 전략이 있습니다.

한 가지 방법은 잠금 시간을 최소화하도록 ETL 파이프 라인을 설계하는 것입니다. 모든 데이터는 스테이징 테이블에서 준비되고 완료되면 빠른 파티션 전환 작업을 사용하여 전환됩니다 (Transferring Data Efficiently by Using Partition Switching 참조). 이렇게하면 ETL 블록은 매우 짧은 기간 동안 onyl을 읽습니다. 또한 읽기에는 중간 단계가 아닌 모든 ETL 데이터를 한 번에 볼 수 있다는 이점이 있습니다. 단점은 구현하기 어렵습니다.

또 다른 접근법은 데이터베이스에서 스냅 샷 격리 및/또는 읽기 커밋 된 스냅 샷을 활성화하는 것입니다 (Row Versioning-based Isolation Levels in the Database Engine 참조). 이 방법은 ETL이 보유한 잠금 뒤에 더 이상 블록을 읽지 않습니다. 단점은 자원 소비이며, 하드웨어는 행 버전 관리의 추가로드를 구동 할 수 있어야합니다.

또 다른 접근법은 데이터 쿼리를 읽기 전용 대기 서버로 이동하는 것입니다 (예 : log shipping을 사용하십시오.

2

먼저 자물쇠가 어디에서 왔는지 알아야합니다. 링크가 있으면 잠금 장치가 있는지 확인하십시오.

How to: Determine Which Queries Are Holding Locks

당신이 많은 당신이 할 수있는 다음 테이블 잠금을하지 보유하고 다른 프로세스가있는 경우.

오류는 "테이블 잠금을 생성 할 수 없음"입니다. 그렇다면 테이블 잠금을 사용하지 않도록 SSIS 패키지를 변경하십시오.

관련 문제