<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Deadlock on Gukin Han</title>
    <link>https://gukin.dev/tags/deadlock/</link>
    <description>Recent content in Deadlock on Gukin Han</description>
    <generator>Hugo</generator>
    <language>ko-kr</language>
    <lastBuildDate>Fri, 08 Aug 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://gukin.dev/tags/deadlock/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>MySQL InnoDB에서 읽기·쓰기 충돌부터 deadlock 로그 분석까지</title>
      <link>https://gukin.dev/posts/innodb-lock-conflict-deadlock-analysis/</link>
      <pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://gukin.dev/posts/innodb-lock-conflict-deadlock-analysis/</guid>
      <description>&lt;h2 id=&#34;요약&#34;&gt;요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MVVC는 트랜잭션 시작점을 기준으로 &lt;strong&gt;데이터 버저닝&lt;/strong&gt;을 한다&lt;/li&gt;
&lt;li&gt;락 종류에 따라 &lt;strong&gt;충돌 상황을 테스트&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;공유락은 말그대로 트랜잭션끼리 공유할 수 있다&lt;/li&gt;
&lt;li&gt;베타락은 말그대로 하나의 트랜잭션만 가진다&lt;/li&gt;
&lt;li&gt;공유락을 가진 상태로 업데이트, 삭제 등을 하면 베타락을 획득하려는 시도를 한다&lt;/li&gt;
&lt;li&gt;락 획득 대기 사이클이 생기면 데드락이 발생한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;데드락을 최소화&lt;/strong&gt;하기 위한 락 설계 방법:
&lt;ul&gt;
&lt;li&gt;락을 잡는 순서를 트랜잭션 마다 동일하게 유지&lt;/li&gt;
&lt;li&gt;락 범위를 축소&lt;/li&gt;
&lt;li&gt;첫 쿼리 부터 for update로 가져오는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;배경&#34;&gt;배경&lt;/h2&gt;
&lt;p&gt;이번 주차는 낙관적 락과 비관적 락을 학습하게 되었다. 비관적 락은 흔히 느리지만 정합성이 중요할때 사용하며, 낙관적 락은 충돌 가능성이 낮을 때 상대적으로 빠른 상황을 요구할때 사용한다고 한다.&lt;/p&gt;</description>
    </item>
    <item>
      <title>DELETE-INSERT 패턴에서 발생하는 InnoDB Deadlock 분석</title>
      <link>https://gukin.dev/posts/delete-insert-innodb-deadlock/</link>
      <pubDate>Mon, 21 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://gukin.dev/posts/delete-insert-innodb-deadlock/</guid>
      <description>&lt;h2 id=&#34;배경&#34;&gt;배경&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;최근 우리 서비스는 Sentry를 통해 데드락 알람을 자주 받고 있다&lt;/li&gt;
&lt;li&gt;처음에는 중복 인덱스를 발견해서 제거하는 작업을 진행했다
&lt;ul&gt;
&lt;li&gt;그럼에도 불구하고 동일한 로직에서 데드락이 발생하는 중이다&lt;/li&gt;
&lt;li&gt;조금은 빈도가 감소했을 수 있는데, 데드락 모니터링과 수집 및 통계화를 다른 회사에서는 어떻게 하는지 리서치가 필요해 보인다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아무튼 데드락을 분석해보니, 동일한 레코드의 DELETE-INSERT가 하나의 트랜잭션 내 수행되는 API에서 발생하였다&lt;/li&gt;
&lt;li&gt;명확한 원인을 파악하고 전략을 세우기 위해 분석을 시도하였다&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;innodb-deadlock-분석&#34;&gt;InnoDB Deadlock 분석&lt;/h2&gt;
&lt;h3 id=&#34;innodb-엔진-내부-상태를-확인하는-방법&#34;&gt;InnoDB 엔진 내부 상태를 확인하는 방법&lt;/h3&gt;
&lt;p&gt;RDMBS 클라이언트에서 위 명령어를 입력:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
