2010-01-29 7 views
2

하나의 큰 테이블에 여러 쿼리를 동시에 SQL Server로 가져 오는 경우 SQL Server가이 경우 충돌을 어떻게 해결합니까?SQL Server가 동시 요청을 처리하는 방법은 무엇입니까?

많은 PC에 설치하기 위해 WPF 응용 프로그램에서 LINQ to SQL 쿼리를 사용할 때 SQL Server 데이터베이스와 네트워크로 작업 할 때 어떻게 든 이러한 문제를 해결하기위한 메커니즘을 구현해야합니까? 아니면 SQL Server 및 LINQ SQL로?

답변

3

쿼리가 발생할 경우 (나는. 나는 같은 큰 테이블이 여러 네트워크 방송국에서 쿼리 일부 큐 문제를 의미 타임 스탬프 필드를 사용하여 해결 같은 기록에 대한 동시 작업을 의미하지 않는다) 교착 상태가 발생하면 SQL Server는 내부 메커니즘을 처리합니다.

교착 상태가 발견되면 롤백 할 "피해자"트랜잭션을 선택합니다. 그것이 희생자를 선택하는 방법은 우선 트랜잭션의 우선 순위 설정을 기반으로 한 다음 각 쿼리를 롤백하는 총 비용을 기준으로합니다. 일반적으로 롤백하기에 덜 비용이 드는 것이 피해자입니다.

실제로 SET DEADLOCK_PRIORITY을 사용하여 우선 순위 (낮음, 중간 또는 높음 또는 -10과 10 사이의 숫자)를 제어 할 수 있습니다. 그래도이 상황에 빠진다면 처음부터 교착 상태를 줄이려면 노력해야합니다.

3

SQL Server는 각 연결에 대한 연결 및 쿼리 실행을 관리하기 때문에 언제, 누가, 언제 누가 쿼리를 가져올 지 제어 할 수 없습니다.

적절한 색인이 있는지 확인하여 문제가 해결되는 시간을 제어 할 수 있지만 문제가 해결 될 때까지는 가능합니다.

2

데이터베이스는 사용자가 요청한 문제를 해결하기 위해 격리 수준을 사용합니다.

격리 수준은 트랜잭션의 리소스를 격리하고 해당 트랜잭션을 다른 트랜잭션으로부터 보호해야 할 때 유용합니다. 보호는 잠금을 획득하여 수행됩니다. 어떤 잠금을 설정해야하는지, 트랜잭션에 대해 설정해야하는 방법은 설정된 격리 수준을 참조하는 SQL Server에 의해 결정됩니다. 하위 격리 수준을 사용하면 여러 사용자가 동시에 리소스에 액세스 (동시성) 할 수 있지만 더티 읽기 및 데이터 부정확성과 같은 동시성 관련 문제가 발생할 수 있습니다. 높은 격리 수준은 동시성 관련 문제를 제거하고 데이터 정확도를 높이지 만 차단을 유발할 수 있습니다.

SQL Server 2005 격리 수준에 대한 자세한 내용은 this article을 참조하십시오.

쿼리 단위로도 격리 수준을 조정할 수 있습니다. 그러나 실제로 문제를 일으킬 수있는 진보 된 원리입니다.

+0

감사합니다. 유용한 정보입니다. +1 – rem

관련 문제