일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- secret코드
- 3계층구조
- 메뉴바
- 네비게이션 한번에
- 레포지토리
- .env
- 토큰
- N+1문제
- N+1
- JSON Web Token
- element.style
- Winston
- getComputedStyle
- JWT 쓰는 방법
- JWT
- 게시글 이미지 업로드
- 패스파라미터
- 환경변수
- 부트캠프
- 알림생성
- 포트번호
- 알림생성모듈
- 쿼리스트링
- 메뉴바 한번에
- route 53
- 스테이지어스
- 게시글 이미지
- 이미지가 포함된 게시글
- JWT 쓰는이유
- unnest
- Today
- Total
기주
[DB] 트랜잭션 동시에 실행해서 성능올리기 ( confilct serializable한 nonserial schedule을 허용하기 ) 본문
[DB] 트랜잭션 동시에 실행해서 성능올리기 ( confilct serializable한 nonserial schedule을 허용하기 )
기주그지마 2024. 4. 8. 17:25
- nonserial schedule(논시리얼 스케쥴) : 트랜잭션이 순차적이지않고 겹쳐서 실행되는 스케쥴
장점)
- 트랜잭션이 겹침
- 동시성이 올라간다 (성능이 향상된다)
- I/O작업마다 다음 트랜잭션 동작 실행한다
(I/O 입출력 작업은 CPU가 유휴상태로 있는 작업이다. 그래서 CPU가 유휴상태로있는 시간동안 다른 트랜잭션의 동작을 실행함으로써 CPU의 유휴시간이 줄어들고 성능이 좋아진다.)
단점)
- 결과가 이상해질 수 있다
(동시에 트랜잭션을 수행하다보니 잘못된 값을 읽거나 써서 결과가 이상해질 수 있다)
- serial schedule(시리얼 스케쥴) : 트랜잭션이 순차적으로 수행되는 스케쥴
장점)
- 결과가 이상해질 가능성이 없다
(하나의 트랜잭션이 완전히 끝나고 다음 트랜잭션이 수행되기때문에 결과가 이상해질 가능성이없음)
단점)
- 동시성이 떨어져서 성능이 저하된다.
- CPU가 노는 구간(I/O작업)이 많이 생긴다.
성능이 좋으면서 결과가 이상해지지 않으려면?)
-> "Conflict Serializable한 논시리얼 스케쥴을 허용하자!"
-> 어떤 시리얼 스케쥴과 하나라도 Conflict equivalent하다면 그 스케쥴은 Conflict Serializable하다
-스케쥴 : 여러 트랜잭션들이 동시에 실행될때, 각 트랜잭션에 속한 operation들의 실행순서
-> 각 트랜잭션내 operation들의 순서는 바뀌지 않는다
-operation : 실행되는 하나의쿼리
- Conflict : 세가지 조건을 모두 만족하면 Conflict 성립
(두 operation 사이에서)
다음의 세가지조건을 만족하면 Conflict 성립
- 서로 다른트랜잭션소속
- 같은 데이터에 접근
- 최소하나는 write operation
-> conflict 관계에 있는 operation은 순서가 바뀌면 결과도 바뀐다
-Conflict Equivalent : 두조건 모두 만족하면 Conflict Equivalent 성립
(두 스케쥴 사이에서)
- 두 스케쥴은 같은 트랜잭션들을 가진다
- 어떤 Conflict Operations의 순서도 양쪽 스케쥴이 모두 동일하다
-*Conflict Serialzable : 시리얼 스케쥴과 Conflict Equivalent 하다
concurrency control : 어떤스케쥴도 serializable하게 만드는 것
다양한 Isolation Level(격리수준)을 적절히 이용해서 동시성을 조절할 수 있다
isolation level을 높이면 serializable 수준이 올라가고 트랜잭션이 순차적으로 실행됨에따라 성능이 떨어진다(동시성하락)
'TIL' 카테고리의 다른 글
[ERROR] ReferenceError: exports is not defined in ES module scope (0) | 2024.05.28 |
---|---|
Express static (0) | 2024.05.25 |
[DB] soft delete 논리삭제 (0) | 2024.04.05 |
N+1 문제 해결하기 (0) | 2024.04.05 |
3계층구조) (0) | 2024.04.05 |