2012-03-26 1 views
4

다른 격리 수준과 관련하여 MySQL 성능을 특성화해야하는 학교 프로젝트에 대해 지금 일하고 있습니다. 나는 읽지 않은 채, READ COMMITTED, REPEATABLE READ 및 SERIALIZABLE에 관한 것들을 테스트했다. 이제 스냅 샷 격리를 사용하여 테스트하고 싶습니다.MySQL에서 InnoDB를 스냅 샷 격리 수준으로 설정하는 방법

InnoDB에서 REPEATABLE READ의 기본값을 사용할 때 스냅 샷 격리가 함께 사용되지만 분리 수준을 스냅 숏 격리만으로 설정할 수 있는지 궁금합니다. 내가 어떻게 그럴 수 있니?

+1

격리 수준은 언급 한 4 가지 수준입니다. 전역으로 설정할 수있는 스냅 샷 격리 수준은 없습니다. –

답변

3

글로벌 스냅 샷 격리 수준이 없습니다.

당신은 또한 다음과 같이 트랜잭션을 시작할 수 있습니다 : MySQL의 문서, START TRANSACTION 구문에서

START TRANSACTION WITH CONSISTENT SNAPSHOT; 

WITH CONSISTENT SNAPSHOT 옵션은 할 수있는 스토리지 엔진에 대해 일관된 읽기를 시작합니다. 이것은 InnoDB에만 적용됩니다. 이 효과는 START TRANSACTION 다음에 InnoDB 테이블에서 SELECT을 발행하는 것과 같습니다. 섹션 13.6.8.2, “Consistent Nonlocking Reads”을 참조하십시오. WITH CONSISTENT SNAPSHOT 옵션 은 현재 트랜잭션 격리 수준을 변경하지 않으므로 일관된 읽기 (REPEATABLE READ 또는 SERIALIZABLE)를 허용하는 현재 격리 수준 인 경우에만 일관된 스냅 숏을 제공합니다.

그래서, 당신은 위의 구문을 사용하여 트랜잭션을 REPEATABLE READ 또는 SERIALIZABLE에 격리 수준을 설정하고 시작해야합니다.

1

변수 tx_isolation을 사용하면 트랜잭션 격리를 로컬 및 전역으로 설정할 수 있습니다.

SET tx_isolation = 'READ-COMMITTED'; 

을 다음과 같이

당신은 당신뿐만 아니라

SET GLOBAL tx_isolation = 'READ-COMMITTED'; 

세계적으로 설정할 수 있습니다 세션에서 설정할 수 있지만 향후 새로운 DB 연결에 영향을 미칩니다. 현재 세션에서 설정해야합니다.

0

MySQL에는 스냅 샷 격리 수준이 없습니다. Consistent Nonlocking Reads에 대한 스냅 샷을 사용하지만 스냅 샷 격리를 지원하지는 않습니다.

the Wikipedia page에 따르면 아래 데이터베이스 만 스냅 샷 격리를 지원합니다.

은 스냅 샷 격리는 같은 SQL Anywhere를, 몇 가지 주요 데이터베이스 관리 시스템에 의해 채택되었다, 인터베이스, 파이어 버드, 오라클, PostgreSQL을마이크로 소프트 SQL 서버 (2005 이상)

에서 스냅 숏 격리는

거래 자체는 성공적으로 시간 경우에는 갱신 사항을 확정하지 않습니다 해당 스냅 샷

이후 어떤 동시 업데이트하지만 스냅 샷을 사용하지만, 모든이 작업을 수행하지 않는 REPEATABLE READ 수준 만든 충돌로.