DB ARCHITECTURE

DB ARCHITECTURE

[MSSQL] 격리수준-낙관적 동시성

SQL Server 에서는 "낙관적 동시성(optimistic concurrency)"을 기반으로 하는 두 가지 격리 수준도 제공하고 있다. 1) SNAPSHOT 2) READ COMMITTED SNAPSHOT **행버전 관리를 이용하는 격리 수준 SQL Server에는 커밋된 행들의 이전 버전을 tempdb 에 보관하는 기능이 있다. SQL Server에서는 이러한 행 버전 관리 기술을 기반으로 SNAPSHOT 과 READ COMMITTED SNAPSHOT 이라고 하는 두 가지 격리 수준을 제공한다. SNAPSHOT 격리 수준은 논리적으로는 일관성 문제가 발생하지 않는다는 점에서 SERIALIZABLE 격리 수준과 유사하다. 또한, READ COMMITTED SNAPSHOT 격리 수준은 READ COM..

DB ARCHITECTURE

[MSSQL] 격리수준 - 비관적 동시성

SQL Server에서는 기본적으로 "비관적 동시성(pessimistic concurrency)"을 기반으로 하는 네 가지 형태의 격리 수준을 제공한다 1) READ UNCOMMITED 2) READ COMMITED(On-premises SQL Server의 기본값 ) 3) REPEATABLE READ 4) SERIALIZABLE 1) READ UNCOMMITED READ UNCOMMITTED은 가장 낮은 수준의 격리 수준이다. 이 격리 수준에서는 읽기 작업은 공유 잠금(S-LOCK)을 요청하지 않는다. 읽기 작업에서 공유 잠금(S-LOCK)을 요청하지 않기 때문에 배타적 잠금(X-LOCK)을 유지하고 있는 쓰기 작업과 충돌이 발생하지는 않는다. 이는 읽기 작업에서는 커밋되지 않는 변경사항(dirty r..

DB ARCHITECTURE

[MSSQL] 격리수준

격리 수준은 데이터를 읽고 쓰는 동시 사용자들의 동작을 결정하는 역할을 한다. 읽기 작업이란, 기본적으로 공유 잠금을 이용해서 데이터를 조회(SELECT)하는 모든 구문을 말한다. 쓰기 작업이란, 테이블에 대해 변경(INSERT,UPDATE,DELETE)을 하며 배타적 잠금을 필요로 하는 모든 구문을 말한다. 쓰기 작업에 대한 동작에서 필요로 하는 잠금과 잠금 지속 시간 등에 대해서는 조절을 할 수 없다. 하지만, 읽기 작업에 대해서는 조절이 가능하다. 또한 읽기 작업의 동작을 조절하게 되면 쓰기 동작에도 간접적인 영향을 미칠 수 있다. 이러한 작업을 격리 수준의 설정을 통해 할 수 있다. 격리 수준 설정은 세션 옵션을 이용해서 세션 수준에서 할 수도 있고, 테이블 힌트를 이용해서 쿼리 수준에서 할 수도..

DB ARCHITECTURE

[MSSQL] LOCK

1. 잠금(LOCK) 잠금(lock)이란 다른 트랜잭션에 의한 충돌이나 불완전한 접근을 방지하면서, 데이터를 보호하기 위해 트랜잭션이 소유하는 관리 리소스를 말한다. 2. 잠금 모드와 호환성 트랜잭션과 동시성을 이해하기 위해서는 두 가지 잠금 모드인 배타적(exclusive) 모드와 공유(shared) 모드에 익숙해져야 한다. 데이터를 변경하는 경우(INSERT,UPDATE,DELETE) 트랜잭션의 수준에 상관없이 데이터 리소스에 대해 배타적 잠금(X-LOCK)을 요청하게 된다. 요청이 승인되면 배타적 잠금은 트랜잭션이 끝날 때까지 유지된다. 단일 구문 트랜잭션에서는 잠금이 하나의 구문이 수행완료 될 때까지만 유지되며, 여러 구문으로 된 트랜잭션에서는 모든 구문이 완료된 후 트랜잭션이 COMMIT TRA..

DB ARCHITECTURE

트랜잭션의 정의 및 동작 원리

1. 트랜잭션(Transaction)의 정의 "트랜잭션(Transaction)" 이란, 작업 단위를 말하며, 여기에는 데이터를 쿼리하고 변경하는 다양한 작업뿐만 아니라 데이터의 정의를 변경하는 작업도 포함된다. "트랜잭션(Transaction)"의 개념을 쉽게 풀어보면 "하나의 논리적 단위로 수행되는 일련의 작업" 이라고 볼 수 있다. 이 의미에서 "전부 되거나, 전부 안되거나"의 의미가 포함되어 있다. 트랜잭션의 경계는 명시적으로 지정할 수도 있고, 암시적으로 지정할 수도 있다. 명시적으로는 트랜잭션이 시작되는 부분에 BEGIN TRAN (Begin Transaction) 구문을 사용해서 정의한다. 명시적으로 트랜잭션의 마지막 부분에서는 해당 트랜잭션이 정상적으로 처리가 되었다고 확인되면 COMMIT ..

DB ARCHITECTURE

SQL-SERVER SCHEDULER : sqlserver 스케쥴러(2)

앞에서 스케줄러를 구성하는 컴포넌트에 대하여 알아보았다. 그러면 이제 클라이언트로부터 받은 쿼리를 처리할 때 스케줄러와 작업자가 어떻게 동작하는 지를 순서대로 확인해보자. 흐름의 포인트 CPU의 사용권을 다른 작업자에게 양보하고, 자신은 리소스를 획득할 때 까지 대기 상태가 된다는 것이다. (1) 클라이언트가 SQL 서버에 접속하면 어느 하나의 스케줄러와 링크 된다. (2-1) 클라이언트는 처리를 실행하기 위해 작업자가 필요하다. (2-2) 작업자 스레드 풀에서 사용 가능한 작업자가 존재하는지 확인한다. (2-3) 작업자가 있다면 클라이언트와 작업자를 바인드한다. (3-1) 처리를 실행하기 위해서는 CPU 리소스를 할당 받아야 한다. (3-2) 작업자 A는 러너블 큐에 추가된다. (4-1) 러너블 큐의 ..

DB ARCHITECTURE

SQL-SERVER SCHEDULER : sqlserver 스케쥴러(1)

SQL 서버 내에서 발생하는 대기 상태는 수많이 존재한다. SQL 서버가 비교적 작은 규모로 사용되고 있는 경우는각각의대기 시간을 짧아 크게 문제가 되는 일은 없다. 그러나 SQL 서버가 보다 큰 사이즈의 데이터베이스를 관리하고 보다 많은 클라이언트의 리퀘스트를 효율적으로 처리하기 위해서는 모든 스레드의 스케줄러 관리를 윈도우 스케줄러에만 맡길 게 아니라 DBMS 자체의 컴포넌트를 사용하게된다. SQLOS 스케줄러 SQLOS 스케줄러는 SQL 서버라는 애플리케이션 내부의 컴포넌트이다. SQL 서버는 윈도우 하에서 동작하는 애플리케이션이므로 여전히 윈도우 스케줄러의 지배하에 있다. 윈도우 스케줄러의 지배하에 있으면서 효율적으로 CPU 리소스를 사용케 하는 장치가 SQLOS 스케줄러이다. SQLOS 스케줄러..

DB ARCHITECTURE

SQL-SERVER SCHEDULER : 윈도우 스케쥴러

윈도우 스케쥴러(Windows Scheduler) 란? 윈도우 스케줄러(Windows Scheduler)는 운영 체제 수준에서 프로세스와 스레드의 스케줄링을 담당한다. 이는 CPU 리소스의 할당과 관리, 실행 우선순위 조정, 작업 조율 등을 처리하는 역할을 한다. 윈도우 스케줄러는 다중 작업 환경에서 CPU 사용을 조절하여 여러 프로세스와 스레드가 적절한 시간에 실행될 수 있도록 보장한다. SQL 서버는 멀티 스레드로 동작하는 애플리케이션이다. SQL 서버가 동작하면 하나의 인스턴스 별로 하나의 프로세스가 윈도우상에 생성된다. 생성된 SQL 서버 프로세스는 쿼리의 실행과 같은 다양한 작업을 처리하기 위해 내부적으로 많은 스레드를 생성한다. SQL 서버 프로세스에 의해서 내부적으로 생성된 모든 스레드는 [..

DB ARCHITECTURE

정규화(Normalization)

정규화(Normalization)란? 정규화란, 각각의 엔터티가 하나의 릴레이션에 의해 표현된다라는 것을 보장하는 규칙적인 수학적 과정을 말한다. 정규화된 데이터베이스인 경우에는 데이터를 변경하더라도 논리적인 문제가 발생하지 않으며, 완벽성을 손상시키지 않고서도 데이터 중복을 최소한으로 유지할 수 있다. 정규화에는 대표적으로 1 정규화, 2 정규화, 3 정규화가 존재한다. 제 1 정규화 - 릴레이션(테이블)의 튜플(행)은 반드시 고유해야 한다. - 모든 특성들은 더 이상 분해할 수 없는 원자적이어야 한다. - 쉽게 생각하면 기본키의 특성을 갖는 속성이 있어야 한다. 위의 1 정규화의 정의는 릴레이션에 대한 반복적인 정의라고 볼 수 있다. 즉, 테이블이 진정한 릴레이션이 되려면, 이미 해당 테이블은 1 정..

DB ARCHITECTURE

함수적 종속

함수적 종속이란? 함수적 종속(Functional Dependency)은 관계형 데이터베이스에서 두 개의 속성(Attribute)이나 열(Column) 사이의 종속성을 말한다. 어떤 릴레이션 R이 있을 때 X와 Y를 각각 속성의 부분집합이라고 가정해보자. 여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의 값이 달라질 때, "Y는 X에 함수적 종속된다." 라고 한다. 이 경우 X를 결정자, Y를 종속자라고 한다. 이를 기호로 표현하면 X→Y 이다. 이런 함수적 종속관계에는 아래와 같이 분류할 수 있다. 1. 완전 함수적 종속 2. 부분 함수적 종속 3.이행적 함수 종속 1. 완전 함수적 종속 완전 함수적 종속이란, 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 ..

ssh9308
'DB ARCHITECTURE' 카테고리의 글 목록 (2 Page)