윈도우 스케쥴러(Windows Scheduler) 란?
윈도우 스케줄러(Windows Scheduler)는 운영 체제 수준에서
프로세스와 스레드의 스케줄링을 담당한다.
이는 CPU 리소스의 할당과 관리, 실행 우선순위 조정, 작업 조율 등을 처리하는 역할을 한다.
윈도우 스케줄러는 다중 작업 환경에서 CPU 사용을 조절하여
여러 프로세스와 스레드가 적절한 시간에 실행될 수 있도록 보장한다.
SQL 서버는 멀티 스레드로 동작하는 애플리케이션이다.
SQL 서버가 동작하면 하나의 인스턴스 별로 하나의 프로세스가 윈도우상에 생성된다.
생성된 SQL 서버 프로세스는 쿼리의 실행과 같은 다양한 작업을 처리하기 위해
내부적으로 많은 스레드를 생성한다.
SQL 서버 프로세스에 의해서 내부적으로 생성된 모든 스레드는
[윈도우 스케줄러]에 의해서 CPU 리소스의 사용 상황이 관리된다.
즉, SQL 서버 이외의 프로세스, 예를 들어 특정 프로그램이 생성한 프로세스에 의해서
작성된 스레드와 비슷한 취급을 받는 것을 의미한다.
CPU를 사용하던 SQL 서버 프로세스의 특정 스레드가
타임 슬라이스를 넘은 경우에는 다른 스레드에 사용권을 양보한다.
또한 CPU를 사용하던 SQL 서버 프로세스의 스레드가 대기 상태에 들어간 경우에도
마찬가지로 다른 스레드에게 사용권을 건넨다.
여기에서 SQL 서버가 작성한 각 스레드의 문맥 교환 발생 타이밍의 타당성을 생각해 봐야 한다.
우선 타임 슬라이스의 경우,
사용 가능한 시간을 구분해서 CPU 리소스를 효율적으로 각 스레드 간에서 공유하는 룰은
SQL 서버 프로세스 내의 스레드 처리 내용에 아무런 악영향을 미치지 않으며 당연히 적용되어야 한다.
대기 시간에 의한 문맥교환에 관해서는
SQL 서버 프로세스 내의 스레드가 윈도우 스케줄러가 판단 가능한 대기 상태 (I/O 대기 등)가 된 경과,
문맥 교환이 발생하는 점은 문제가 없다.
하지만 염려해야 할 점은 SQL 서버 프로세스 내의 스레드가
윈도우 스케줄러가 판단할 수 없는 대기 상태가 된 경우이다.
윈도우 스케줄러가 인식할 수 없는 대기 상태 두 가지
1. 데이터베이스 내의 락(LOCK) 대기 상태
SQL 서버와 기타 데이터베이스 관리 시스템에서는
저장한 데이터의 일관성을 유지하기 위해 락(LOCK) 기능을 갖고 있다.
어느 쿼리가 데이터를 갱신하기 위해서는 우선,
목적으로 하는 데이터에 배타적(exclusive)으로 액세스 하기 위한 락(LOCK)을 획득할 필요가 있다.
이미 다른 쿼리가 같은 데이터에 락을 획득한 경우에는 그것이 해제되기까지 기다려야 한다.
2. SQL 서버 내의 병렬처리 수행
복수의 CPU 또는 코어가 탑재되어 있는 컴퓨터에서는 SQL 서버는 병렬처리를 수행하는 경우가 있다.
병렬처리의 이점은 하나의 쿼리가 복수 스레드에 분할되어 실행됨으로써
퍼포먼스의 향상을 기대할 수 있다는 점이다.
병렬처리 되는 경우 쿼리의 다양한 단계에서 필요에 따라
부모 스레드가 처리에 필요한 수의 자식 스레드를 동작시킨다.
각 자식 스레드에는 쿼리 결과 세트의 일부분을 취득하기 위한 작업이 할당된다.
모든 자식 스레드의 처리가 완료된 단계에서 부모 스레드가
각각의 결과세트를 병합해서 클라이언트에 건넨다.
대부분의 경우 각각의 자식 스레드는
가장 빨리 처리가 완료되는 자식스레드부터 응답이 있어도
부모 스레드 작업 완료처리가 불가능 하다.
즉, 가장 처리가 느린 자식 스레드의 처리가 완료될 때까지 기다려야 한다.
이러한 대기 시간 중의 스레드가 CPU 리소스를 할당받았다고 해도 역시 리소스의 낭비이다.
또한 이러한 대기 상태도 SQL 서버 내부에서 발생한 것이므로 윈도우 스케줄러는 판단할 수 없다.
즉, 병렬로 처리를 실행함으로써 발생하는 오버헤드도 있다.
'DB ARCHITECTURE' 카테고리의 다른 글
SQL-SERVER SCHEDULER : sqlserver 스케쥴러(2) (7) | 2021.12.15 |
---|---|
SQL-SERVER SCHEDULER : sqlserver 스케쥴러(1) (0) | 2021.12.15 |
정규화(Normalization) (0) | 2021.08.02 |
함수적 종속 (0) | 2021.07.30 |
제약조건(Constraint) 이란 (0) | 2021.07.29 |