2014-05-22 5 views
1

다른 세션에서 사용하는 SERIALIZABLE 트랜잭션의 경우 중요합니까? 자동 커밋 또는 READ COMMITED 격리 수준?PostgreSQL의 분리 레벨의 혼합

다른 말로하면 여러 프로세스/스레드 (또는 조심해야 할 다른 것)에서 데이터베이스에 액세스 할 때 격리 수준 (자동 커밋)을 혼합 할 때 위험이 있습니까?

재시도 등을 요구하는 SERIALIZABLE 트랜잭션과 같은 "일반적인"문제에 대해 알고 있습니다. 서로 다른 격리 수준을 혼합 할 때 발생할 수있는 문제가 무엇인지 묻습니다.

편집 :

http://www.postgresql.org/docs/9.4/static/transaction-iso.html에서 : 직렬화 거래의

일관된 사용은 개발을 단순화 할 수 있습니다. 동시 직렬화 가능 트랜잭션 세트가 한 번에 하나씩 실행될 때와 동일한 효과를 갖게된다는 보장은 서면 작성과 같이 단일 트랜잭션이 단독으로 실행될 때 올바른 작업을 수행한다는 것을 입증 할 수있는 경우, 이러한 다른 트랜잭션이 수행 할 수있는 작업에 대한 정보가 없어도 직렬화 가능한 트랜잭션의 혼합에서 올바른 작업을 수행 할 것이라는 확신을 가질 수 있습니다.

격리 수준을 혼합하면 좋은 생각이 아닐 수 있습니다. 반면에 SERIALIZABLE 수준을 일관되게 사용하는 것이 좋으며 혼합 수준을 분리하는 것이 좋지 않다고 말하는 것입니다.

+0

아니요, 문제가 아니어야합니다. (단, 이에 대한 참고 자료는 없습니다) –

+0

@a_horse_with_no_name 여기에 있습니다. 데이터베이스가 무엇인지는 알고 있지만 구체적인 참조를 찾을 수 없습니다 :-) –

+0

아마 Postgres 메일 링리스트에 게시하면 더 나은 답변을 얻을 수 있습니다. 주요 개발자의 대부분은 거기에서 "놀다". 누군가가 대답 할 수 있다면, 그것들입니다. –

답변

0

SERIALIZABLE

현재의 트랜잭션 (transaction)의 모든 내용은 첫 번째 쿼리 또는 데이터 수정 문 앞에 최선을 다하고 행이 트랜잭션에서 실행 된 볼 수 있습니다. 동시 직렬화 가능 트랜잭션 중 읽기 및 쓰기 패턴이 인 경우 해당 트랜잭션의 직렬 (한 번에 하나씩) 실행에 대해 발생할 수 없었던 상황이 발생하며, 그 중 하나는 serialization_failure 오류로 롤백됩니다 .

즉, SERIALIZABLE 거래는 다른 SERIALIZABLE 거래와 달리 실행될 때만 다르게 작동합니다. 트랜잭션이 SERIALIZABLE이 아닌 트랜잭션에 대해 실행되면 그들은 트랜잭션이 REPEATABLE READ 인 것처럼 행동해야합니다. 즉, 이러한 트랜잭션 격리 수준을 혼합하는 것이 안전합니다.

+0

귀하의 결론이 귀하의 견적과 어떻게 관련되는지 볼 수 없습니다. 나는 [DBA] (http : //dba.stackexchange.com/questions/148598) 매뉴얼의 중요한 세부 사항은 격리 수준을 나타내는 ** S ** erializable과 일정을 참조하는 ** s erializable의 구분이라는 것을 알게되었습니다. 이를 이해하면, 'Serializable'트랜잭션은 ANSI 표준에서 명시 적으로 정의 된 것처럼 안전하다는 결론을 이끌어냅니다. –