[OS] 스케줄링
·
OS
CPU 스케줄링에 대해 알아보기 전,지금의 CPU 스케줄링이 있기 전까지 어떤 방식의 스케줄링이 있었고, 결국에 어떤 평가 항목이 지금의 스케줄링을 만들었는지 알아보았다. 먼저 시스템에 실행중인 프로세스에 대해 가장 이상적인 가정을 하고 가정을 하나씩 제거하면서 스케줄링에 대한 역사를 알아보겠다.가정모든 작업은 같은 시간동안 시행모든 작업은 동시에 도착각 작업은 시작되면 완료될 때 까지 수행모든 작업은 CPU만 사용 (입출력 x)각 작업의 실행시간은 사전에 알려져있음 스케줄링 평가항목반환 시간이라는 개념을 도입한다. 반환시간은 작업이 완료된 시간 ~ 작업이 시스템에 도착한 시간의 차이다.공정성이라는 개념은, 성능과는 상충되는 개념으로 성능 극대화를 위해 몇몇 작업을 중지시키면 공정성이 악화된다. 선입선출..
[MySQL] InnoDB 스토리지 엔진 잠금
·
Database
InnoDB 스토리지 엔진은 이전에 봤던 MySQL 엔진 레벨의 잠금과 별개로, 스토리지 엔진 내부에서 레코드 기반의 잠금방식을 지원한다. 이전에는 InnoDB 스토리지 엔진에서 사용되는 잠금에 대한 정보가 얻기 어려웠는데최근 버전에는 MySQL 서버에 존재하는 information_schema 데이터베이스에 존재하는INNODB_TRX, INNODB_LOCKS, INNODB_LOCK_WATES 라는 테이블을 조인해서 조회 시 확인할 수 있다. InnoDB는 기본적으로 MVCC를 이용한 낙관적인 동시성 제어를 지원하지만특정 상황에 S-Lock, X-Lock을 이용해 비관적인 동시성 제어를 사용한다.X-Lock배타적 락이라고도 불리는 이 잠금은, read/write에 대한 잠금이다.SELECT .. FOR ..
[MySQL] MySQL 엔진의 잠금
·
Database
MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치지만, 스토리지 엔진 레벨의 잠금은 스토리지 엔진 간 상호 영향을 미치지 않는다. MySQL 엔진에서는 테이블 데이터 동기화를 위한 테이블 락 이외에도 테이블의 구조를 잠그는 메타데이터 락,그리고 사용자 필요에 맞게 사용할 수 있는 네임드 락을 제공하는데, 이번에는 MySQL 엔진 레벨의 잠금에 대해 공부해보았다. 글로벌 락글로벌 락은 MySQL이 제공하는 잠금 중에서 가장 범위가 크다.일단 한 세션에서 글로벌 락을 획득하면, 다른 세션에서 실행한 SELECT를 제외한 대부분의 DDL과 DML이 대기 상태로 남는다.글로벌 락이 미치는 범위는 MyS..