MariaDB Deadlock 재현과 원인 추적 — 두 세션 잠금 순서로 이해하기
도입 Deadlock은 두 트랜잭션이 서로 상대방의 잠금 해제를 기다리는 순환 대기다. InnoDB는 이를 감지하면 한 트랜잭션을 희생시켜 오류 1213을 반환하고 다른 트랜잭션이 진행하게 한다. 재시도는...
트랜잭션 검색 결과: 11개
도입 Deadlock은 두 트랜잭션이 서로 상대방의 잠금 해제를 기다리는 순환 대기다. InnoDB는 이를 감지하면 한 트랜잭션을 희생시켜 오류 1213을 반환하고 다른 트랜잭션이 진행하게 한다. 재시도는...
도입 컬럼을 한 번에 바꾸면 이전 애플리케이션과 새 애플리케이션이 동시에 동작하는 배포 구간에서 한쪽이 실패할 수 있다. Expand-Contract는 호환 가능한 구조를 먼저 추가하고 사용 전환이 끝난 뒤 오...
도입 덤프 명령의 성공은 마이그레이션 완료가 아니다. 구조, 데이터, 루틴·이벤트, 문자셋과 애플리케이션 동작이 대상에서 검증되어야 한다. 이 글은 InnoDB 데이터베이스 하나를 새 서버로 옮기는 절차와 각 ...
도입 ALTER TABLE이 끝나지 않을 때 테이블 크기만 의심하면 원인을 놓칠 수 있다. Waiting for table metadata lock 상태라면 다른 세션의 열린 트랜잭션 때문에 DDL이 시작되지 ...
Service Layer는 “있으면 좋아 보이는 계층”이 아니라, 코드가 무너지기 시작할 때 필요한 안전장치다. Controller에 로직이 쌓이기 시작하면 기능 추가 속도는 잠깐 빨라지지만, 수정 비용이 급격히 ...
PHP 프로젝트는 초기에 빠르게 기능을 붙이다 보면 Controller가 쉽게 비대해진다. 요청 처리, 검증, 비즈니스 로직, DB 쿼리, 응답 생성이 한 파일에 섞이면서 유지보수가 어려워진다. Control...
데이터가 수천만 건을 넘어가면 단일 테이블 구조는 점점 한계에 부딪힌다. 인덱스 크기가 커지고, 백업·복구 시간이 길어지며, 특정 쿼리의 응답 속도가 급격히 저하된다. 이 시점에서 고려하는 전략이 파티셔닝(P...
트랜잭션(Transaction)은 하나의 논리적 작업 단위를 보장하기 위한 DB 기능이다. 여러 개의 SQL이 하나의 작업처럼 처리되며, 전부 성공하거나 전부 실패해야 한다. 결제, 정산, 포인트 차감처럼 데...
“소통을 잘하자”는 원칙만으로는 협업 방식을 통일하기 어렵다. 다른 개발자가 변경 목적을 이해하고 같은 결과를 재현하려면 작업 전후에 남길 정보와 완료 조건이 구체적이어야 한다. 이 글은 PHP 게시글 조회 오류를 ...
데이터베이스 제품의 기능을 나열하는 것만으로는 저장소를 선택하기 어렵다. PHP 웹 서비스에서는 데이터의 정본이 무엇인지, 어떤 일관성이 필요한지, 실패했을 때 어떻게 복구할지를 먼저 결정해야 한다. 이 글은 회원·...