IT/DB2019. 10. 31. 14:55SELECT ... FOR UPDATE 문 관련 Dead Lock 문제

MySQL 기준.. 1. "SELECT ... FOR UPDATE"란? 하나 또는 특정 범위의 row에 대해 여러 세션에서 접근하여 발생할 수 있는 동시성 문제를 해결하기 위해 이용할 수 있다. "SELECT ... FOR UPDATE" 쿼리를 실행하면(auto commit 모드를 비활성화 시킨 후에 "SELECT ... FOR UPDATE" 쿼리 실행해야 한다), Intention Lock(table-level) 걸린 후, Exclusive Lock(row-level) 걸리게 된다. 2. "SELECT ... FOR UPDATE" 이슈 => 존재하지 않는 데이터에 대해서는 모든 세션에서 "SELECT FOR UPDATE"/"UPDATE"/"DELETE" 문을 실행할 수 있는데, 데이터 수가 1개 이상인..

IT/DB2019. 10. 24. 09:30Shared/Exclusive Lock 개념

1) Shared Lock = Read Lock SELECT 실행 => Shared Lock 설정 => Shared Lock이 걸린 데이터를 다른 트랜잭션들이 단순히 읽어 들여 Shared Lock을 계속 걸 수는 있지만 UPDATE/DELETE 실행(Exclusive Lock)은 불가능하다. 역시, 다른 트랜잭션에 의해 Exclusive Lock(INSERT/UPDATE/DELETE)이 걸린 데이터에는 Shared Lock(SELECT)을 걸 수 없어 읽을 수 없다. 2) Exclusive Lock = Write Lock INSERT/UPDATE/DELETE 실행 => Exclusive Lock 설정 => 해당 트랜잭션이 완료될 때까지 유지되어 다른 트랜잭션은 해당 데이터에 접근(SELECT/UPDAT..

IT/DB2019. 10. 24. 01:46Isolation(격리) Level에 대한 정리

[Read Uncommitted] 트랜잭션에서 처리(SELECT/INSERT/UPDATE/DELETE)중에 있는 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다 [Read Committed] 트랜잭션들이 Commit된 데이터만 읽게 함으로써 Dirty Read를 막는다. Commit된 데이터만 읽더라도 읽는 시점에 따라 결과가 다를 수 있어서 Non-Repeatable Read와 Phantom Read 현상이 발생할 수 있다. 한 트랜잭션 내에서 쿼리를 두 번 수행할 경우, 두 쿼리 사이에서 다른 트랜잭션에 의해 해당 데이터가 UPDATE/DELETE되거나 새로운 데이터가 INSERT되는 일이 발생할 수 있다. [Repeatable Read] 트랜잭션 내에서 쿼리를 두 번 이상 수행할 경..

IT/DB2018. 9. 20. 10:38JOIN ON 절과 WHERE 절에 IS NULL 조건 사용 시의 차이점

참고: - https://stackoverflow.com/questions/6630887/using-is-null-or-is-not-null-on-join-conditions-theory-question- https://community.teradata.com/t5/General/Is-Null-conditions-in-ON-Join-Vs-Is-Null-in-Where/td-p/50758 1. JOIN ON 절에 IS NULL 체크 관련 쿼리문 예시select *from TB_PARENT P with(nolock)left outer join TB_CHILD C with(nolock)on P.pid = C.pid and C.pid is null결과: JOIN ON 조건문은 테이블들이 서로 JOIN되는 과정에..

IT/DB2018. 5. 15. 18:01MSSQL 특정 월의 N번째 특정 요일에 해당하는 날짜 찾기

>참고: http://www.dbguide.net/dbqna.db?cmd=view&boardUid=143789&boardConfigUid=31&boardStep=0&categoryUid=206 >참고: https://www.codeproject.com/Tips/81400/Useful-DateTime-Functions -- 특정 월의 N번째 특정 요일에 해당하는 날짜 찾기DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,[특정 요일을 구하는 경우의 N번째주에 존재할 수 있는 최대일수]-datepart(day,[MONTH]),[MONTH])), [DAY])ㄴ [특정 요일을 구하는 경우의 N번째주에 존재할 수 있는 최대일수] ex1) 일요일 => 첫번째주:7, 두번째주:14, 세번째주:21,..

IT/DB2018. 2. 14. 10:02ACID (트랜잭션의 특성 관련..)

ACID (트랜잭션의 특성 관련..) 원자성(Atomicity)은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.일관성(Consistency)은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.고립성(Isolation)은 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한..

IT/DB2018. 1. 27. 18:40Index Scan vs Index Seek

출처 : http://blog.naver.com/PostView.nhn?blogId=waws01&logNo=60181424769&redirect=Dlog&widgetTypeCall=true ★ Best 실행계획은 Clustered Index Seek (Clustered) 이다!!! ====================================================================================CREATE TABLE tmp_myfan( fan_id INT NOT NULL -- 고유값 , fan_name NVARCHAR(20) NOT NULL -- 날조아하는여학생명 , fan_feel FLOAT NOT NULL DEFAULT 0 -- 호감지수 , fan_gift NVAR..

image