Phantom Read 부정합문제

이번 포스트에서는 PostgreSQL과 MSSQL이 반복 가능한 읽기 격리 계층에서 발생하는 불일치 문제인 팬텀 읽기를 어떻게 해결했는지 공유할 것입니다.

우선 PostgreSQL과 MSSQL을 연결한 이유는 두 데이터베이스가 팬텀 읽기 불일치 문제를 같은 방식으로 해결하기 때문입니다.

우선 이번에 PostgreSQL에 대해 많이 배웠습니다.

나는 최근까지 그것이 존재하는지조차 몰랐다.

따라서 PostgreSQL을 간략하게 요약하고 솔루션에 대해 진지하게 알려 드리겠습니다.

PostgreSQL이란 무엇입니까?

PostgreSQL은 RDBMS 중 하나입니다.

기존 Postgre에서 SQL이 지원되었기 때문에 이제 PostgreSQL이라고 합니다.

초기 Postgres는 오늘날의 전신이었습니다.

PostgreSQL의 가장 눈에 띄는 특징은 오픈 소스 데이터베이스라는 것입니다.

따라서 데이터베이스를 사용하는 데 저작권료가 필요하지 않습니다.

또한 JSON을 처리할 때 뛰어난 성능을 보인다고 합니다.

PostgreSQL은 JSON 생성 기능을 추상화하여 보다 효율적으로 사용할 수 있도록 합니다.

다른 데이터베이스에서는 JSON을 생성하는 기능이 복잡해서가 아니라고 합니다.

오픈소스인 만큼 쉽게 커스터마이징이 가능하고 유연한 디버깅 관리가 가능한 것이 오픈소스의 특징 중 하나라고 합니다.

위의 혜택은 실제로 PostgreSQL을 사용하는 사람들이 나열한 내용이므로 사실과 다를 수 있습니다.

제 개인적인 생각으로는 개발자가 원하는 것은 무엇이든 할 수 있다는 장점이 있고 학습 곡선이 있다는 단점이 있습니다.

PostgreSQL에 대한 인식

내가 PostgreSQL에 대해 들어본 적이 없는 이유가 있습니다.

이유는 간단합니다.

자주 사용하지 않기 때문입니다.

데이터베이스 상식이 조금 부족하긴 했지만 Oracle, Mysql, MongoDB, MariaDB, MSSQL, NOSQL은 들어봤지만 PostgreSQL은 들어본 적이 없습니다.

위의 장점 말고도 그렇게 훌륭했다면 많은 분들이 쓰셨을 거라 생각합니다.

사람들이 자주 선택하는 데는 그만한 이유가 있고 보편적인 것이라고 생각합니다.

PostgreSQL이 얼마나 인기가 있는지 알아보기 위해 몇 가지 조사를 했고 StackOverFlow 공간에서 작업하는 개발자를 대상으로 설문 조사를 했는데 PostgreSQL이 2위를 차지했다고 합니다.

그러나 당신은 그것을 믿을 수 없습니다.

오라클이 8위였으니까. 아무리 몰라도 오라클은 8위를 차지하는 네임밸류가 아니다.


Phantom Read 부정합문제 1
흠…그건 좀…

도저히 믿을 수가 없어서 좀 더 믿을만하고 현실적인 자료를 찾아봤습니다.


Phantom Read 부정합문제 2
https://www.statista.com/statistics/1131568/worldwide-popularity-ranking-relational-database-management-systems/

거의 모든 산업에 대한 통계를 전문으로 하는 statista라는 웹사이트를 찾았고 여기에서 일부 통계를 가져왔습니다.

지금은 조금 더 현실감이 있습니다.

가장 많이 사용되는 3대 데이터베이스인 Oracle, Mysql, MSSQL과는 조금 다르지만 오픈소스 데이터베이스로 널리 사용되는 것을 확인했다.

PostgreSQL을 사용하는 대표적인 기업은 초기 Apple, Instagram, Reddit 및 Skype입니다.

여기서 초기 Apple이라고 부르는 이유는 2010년까지 Apple이 PostgreSQL을 사용하고 Mysql로 ​​전환했기 때문입니다.

Apple이 Oracle의 데이터베이스 솔루션에 더 집중했기 때문입니다.

이제 본격적으로 Phantom Read에 대해 알아봅시다.

PostgreSQL PhantomRead 해결 방법

먼저 구글에서 PostgreSQL 공식 문서에 Phantom Read 솔루션을 입력했는데 안나오네요(Mysql이 나왔는데..) 먼저 영어로 작성된 블로그를 봤는데 득이 되는게 없어서 결국 공식 문서를 찾았습니다.

.

Phantom Read는 Isolation Level의 부작용이기 때문에 Isolation Level 키워드를 검색했더니 나오더군요.

근데 공식 문서가 좀 미약하네요… 오픈소스는 다 이런가요? 나는 공식 mysql 문서를 미리 읽어봤기 때문에 정확히 알지 못했다.

격리 수준 콘텐츠에서도 팬텀 읽기 콘텐츠가 보이지 않았습니다.

반복 읽기도 학술 데이터베이스 문헌과 다른 데이터베이스에서 사용되는 스냅샷 격리를 사용하여 구현되었습니다.

그는 말했다…


Phantom Read 부정합문제 3

처음에는 당시 학술 데이터베이스 문헌에서 건축과 헷갈려 구글링을 해보니 기사가 몇 개 나왔다.

그래도 문제가 있었습니다.

이것은 스냅샷 격리입니다.

먼저 스냅샷(이하 스냅샷)부터 살펴보자.

다음은 Wikipedia의 스냅샷입니다.

컴퓨터 시스템에서 스냅샷은 특정 시점의 시스템 상태입니다.

컴퓨터 과학에서 스냅샷은 특정 시점의 시스템 상태입니다.

즉, 특정 지점에서 이 상태입니다.

스냅샷 격리

스냅샷 격리 수준은 트랜잭션 시작 시 데이터베이스의 상태를 기반으로 트랜잭션의 모든 쿼리가 실행되는 방식을 지정합니다.

이는 앞에서 본 스냅샷의 정의와 일치합니다.

스냅샷 트랜잭션의 기본 데이터 행 또는 데이터 페이지에는 잠금이 적용되지 않습니다.

이를 통해 이전에 완료되지 않은 트랜잭션에 의해 차단되지 않고 다른 트랜잭션을 진행할 수 있습니다.

데이터를 수정하는 트랜잭션은 데이터를 읽는 트랜잭션을 차단하지 않으며, 일반적으로 데이터를 읽는 트랜잭션은 데이터를 쓰는 트랜잭션을 차단하지 않습니다.

이 비차단 동작은 복잡한 트랜잭션의 교착 상태 가능성을 크게 줄입니다.

즉, mysql에서 팬텀 읽기를 풀 때 공유 잠금과 배타 잠금을 확인한 것과 비슷하다.

그러나 Mysql의 (s)Lock 및 (x)Lock과는 완전히 다릅니다.

(s)Lock은 Mysql에서 동일한 읽기 트랜잭션의 경우에만 공유가 가능하며, (s)Lock과 (x)Lock이 만나면 (x)Lock은 잠금이 해제되기를 기다려야 한다.

스냅샷 격리 수준은 낙관적 잠금을 채택합니다.

낙관적 바위, 비관적 바위

이 두 가지는 간단한 것이므로 빠르게 살펴보겠습니다.

낙관적 잠금은 트랜잭션 동시성 문제가 없다고 가정하고 두 트랜잭션 간의 충돌로 인해 동시성 문제가 발생하면 시스템적으로 오류가 발생한 것으로 판단하고 오류로 데이터베이스 서버가 종료됩니다.

반면 비관적 잠금은 동시 트랜잭션 문제가 불가피하게 발생한다는 가정하에 작동하는 잠금입니다.

두 트랜잭션 간의 충돌로 인해 동시성 문제가 발생했을 때 반드시 해결해야 하는 방법입니다.

종종 mysql 방법이 있습니다.

다시 확인하기 위해 mysql은 레코드 잠금과 갭 잠금의 조합인 next-key 잠금을 사용하여 이 동시성 문제를 해결합니다.

스냅샷 격리는 낙관적 잠금을 사용하기 때문에 두 트랜잭션이 동시성 문제를 일으키려고 하면 오류가 발생합니다.


Phantom Read 부정합문제 4

즉, PostgreSQL과 MSSQL은 스냅샷 격리를 사용하여 반복 가능한 읽기 격리 수준에서 팬텀 읽기 불일치 문제를 해결했다고 결론 내릴 수 있습니다.

지금까지 PostgreSQL에 대해 알아보고 스냅샷 격리 수준에 대해 알아보았습니다.

음… 뭔가 해결되지 않은 느낌이 듭니다.

하지만 스냅샷 격리에 대한 새로운 내용과 PostgreSQL의 일반적인 내용에 대해 배우는 것도 나쁘지 않은 성과라고 생각합니다.

다음은 데이터베이스의 왕인 오라클입니다.

아마도 가장 인기 있는 데이터베이스일 것입니다.

다음 포스팅에서는 Oracle에서 phantom read를 해결하는 방법에 대해 알아보겠습니다.

긴 글 읽어주셔서 감사합니다.

오늘도 좋은 하루 되세요

원천

https://www.postgresql.org/docs/current/transaction-iso.html

13.2. 트랜잭션 격리

13.2. 트랜잭션 격리 13.2.1. 커밋된 격리 수준 13.2.2를 읽으십시오. 반복 가능한 읽기 격리 수준 13.2.3. 직렬화 가능 격리 수준 SQL 표준은 다음을 정의합니다.

www.postgresql.org

=> 공식 PostgreSQL 문서

https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server

SQL Server의 스냅샷 격리 – ADO.NET

격리 수준으로 동시성을 관리하는 방법을 알아보려면 SQL Server의 스냅샷 격리 및 행 버전 관리 개요를 읽어보세요.

learn.microsoft.com

=> 스냅샷 격리 수준 공식 MS 문서

https://en.wikipedia.org/wiki/Snapshot_(computer_storage)

스냅샷(컴퓨터 메모리) – Wikipedia

Wikipedia, 무료 백과사전 Snapper로 관리되는 Btrfs 파일 시스템 스냅샷의 예 컴퓨터 시스템에서 스냅샷은 특정 시점의 시스템 상태입니다.

이 용어는 사진과 유사하게 만들어졌습니다.

할 수 있습니다

de.wikipedia.org

=> Wikipedia의 스냅샷

https://www.statista.com/statistics/1131568/worldwide-popularity-ranking-relational-database-management-systems/

가장 인기 있는 관계형 DBMS 2022 | 통계

2022년 1월 Oracle은 1266.89의 순위 점수로 세계에서 가장 인기 있는 RDBMS(관계형 데이터베이스 관리 시스템)였습니다.

www.statista.com

=> RDBMS 통계

https://learnsql.com/blog/companies-that-use-postgresql-in-business/

PostgreSQL을 사용하는 대기업은 어디입니까? 그들은 무엇을 위해 그것을 사용하고 있습니까?

PostgreSQL을 사용하는 회사를 알고 싶으십니까? 고객이 이 솔루션을 선택한 이유를 알아보세요.

learnsql.com

=> PostgreSQL을 사용하는 대표 기업

https://www.quora.com/What-differentiates-PostgreSQL-from-other-RDBMS-systems

PostgreSQL이 다른 RDBMS 시스템과 다른 점은 무엇입니까?

답변(1/3): 이 질문은 매우 주관적이므로 적절하게 답변하겠습니다.

Postgres는 훌륭하고 무료입니다.

지금까지 가장 성숙한 오픈 소스 RDBMS 플랫폼입니다.

더 다양한 모델을 처리할 수 있는 옵티마이저가 있으며 모든 모델보다 훨씬 우수합니다.

www.quora.com

=> PostgreSQL과 다른 데이터베이스의 차이점