목록DB (25)
솜은 코튼
3단계 데이터베이스 . 데이터베이스 구조와 제약조건에 대한 명세를 기술한 것을 '스키마'라 한다. 스키마에는 데이터 구조를 표현하는 '개체', 개체의 특성을 표현하는 '속성', 이들 간에 존재하는 관계에 대한 정의와 이들이 유지해야 될 '제약조건'이 포함된다. 데이터 관리 측면에서는 데이터를 이용하는 각 개인의 뷰, 이런 각 개인의 모든 뷰가 종합된 기관 전체의 뷰, 그리고 시스템 즉 물리적 저장 장치의 입장에서 보는 저장 장치의 뷰 등 세 단계로 구별하여 데이터베이스를 기술하고 관계를 정의한다. 이 각 단계에서의 스키마를 외부 스키마, 개념 스키마, 내부 스키마라 한다. 외부 스키마 . 개별적 사용자 단계로서 개인적 데이터베이스 구조에 관한 것이다. 응용 프로그램이나 사용자에 관련된 개체와 관계만이 포..
교착상태 . 교착상태란 모든 트랜잭션들이 실행을 전혀 진전시키지 못하고 무한정 기다리고 있는 상태를 말한다. 위의 그림은 T1과 T2가 모두 교착상태에 있는 예를 보여준다. T1은 T2가 x를 unlock 시키기를 기다리고 있고 T2는 T1이 y를 unlock 시키기를 기다리고 있다. 이렇게 되면 다른 트랜잭션도 x와 y에 접근하지 못한다. 교착상태 필요충분조건으로는 '상호배제', '대기', '선취 금지', '순환 대기' 등 네 가지 조건이 모두 만족되어야 한다. 교착상태 문제에 대한 해결책은 '회피', '예방', '탐지' 등 세 가지 방법이 있다. 회피는 자원을 할당할 때마다 교착상태가 일어나지 않도록 실시간 알고리즘을 사용하여 검사하는 방법이다. 예방은 트랜잭션을 실행시키기 전에 교착상태 발생이 불가..
로킹 기법 . 트랜잭션의 병행 제어를 위해 사용되는 기법 중 하나는 '로킹(locking)'이다. 로킹은 상호 배제, 즉 독점 제어를 제공한다. 또한 lock이 걸린 데이터 아에팀은 lock을 걸은 트랜잭션에 의해서만 unlock 할 수 있다. 로킹 기법 하에서 모든 트랜잭션은 로킹 규약을 지켜야 한다. 1 트랜잭션 T가 read(x)나 write(x) 연산을 하려면 반드시 lock(x) 연산을 실행해야 한다. 2 트랜잭션 T가 실행한 lock(x)에 대해서는 T가 모든 실행을 종료하기 전에 unlock(x) 연산을 실행해야 한다. 3 트랜잭션 T는 이미 lock가 걸려 있는 x에 대해 다시 lock(X)를 실행시키지 못한다. 4 트랜잭션 T는 x에 lock을 자기가 걸지 않았다면 unlock(x)를 실..
직렬 가능성 검사 . 직렬 가능 스케줄인지 판단하는 것은 중요하다. 그러나 뷰 직렬 가능성을 판단하기 위한 효율적인 알고리즘은 없다고 증명되었다. 대부분의 병행성 제어 기법에서는 실제로 직렬성 검사를 하지 않는다. 대신 직렬 가능 스케줄을 보장하는 규약이나 규칙등을 개발해서 스케줄에 참여하고 있는 모든 트랜잭션들이 이 규약을 준수하게 만드는 것이다. 알고리즘은 '판독'과 '기록' 연산만 점검한다. 스케줄 S가 직렬 가능한가를 검사하기 위해서는 스케줄에 대한 '선행 그래프'를 만들어야 한다. 만약 구축된 선행 그래프에서 사이클이 있으면 스케줄 S는 충돌 직렬 가능이 아니고 사이클이 없으면 직렬 가능이다. [알고리즘] 스케줄의 충돌 직렬 가능성 검사 1 스케줄 S에 포함된 각 트랜잭션 Ti에 대해 선행 그래..
2023.06.02 - [DB] - [DB] 트랜잭션 스케줄 [DB] 트랜잭션 스케줄 2023.06.02 - [DB] - [DB] 병행 제어 (동시 공용 문제점) [DB] 병행 제어 (동시 공용 문제점) 병행 제어 . 복수 사용자 DBMS는 병행성을 지원하며, 병행성은 몇 개의 트랜잭션들을 동시에 실행시키는 것이다 sommda.tistory.com 뷰 동등과 뷰 직렬 가능 스케줄 두 스케줄 S와 S'에 포함된 트랜잭션들이 모두 같고 다음 조건을 만족하면 스케줄 S와 S'는 '뷰 동등'이라 한다. 1 각 데이터 아이템 x에 대해 스케줄 S에서 x의 초기값을 Ti가 읽는다면 스케줄 S'에서도 x의 초기값을 T1가 읽어야 한다. 2 스케줄 S에서 트랜잭션 Ti가 수행하는 모든 read(x) 연산이 x값이 트랜..
2023.06.02 - [DB] - [DB] 병행 제어 (동시 공용 문제점) [DB] 병행 제어 (동시 공용 문제점) 병행 제어 . 복수 사용자 DBMS는 병행성을 지원하며, 병행성은 몇 개의 트랜잭션들을 동시에 실행시키는 것이다. 동시에 사용할 수 있는 이유는 복수의 프로그램 또는 트랜잭션을 동시에 처리할 sommda.tistory.com 트랜잭션 스케줄 . 이전 글에서의 문제들의 원인은 공용하는 충돌된 데이터를 통해 트랜잭션들 사이에 간섭이 일어나기 때문이다. 충돌이란 두 개의 연산이 각각 상이한 트랜잭션에 속하고 있으면서 동일한 데이터 아이템을 처리 대상으로 하고 있고 이때 적어도 하나의 연산은 기록 연산이 되는 경우를 말한다. 연산의 인터러빙이 허용된다면 트랜잭션들의 개개 연산들을 실행시킬 수 있..
병행 제어 . 복수 사용자 DBMS는 병행성을 지원하며, 병행성은 몇 개의 트랜잭션들을 동시에 실행시키는 것이다. 동시에 사용할 수 있는 이유는 복수의 프로그램 또는 트랜잭션을 동시에 처리할 수 있는 다중프로그래밍 때문이다. 그러나 병행실행을 제어하지 않는다면 정확성이 없는 데이터가 만들어질 수 있다. 문제점 . 1. 갱신 분실 위에서 T1이 레코드 x를 판독하고 x의 값을 100만큼 증가시킨 뒤 T2가 다시 레코드 x를 판독하여 x의 값을 두 배로 변경하였다. 그 뒤에 T1은 자기가 변경시킨 값 x를 재기록 하였고 T2도 자기가 변경시킨 값 x를 재기록 하였다. 여기서 T1의 갱신 연산은 T2가 겹쳐 기록하여 분실되었다. 즉, T2만 갱신한 결과가 되고 T1의 갱신 연산은 무효가 된 것이다. 2. 모순..
그림자 페이징 기법 . 로그를 이용하지 않는 회복 기법으로 그림자 페이징이 있다. 데이터베이스는 페이지(page)라고 하는 일정 크기의 블록으로 나뉘어 디스크에 저장된다. 이 페이지들은 특별한 순서로 디스크에 저장되어야 하는 것은 아니지만 i번째 페이지를 디스크에서 찾을 수 있는 방법이 있어야 한다. 이 기능은 보통 '페이지 테이블' 또는 '디렉터리'가 지원하고 있다. 페이지 테이블에는 데이터베이스 페이지에 대응하는 n개의 엔트리가 있고 각 엔트리는 디스크에 있는 해당 페이지를 가리키는 포인터를 포함하고 있다. 트랜잭션을 실행하는 동안 '현 페이지 테이블'과 '그림자 페이지 테이블'을 유지하는 것이다. 처음 트랜잭션이 실행되면 두 페이지 테이블은 똑같지만 실제 실행하는 과정에서는 현 페이지 테이블만 사용..
검사시점 회복 . 앞에 말한 로그를 이용하는 기법에서는 Redo와 Undo를 해야 될 트랜잭션을 결정하기 위해서 로그 전체를 조사해야 된다. 이것은 시간이 너무 많이 걸릴 뿐만 아니라 할 필요가 없는 트랜잭션을 또다시 Redo해야 되는 문제가 생긴다. 이 문제점을 해결하기 위한 방법이 '검사시점(checkpoint) 방법'이다. 이 방법은 트랜잭션을 수행하는 동안 앞에서 설명한 로그를 기록 유지하면서 일정한 시간 간격으로 검사시점을 만들어 놓고 다음 작업을 한다. 1 메인 메모리(로그 버퍼)에 있는 모든 로그 레코드를 안정 저장소로 출력 2 변경된 데이터 버퍼 블록을 전부 디스크로 출력 3 검사 시점 표시로써 로그 레코드를 안정 저장소에 출력 (여기서 L은 현재 실행 중에 있는 트랜잭션들의 리스트이다.)..
2023.06.02 - [DB] - [DB] 로그 이용 회복 [DB] 로그 이용 회복 2023.06.02 - [DB] - [DB] 트랜잭션 [DB] 트랜잭션 트랜잭션 . 트랜잭션은 하나의 논리적 기능을 수행하기 위한 작업의 단위로서 데이터베이스의 일관된 상태를 또 다른 일관된 상태로 변환시킨다. 트랜 sommda.tistory.com 즉시 갱신의 회복 . 즉시 갱신 회복 기법은 트랜잭션이 연산을 실행하고 있는 활동 상태에서 데이터의 변경 결과를 데이터베이스에 그대로 반영한다. 활동성 완료가 안 된 트랜잭션에 의해 데이터베이스에 반영된 갱신을 '미완료 갱신'이라 한다. 시스템 붕괴나 트랜잭션 장애가 일어나면 트랜잭션이 실행되기 전 상태의 데이터 값으로 복원시키는데 이때는 로그 레코드의 옛 값이 사용된다. ..