동시성

동시성은 여러 사용자가 동시에 데이터에 액세스할 수 있는 기능입니다. 데이터베이스 엔진이 지원할 수 있는 동시 작업 수가 클수록 데이터베이스 동시성은 증가합니다. Microsoft SQL Server Compact에서는 잠금으로 데이터를 보호하여 동시성을 제어할 수 있습니다. 잠금은 여러 사용자가 동시에 공유 데이터에 액세스하여 서로 충돌하지 않고 데이터를 변경할 수 있는 방법을 제어합니다. 자세한 내용은 잠금(SQL Server Compact)을 참조하십시오.

동시성 문제

여러 사용자가 데이터를 수정하고 읽는 것을 관리하지 않으면 동시성 문제가 발생할 수 있습니다. 예를 들어 여러 사용자가 동시에 데이터베이스에 액세스한 경우 트랜잭션이 동시에 같은 데이터에서 작업을 수행하려고 시도할 수 있습니다. 다음은 SQL Server Compact를 사용하는 동안 발생하는 몇 가지 동시성 문제입니다.

  • 업데이트 손실

    둘 이상의 트랜잭션이 같은 행을 선택하고 원래 선택된 값을 기준으로 행을 업데이트할 경우 업데이트가 손실됩니다. 마지막 업데이트가 다른 트랜잭션으로 인해 생성된 업데이트를 덮어쓰기 때문에 데이터가 손실됩니다.

  • 일관성 없는 분석(반복되지 않는 읽기)

    두 번째 트랜잭션이 여러 번 같은 행에 액세스하여 항상 다른 데이터를 읽으면 반복되지 않는 읽기가 발생합니다. 여기에는 같은 행의 여러 번 읽기가 포함됩니다. 항상 다른 트랜잭션에 의해 정보가 변경됩니다.

  • 가상 읽기

    가상 읽기는 트랜잭션에서 읽고 있는 행 범위에 속한 행에 대해 삽입 또는 삭제 동작을 수행할 경우 발생합니다. 행 범위에서 트랜잭션의 첫 번째 읽기는 다른 트랜잭션에서 삭제했기 때문에 이후의 읽기에서 더 이상 존재하지 않는 행을 보여 줍니다. 마찬가지로 다른 트랜잭션에 의해 행이 삽입되었기 때문에 발생한 트랜잭션의 이후 읽기는 원래 읽기에 없었으나 다른 트랜잭션에 의해 삽입된 행을 보여 줍니다.

참고

SQL Server Compact에서 발생하지 않는 가장 일반적인 동시성 문제 중 하나는 커밋되지 않은 종속성(커밋되지 않은 읽기)입니다. 이 문제는 다른 트랜잭션이 업데이트 중인 행을 두 번째 트랜잭션이 선택할 경우 발생합니다. 두 번째 트랜잭션은 커밋되지 않은 데이터를 읽고 있으므로 행을 업데이트 중인 트랜잭션에서 이 데이터를 변경할 수 있습니다. 커밋되지 않은 읽기는 MicrosoftSQL Server를 사용하는 동안 발생할 수 있습니다. 동시성 문제에 대한 자세한 내용은 SQL Server 온라인 설명서의 "동시성 효과"를 참조하십시오.

동시성 제어

데이터베이스 시나리오에는 두 가지의 동시성 제어 메커니즘이 있습니다.

  • 낙관적 동시성 제어

    낙관적 동시성 제어는 여러 사용자 간에 리소스 충돌이 발생하지 않는다는 가정 하에 작동하며 리소스를 잠그지 않고 트랜잭션을 실행할 수 있도록 허용합니다. 이 리소스는 트랜잭션이 데이터를 변경하려고 시도하는 경우에만 확인됩니다. 이 경우 버전 번호 등을 확인하여 충돌이 발생했는지 판단합니다. 충돌이 발생한 경우 응용 프로그램은 데이터를 읽고 변경을 다시 시도해야 합니다. 이 제품에서는 낙관적 동시성 제어가 제공되지 않지만 데이터베이스 액세스를 추적하여 수동으로 응용 프로그램에 넣을 수 있습니다.

  • 비관적 동시성 제어

    비관적 동시성 제어는 트랜잭션 동안 필요에 따라 리소스를 잠급니다. SQL Server Compact에서는 트랜잭션 동안 필요에 따라 리소스를 잠그는 비관적 동시성 제어를 지원합니다.

낙관적 동시성과 비관적 동시성에 대한 자세한 내용은 SQL Server 온라인 설명서의 "동시성 제어 유형"을 참조하십시오.

참고

일부 64비트 플랫폼 시나리오에서는 이전 버전의 SQL Server Compact를 사용하여 데이터베이스 파일에 동시에 액세스할 수 없습니다. 64비트 구성 요소에 대한 자세한 내용은 64비트 데이터베이스 응용 프로그램 관리를 참조하십시오.

참고 항목

개념

트랜잭션(SQL Server Compact)

잠금(SQL Server Compact)

다중 사용자 액세스