<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PESSIMISTIC_WRITE on 42Class</title><link>https://42class.com/tags/pessimistic_write/</link><description>Recent content in PESSIMISTIC_WRITE on 42Class</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Wed, 03 Feb 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://42class.com/tags/pessimistic_write/index.xml" rel="self" type="application/rss+xml"/><item><title>Spring DATA JPA in MySQL에서 Pessimistic Lock(비관적 락) 처리</title><link>https://42class.com/posts/spring-data-jpa-in-mysql%EC%97%90%EC%84%9C-pessimistic-lock%EB%B9%84%EA%B4%80%EC%A0%81-%EB%9D%BD-%EC%B2%98%EB%A6%AC/</link><pubDate>Wed, 03 Feb 2021 00:00:00 +0000</pubDate><guid>https://42class.com/posts/spring-data-jpa-in-mysql%EC%97%90%EC%84%9C-pessimistic-lock%EB%B9%84%EA%B4%80%EC%A0%81-%EB%9D%BD-%EC%B2%98%EB%A6%AC/</guid><description>&lt;p&gt;&lt;img src="https://42class.com/img/title_jpa.png" alt="" loading="lazy" class="gallery-image"&gt;
&lt;/p&gt;
&lt;p&gt;WMS운영 중 비정상적인 락 처리 현상이 있어 확인한 결과 공유드립니다.
Spring DATA JPA in MySQL에서 Pessimistic Lock(비관적 락) 처리&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;락 어논테이션으로 처리 : @Lock(LockModeType.PESSIMISTIC_WRITE)&lt;/li&gt;
&lt;li&gt;쓰기,읽기 모두 lock를 거는 방식이지만 실제로는 읽기에 대핸 lock이 걸리지 않음&lt;/li&gt;
&lt;li&gt;읽기도 lock을 걸려면, 해당 row에 접근하는 select 쿼리에 모두 for update구문을 걸어줘야 함(@Lock(LockModeType.PESSIMISTIC_WRITE))&lt;/li&gt;
&lt;li&gt;해당 락은 row level lock이지만 mysql innoDB의 락 처리 방식은 인덱싱 되지 않은 조건으로 선별 된 row에 대해선 row level로 락은 잡지 못함&lt;/li&gt;
&lt;li&gt;mysql innoDB는 인덱싱 범위에 대해서 락을 잡는 방식으로 인덱싱 되지 않은 조건으로 선별 된 select결과는 row가 아닌 테이블이 락이 걸리는 현상이 발생됨&lt;/li&gt;
&lt;li&gt;락을 걸어야 하는 데이터 셋의 검색조건은 인덱싱된 컬럼을 기준으로 잡아야 함&lt;/li&gt;
&lt;li&gt;JPA에서 lock scope범위에 따라 릴레이션 된 모델들도 함께 락이 잡히게 됨&lt;/li&gt;
&lt;li&gt;대상 테이블만 락의 범위로 잡으려면 scope를 지정해줘야 함&lt;/li&gt;
&lt;li&gt;락 범위 어논테이션으로 처리 : @QueryHints(value = {@QueryHint(name = &amp;ldquo;javax.persistence.lock.scope&amp;rdquo;, value = &amp;ldquo;NORMAL&amp;rdquo;)})&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>