본문 바로가기

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

CH1.오라클 아키텍처 - 6.문장수준 읽기 일관성 7.Consistent vs. Current 모드 읽기 6.문장수준 읽기 일관성 SQL문이 수행되는 도중에 다른 트랜잭션에 의해 데이터가 변경,추가,삭제가 된다면 일관성 없는 결과집합을 리턴하거나 값을 잘못갱신하는 문제가 발생할 수 있습니다. 이런 문제를 방지하기 위해 사용하는 ‘문장 읽기 일관성’에 대해서 살펴보겠습니다. (1)문장수준 읽기 일관성이란? 단일 SQL문이 수행되는 도중에 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 일관성 있는 결과집합을 리턴하는 것을 말합니다. 오라클을 제외한 다른 DBMS는 로우 lock을 사용해 dirty read를 방지합니다. 읽기 작업에 대해서는 shared lock을 사용하여 exclusive lock이 걸린 로우를 읽지 못하도록 합니다. 하지만 이것만으로는 문장수준의 읽기 일관성이 완벽하게 보장.. 2019. 12. 20.
CH1.오라클 아키텍처 - 4.Redo , 5. Undo 4.Redo Redo? 오라클은 데이터파일과 컨트롤파일에 가해지는 모든 변경사항을 하나의 Redo 로그 엔트리로써 Redo 로그에 기록합니다. Redo 로그는 Online Redo log와 Archive redo log로 구성됩니다. Online Redo 로그는 redo 로그 버퍼에 버퍼링된 로그 엔트리를 기록하는 파일로써 최소 두 개 이상의 파일로 구성됩니다. 현재 사용 중인 redo 로그 파일이 가득차면 다음 redo 로그 파일로 로그 스위칭이 발생하며, 모든 로그 파일이 가득차면 다시 첫번째 redo 로그 파일부터 재사용하는 라운드 로빈 방식으로 운영되고 있습니다. Archived redo 로그는 online redo 로그가 재사용되기 전에 다른 위치로 백업해둔 파일을 말합니다. archive lo.. 2019. 12. 19.
CH1.오라클 아키텍처 - 3.버퍼 LOCK 1)버퍼 lock이란? 아주 짧은 순간일지라도 두 개 이상의 프로세스가 동시에 버퍼 내용을 읽고 쓴다면, 문제가 생길 수 있습니다. 이를 막기 위해 캐시된 버퍼 블록을 읽거나 변경하려는 프로세스는 먼저 버퍼 헤더로부터 버퍼 lock을 획득해야 합니다. 버퍼 lock을 획득했다면 래치를 곧바로 해제합니다. 또 다른 안정장치를 마련해 두었기때문에 이제 안심하고 블록을 읽고 쓸 수 있습니다. 버퍼 내용을 읽기만 할때는 Share 모드, 변경할 때는 Exclusive 모드로 lock을 설정합니다. 액세스를 직렬화하기 위한 매커니즘이므로 당연히 Exclusive 모드 lock은 한 시점에 하나의 프로세스만 얻을 수 있습니다. Select문이더라도 블록 클린아웃이 필요할 때는 버퍼 내용을 변경하는 작업이므로 Exc.. 2019. 12. 18.
CH1.오라클 아키텍처-2.DB 버퍼 캐시 1절의 기본 아키텍쳐에서 잠깐 알아봤던 시스템들에 대해 좀 더 디테일하게 정리한 내용입니다. 2. DB 버퍼 캐시 오라클은 빠른 데이터입출력을 위해 SGA공유 메모리를 이용하는데, 구체적으로 사용자가 입력한 데이터를 데이터파일에 저장하고 이를 다시 읽는 과정에서 거쳐가는 캐시 영역은 DB 버퍼캐시입니다. 1)블록 단위 I/O 오라클은 블록단위 I/O 단위로 이루어 집니다. 메모리 버퍼 캐시에서 버퍼 블록을 액세스할 때뿐만 아니라, 데이터파일에 저장된 데이터 블록을 DB버퍼 캐시로 적재하거나 캐시에서 변경된 블록을 다시 데이터파일에 저장할때도 블록단위로 처리합니다. 데이터파일에서 버퍼 캐시로 블록을 적재할 때, 인덱스를 경유한 테이블 액세스 시에는 한번에 한 블록씩 읽는 single read block으로.. 2019. 12. 17.