본문 바로가기

데이터베이스5

ANSI SQL-92에 대한 비평 (원문 : A Critique of ANSI SQL Isolation Levels) - 다양한 이상현상들 지난번에는 제가 조사한 내용을 바탕으로 간략한 역사와 논문이 나오게 된 이유를 알아봤습니다. 해당 분야에 전문가가 아니기 때문에 반드시 참고자료를 확인하시길 바랍니다. 또한 피드백은 적극 환영합니다! 그렇다면 논문에서 제시하는 고립 수준과 이상현상은 무엇일까요? 또한 굳이 알 필요가 있을까요? 제 생각은 '모든 내용을 알 필요는 없지만, 대략적인 내용은 알고 있어야 한다.'입니다. 왜냐하면 DBMS마다 고립 수준을 나타내는 용어도 다르고 그들이 구현한 방법도 다릅니다. 또한 논문이 제시된 이유가 '모호함을 개선'이기 때문에, 이러한 '모호함에서 발생할 수 있는 문제'가 있을 것입니다. 즉, 데이터베이스의 선택 혹은 발생한 문제를 빠르게 이해하는데 도움이 된다고 생각합니다. 1. 개요 저번 글에서도 확인하.. 2023. 1. 13.
ANSI SQL-92에 대한 비평 (원문 : A Critique of ANSI SQL Isolation Levels) - 용어, 배경 설명 위키피디아에서 Snapshot isolation에 대한 글을 읽던 중에 흥미로운 문장을 보았다. '스냅숏 격리는 ANSI SQL-92 표준의 격리 수준 정의를 비판하는 데 사용되었는데, 이는 SQL 표준이 금지한 "이상"을 나타내지 않으면서 직렬화할 수 없기 때문이다' 대부분 DBMS 공식 매뉴얼에는 SQL-92 고립 수준에 대한 설명이 있다. 그리고 자바 SQL에도 이 고립 수준을 인터페이스에 명시했다. 근데 '표준이 잘못되었다.'라는 내용이 너무나도 이상했다. 그리고 여러 자료를 찾던 중에 매우 흥미로운 사실을 알게 되었다. 결론부터 말하면 '표준이 채택한 구현 방식'에서는 ANSI 이상현상이 맞다. 하지만 현대 DBMS의 대세는 '표준이 채택한 방식을 완벽히 구현하지 않고 Snapshot isola.. 2022. 9. 17.
Thread Pool과 Connection Pool은 어떤 관계가 있고 적당한 크기는 얼마일까? 대부분 DBMS는 TCP/IP로 통신한다. WAS가 I/O 요청을 할 때마다 새로운 커넥션을 연다면 오버헤드가 발생하게 될 것이다. 이러한 오버헤드를 방지하기 위해서 DBMS는 미리 커넥션을 생성하는데 이것을 커넥션 풀이라고 한다. 풀 사이즈가 작다면 요청이 들어와도 대기하는 시간이 발생할 것이고 너무 많으면 한정된 컴퓨팅 자원을 낭비하게 될 것이다. 그렇다면 적절한 커넥션 수는 얼마일까? 더보기 상용 DBMS는 커넥션 풀 기능을 내장있다. 오픈 소스로는 Apache dbcp, HikariCP 등이 있다. PostgreSQL에서는 DBMS에서 커넥션 풀을 관리하는 것보다 외부 머신에서 관리하는 것을 권장한다. 1. 스레드 풀과 커넥션 풀 TCP는 연결을 생성할 때 3-way handshake를 시도한다... 2022. 9. 15.
MySQL Repeatable Read는 어떻게 Phantom을 막을까? (Next-Key lock) MySQL은 Repeatable Read(RR)를 지원한다. 구글링을 하거나 MySQL 메뉴얼을 참고하면 RR은 SQL-92에 명시된 이상현상을 방지하는 단계라고 적혀있다. 하지만 RR은 Phantom Read를 방지할 수 없는데, MySQL에서는 가능하다고 나와있다. 왜 이것이 가능할까? 내부적으로 어떻게 동작하고 있을까? 1. Lock과 MVCC 들어가기 전에 MySQL InnoDB가 어떻게 구현되었는 지 확인할 필요가 있다. InnoDB는 MVCC(Snapshot Isolation)을 구현한 스토리지 엔진이다. MVCC는 트랜잭션마다 테이블의 여러 버전(보통 트랜잭션 시작 시간을 기준)을 만들고 트랜잭션 작업을 진행할 때 해당 버전을 참조하는 방법을 뜻한다. 이 방법은 Lock을 걸지 않고 트랜잭션.. 2022. 8. 14.