3

매 초당 약 1000 개의 인서트를 만들고 싶습니다. 또한 매일 삽입 된 모든 행을 한 번만 쿼리하려고합니다. 멀티 스레딩 및 연결 풀링을 통해 효율성을 높이고 싶습니다. 하지만 어느 수준의 동시성 제어가 더 적합한 지 알고 싶습니다. SQL Server에 대한 옵션 목록은 MSDN Site입니다.삽입에 적합한 SQL Server 잠금 수준은 무엇입니까?

감사합니다.

+0

삽입물을 삽입 할 때 잠그는 것에 대해 이야기하고 있습니까? 또는 일일 읽기를 할 때 잠금 기능이 있습니까? 아니면 여러 스레드가 동일한 항목을 삽입하지 않도록하려고합니까? – slugster

+0

매일 하나는 정상적인 것입니다. 삽입물 잠금 장치를 변경하고 싶습니다. 그러나 그것은 매일의 것과 일치해야합니다. – Shayan

답변

2

삽입에 대한 기본 격리 수준에서는 정상적으로 처리되어야합니다. 클러스터 된 인덱스가 있습니까? 그렇다면 새 행을 삽입 할 때 조각화되지 않도록하십시오. 일반적으로 guid는 클러스터 된 인덱스의 나쁜 후보가됩니다. 또한 엔터프라이즈 에디션이 있고 테이블에서 파티션을 식별 할 수있는 경우이 열 (예 : 지역 또는 도시)을 사용하여 테이블을 분할하고 테이블의 파티션을 다른 파일 그룹에 저장할 수 있습니다. 이렇게하면 IO 충돌을 피할 수 있습니다. 모두 데이터를 하루에 한 번 선택하고 너무 많이 잠그지 않고 선택하는 동안 삽입 속도를 유지하려면 데이터베이스 스냅 샷 (다시 Enterprise Edition)을 만들고이를 선택하는 것이 좋습니다. 더티 읽기로 살 수 있다면 선택에 힌트를 추가 할 수 있습니다.

2

잘못된 트리를 짖고있을 수 있습니다. 개별 문에 대한 잠금 힌트를 제공하는 대신 row-versioning transaction isolation을 사용하십시오.

많은 사람들이 데이터베이스 수준에서 사용할 수 있고 코드를 변경할 필요가없는 READ COMMITTED SNAPSHOT을 사용하여 좋은 결과를 얻었습니다.

나는 과거에 SNAPSHOT이 나에게 도움이되었다고 말할 수 있지만 코드를 변경해야한다고 말할 수 있습니다.

경고 버전에서는 행 버전 관리가 tempdb의로드를 크게 늘리므로 tempdb 처리량이 양호해야합니다.

관련 문제