본문 바로가기

스터디/오라클 성능고도화 원리와 해법141

CH2. 트랜잭션과 LOCK - 03. 비관적 vs. 낙관적 동시성 제어, 04.동시성 구현 사례 03. 비관적 vs. 낙관적 동시성 제어n-Tier 구조가 지배적인 요즘 같은 개발 환경에서는 트랜잭션 고립화 수준을 변경하는 DBMS 기능을 사용할 수 없는 경우가 있습니다. 동시성 제어는 비관적 동시성 제어와 낙관적 동시성 제어로 나뉩니다. 비관적 동시성 제어는 사용자들이 같은 데이터를 동시에 수정할 것이라고 가정합니다. 따라서 한 사용자가 데이터를 읽는 시점에 Lock을 걸고 조회 또는 갱신처리가 완료될 때까지 이를 유지합니다. Locking은 첫 번째 사용자가 트랜잭션을 완료하기 전까지 다른 사용자들이 그 데이터를 수정할 수 없게 만들기 때문에 비관적 동시성 제어를 잘못 사용하면 동시성을 저해 받게 됩니다. 낙관적 동시성 제어는 사용자들이 같은 데이터를 동시에 수정하지 않을 것이라고 가정합니다. .. 2019. 12. 28.
CH2. 트랜잭션과 LOCK - 01.트랜잭션 동시성 제어, 02.트랜잭션 수준 읽기 일관성 01. 트랜잭션 동시성 제어 (1) 동시성 제어 예전에는 주로 상담원을 통해 온라인 주문을 받았고, 시스템 사용법을 교육받은 숙련된 사용자에 의해 데이터 조작이 이루어졌습니다. 요즘에는 사용자가 직접 자신의 주문을 처리하는 환경이 되었고 생각지 못했던 일들이 훨씬 자주 발생하게 됩니다. 동시 접속자 수도 이전과 비교할 수 없을 정도로 많아졌기 때문에 동시성에 대한 이슈는 훨씬 더 중요해졌습니다. 동시성 제어(concurrency control)이란 동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정,삭제,검색 시 데이터의 무결성이 유지될 수 있도록 노력하는 것을 말합니다. 여러 개 트랜잭션이 동시에 수행될 때, 데이터베이스 애플리케이션은 이들 트랜잭션이 서로 간섭을 일으키는 현상을 최소화하면서 데이.. 2019. 12. 25.
CH1.오라클 아키텍처 - 10.대기 이벤트, 11. Shared Pool 10. 대기이벤트(1) 대기이벤트란? 오라클 인스턴드로 조직화된 분업사회처럼 많은 프로세스(또는 쓰레드)들이 역할을 분담해서 각자 맡은 바 임무를 수행합니다. 함께 일을 하는 동안 프로세스 간 커뮤니케이션과 상호작용이 필요하고 떄로는 다른 프로세스가 일을 마칠때까지 기다려야하는 상황이 발생되기도 합니다. 그러면 오라클 프로세스는 일을 계속 진행할 수 있는 조건이 충족될 때까지 수면상태에 빠지는데 이것을 대기이벤트라고 합니다. 그때마다 오라클은 그 상태정보를 파일 또는 SGA메모리 내에 저장해둡니다. 처음 7.0버전에서 100여개 남짓하던것이 11g에는 960개가 넘는 대기이벤트가 정의되어 있습니다. (2) 대기 이벤트는 언제 발생할까요? 크게 세가지로 요약할 수 있습니다. 1. 자신이 필요로 하는 특정 .. 2019. 12. 22.
CH1.오라클 아키텍처 - 8.블록 클린아웃, 9.Snapshot too old 8.블록 클린아웃블록 클린아웃은 트랜잭션에 의해 설정된 로우 lock을 해제하고 블록 헤더에 커밋정보를 기록하는 오퍼레이션입니다. 오라클에 로우 단위 lock은 레코드의 속성 (lock byte)로 관리되며 이는 로우 헤더로부터 블록 헤더에 있는 ITL 엔트리를 가리키는 포인터입니다. 사용자가 트랜잭션을 커밋하면 블록 클린아웃까지 완료해야 완전한 커밋이라고 할 수있는데, 일일이 블록을 찾아다니며 클린아웃을 수행하려면 시간이 오래 걸릴수 밖에 없습니다. 그래서 대량의 갱신 작업이 있고 나서는 커밋정보를 트랜잭션 테이블에만 기록하고 빠르게 커밋을 끝내버립니다. 그렇다면 언제 블록을 클린아웃 할까요? 나중에 해당 블록이 처음 액세스되는 시점입니다. 항상 이방식으로 작동하는 것은 아니며 delayed 블록 클린.. 2019. 12. 21.