Your SlideShare is downloading. ×
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
2 mysql트랜잭션과잠금 v0
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

2 mysql트랜잭션과잠금 v0

1,232

Published on

mysql

mysql

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,232
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. What is My SQL ? What is My SQL ? # ENTAZ # DB팀 이영훈
  • 2. What is My SQL ? 02 트랜잭션 & 잠금 # 트랜잭션? # MYSQL 격리 수준 # 트랜잭션 구현 # INNODB 엔진 # MYSQL 잠금 # 스토리지엔진 잠금
  • 3. What is My SQL ? 트랜잭션? # 거래를 의미 유재석이 하하에게 2000원을 입금 한다고 가정해보자 name 잔고 name 잔고 유재석 2000 하하 1000 1. 유재석 잔고 -2000 2. 하하 잔고 +2000
  • 4. What is My SQL ? ACID # 원자성(Atomicity) all or noting # 일관성(Consistency) 트랜잭션 후 일관성 있는 데이터베이스 상태를 유지 해야함 # 고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업에 영향을 미치면 안됨 # 지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
  • 5. What is My SQL ? 일관성(Consistency) 트랜잭션 후 일관성 있는 데이터베이스 상태를 유지 해야함
  • 6. What is My SQL ? ACID # 원자성(Atomicity) all or noting # 일관성(Consistency) 트랜잭션 후 일관성 있는 데이터베이스 상태를 유지 해야함 # 고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업에 영향을 미치면 안됨 # 지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
  • 7. What is My SQL ? 고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업에 영향을 미치면 안됨 name 잔고 name 잔고 name 잔고 유재석 2000 하하 1000 박명수 1000 1번 트랜잭션 1. 유재석 잔고 -2000 2. 하하 잔고 +1000 2번 트랜잭션 1. 박명수 잔고 -1000 2. 하하 잔고 +1000
  • 8. What is My SQL ? ACID # 원자성(Atomicity) all or noting # 일관성(Consistency) 트랜잭션 후 일관성 있는 데이터베이스 상태를 유지 해야함 # 고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업에 영향을 미치면 안됨 # 지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
  • 9. What is My SQL ? 지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함 name 잔고 name 잔고 유재석 2000 하하 1000 1. 유재석 잔고 -2000 2. 하하 잔고 +2000 근대 컴퓨터는 모든 연산을 일단 메모리에 적습니다. 메모리의 정보를 하드로 내리죠
  • 10. What is My SQL ? ACID # 원자성(Atomicity) all or noting # 일관성(Consistency) 트랜잭션 후 일관성 있는 데이터베이스 상태를 유지 해야함 # 고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업에 영향을 미치면 안됨 # 지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
  • 11. What is My SQL ? 트랜잭션의 구현 # 원자성(Atomicity) # 일관성(Consistency) 현재 데이터 변경 후 데이터 변경전 데이터 name 잔고 name 잔고 name 잔고 유재석 2000 유재석 0 유재석 2000 name 잔고 name 잔고 하하 1000 하하 1000 유재석이 하하에게 2000원을 입금 한다고 가정해보자 1. 유재석 잔고 -2000 에러 발생! 2. 하하 잔고 +2000
  • 12. What is My SQL ? 트랜잭션의 구현 # 고립성(Isolation) 하하 를 변경하기 전에 락을 걸면 됩니다. 락이 걸리면 그락이 풀리기 전까지는 누구도 접근을 못하니까요 # 지속성(Durability) 하드 디스크에 파일이 적힌 다음에 성공을 리턴하면 됩니다.
  • 13. What is My SQL ? MYSQL 잠금 락? 동시성 일때 정합성을 유지 하기 위해 사용 LOCK = table.getLock() if(LOCK.lock()){ //do something with table LOCK.unLock(); wakeup(); }else{ sleep(); };
  • 14. What is My SQL ? TABLE LOCK # READ LOCK(SHARED LOCK, 공유락) 읽기 전용 락입니다. # WRITE LOCK(EXCLUSIVE LOCK, 배타락) 쓰기 전용 락입니다. U1:READ U2:WRITE TABLE U3:READ U4:READ U5:READ
  • 15. What is My SQL ? # Storage engine lock MyIsam ROCK InnoDB ROCK 2.ROW 3.ROW 4.ROW 5.ROW 6.ROW
  • 16. What is My SQL ? MYSQL 잠금 # GLOBAL LOCK MY SQL 서버 전체에 락을건다. # TABLE LOCK 테이블 단위로 락을 건다 # USER ROCK 문자열에 락을 걸 수 있다 # NAME LOCK RENAME TABLE rank TO rank_backup, rank_new TO rank;
  • 17. What is My SQL ? 트랜잭션 격리 수준 # 고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업에 영향을 미치면 안됨 # Isolation level 트랜잭션 끼리 서로 얼마 만큼의 영향을 줘도 되는가?
  • 18. What is My SQL ? 고립성 레벨(Isolation Level) 1. sersializable 4 repeatable read 3 read commiteed 2 read uncommitted 1 name 잔고 name 잔고 name 잔고 유재석 2000 하하 1000 박명수 1000 1번 트랜잭션 1. 유재석 잔고 -2000 2. 하하 잔고 +1000 2번 트랜잭션 1. 박명수 잔고 -1000 2. 하하 잔고 +1000
  • 19. What is My SQL ? 고립성 레벨(Isolation Level) 1. read uncommitted 1 name 잔고 name 잔고 유재석 2000 하하 1000 1번 트랜잭션 1.start tran 2. 유재석 잔고 -2000 3. 하하 잔고 +2000 8. 에러! 9. commit 2번 트랜잭션 0. 1000 3. 2000 4.start tran 5.하하 잔고 읽기 2000 6.먼가함 7.commit; 9.1000 커밋 되지 않은 데이터를 읽는다 Dirty read!
  • 20. What is My SQL ? 고립성 레벨(Isolation Level) 2. read committed 2 name 잔고 유재석 2000 1번 트랜잭션 1.start tran 2. 유재석 잔고 -2000 3. 하하 잔고 +2000 name 잔고 하하 1000 테이블 0. 1000 3. 3000 7. 3000 7. commit UNDO 1000 2번 트랜잭션 4.start tran 5.하하 잔고 읽기 1000 6.먼가함 8. 다시 하하 잔고 읽기 3000 ?????? 트랜잭션 안에서 참조했던 값이 변경된다! NON-REPATAIBLE READ!
  • 21. What is My SQL ? 고립성 레벨(Isolation Level) 3. REPEATABLE-READ 3 name 잔고 유재석 2000 1번 트랜잭션 T1 1.start tran 2. 유재석 잔고 -2000 3. 하하 잔고 +2000 name 잔고 하하 1000 테이블 1000 T1: 3000 T1:1000 T1: 3000 7. commit UNDO 2번 트랜잭션 T2 4.start tran 5.하하 잔고 읽기 1000 6.먼가함 8. 다시 하하 잔고 읽기 1000 ??????
  • 22. What is My SQL ? 고립성 레벨(Isolation Level) PHANTOM READ 1번 트랜잭션 T1 1.start tran 2.SELECT id FROM T1 WHERE id > 2 FOR UPDATE = 3,5 3.먼가 처리 5.SELECT id FROM T1 WHERE id > 2 FOR UPDATE = 3,5,6 ???? T1 id 1 3 5 2번 트랜잭션 T2 4.INSERT INTO T VALUE(6); id 1 3 5 6
  • 23. What is My SQL ? Isolation level # 저희 회사에서는 reapetable read 를 사용하고 있습니다. 즉 트랜잭션을 사용한다면 위와 같은 에러를 신경쓰지 않으셔도 됩니다. # 만약 사용하지 않는다면?
  • 24. What is My SQL ? # INNODB ENGINE InnoDB 버퍼풀 Undo 레코드 데이터페이지 버퍼 인설드버퍼 머지 쓰레드 redo 로그 메모리 영역 Insert 버퍼 write 쓰레드 기타 쓰레드 인덱스 파일 데이터 파일 로그 쓰레드 쓰레드 영역 디스크 스토리지 영역
  • 25. What is My SQL ? # 자주 쓰는 storage engine InnoDB MyISAM Archive 트랜잭션 지원 X X 락 레벨 로우(인덱스락) 테이블 로우 인덱스 지원 지원 X 캐쉬 데이터/인덱스 X 인덱스 파티셔닝 지원 지원 지원 클러스터 인덱스 디폴트 X X 사용용도 OLTP 로그수집 원시로그수집
  • 26. What is My SQL ? Innodb Next key lock PHANTOM READ 1번 트랜잭션 T1 1.start tran 2.SELECT id FROM T1 WHERE id > 2 FOR UPDATE = 3,5 3.먼가 처리 5.SELECT id FROM T1 WHERE id > 2 FOR UPDATE = 3,5,6 ???? T1 id 1 3 5 2번 트랜잭션 T2 4.INSERT INTO T VALUE(6); id 1 3 5 6 Integer 범위 입니다. MIN_INT ~~~ -1, -2,1,2,3,~~~~ MAX_INT
  • 27. What is My SQL ? Innodb Next key lock 1번 트랜잭션 T1 1.start tran 2.SELECT id FROM T1 WHERE id > 2 = 3,5 T1 id 1 3 5 에 거는게 아니라 2보다 큰 모든 숫자에 걸어 버리는겁니다 2.SELECT id FROM T1 WHERE id > 3 AND id < 5 이럴경우는 3,4,5 에겁니다. 4는 없는대 락이걸렸습니다 gap lock 이라고 부름니다. Integer 범위 입니다. MIN_INT ~~~ -1, -2,1,2,3,~~~~ MAX_INT Inndb next key lock = index lock + gap lock
  • 28. What is My SQL ? Innodb Next key lock T1 key_T1_id id name id 1 안녕 1 2 박명수 2 3 하하 3 4 유재석 4 UPDATE T1 SET name = ‘안녕’ WHERE name = ‘안녕’ … 어떻게 될까요 ? Innodb 는 next key lock = index lock + gap lock

×