728x90 반응형 분류 전체보기82 [DB] 배치 실행 시 DB 쪽 데드락 발생 이슈 해결 목적우선 배치는 아이디를 기준으로 파티셔너에 의해 5분할 되어 워커 노드 5개로 분리되어 실행되었으며, 데드락을 방지하고자 파티션 별로 테이블이 나누어져있었다.그러나 배치 실행 시 데드락 발생으로 지속적으로 이슈가 발생하고 있어 이슈를 기록하고, 해결한 부분을 기록하고자 작성한다.이슈배치 실행 시 insert 작업할 때 데드락이 발생했다.INSERT INTO table () values (?,?..)....Deadlock found when trying to get lock; try restarting transaction; nested exception is java.sql.BatchUpdateException: Deadlock found when trying to get lock;새벽 5시에 발생하는.. 2024. 11. 1. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 5. 안정 해시 설계 및 apache cassandra 가상 노드 살펴보기 이번 장에서는 수평적 분산 노드 설계를 가능하게 하도록 해시 함수를 통해 데이터를 서버에 분배하는 법을 설명해준다. 안정해시로 구성하는 DB가 Apache Cassandra, Amazon Dynamo DB 등 다양했다. 사실 그 두개의 DB를 잘 모르고 있었는데, 내부 설계를 살펴보고 이런 DB도 있구나 알게된 거 같아 좋은 기회라 생각됐다. 그럼 안정 해시 설계가 왜 나오게 된 건지, 그리고 해당 설계를 사용하고 있는 Apache Cassandra 클러스터에 데이터가 분산되는 방식을 살펴보자. rehash(해시 재분배) 문제우선 가장 기초적인 해시 함수이며 많은 사람들이 배웠을 Mod를 활용한 해시 함수가 예제로 나온다.server index = hash key % 서버 개수이 해시 함수는 서버가 다운.. 2024. 10. 4. [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 처리율 제한 장치의 설계 가상 면접 사례로 배우는 대규모 시스템 설계 기초 책을 읽다가 처리율 제한 장치의 설계 파트를 공부하게 되었다.실제로 회사에서도 이벤트로 인해 사용자가 몰리는 상황에 처리율 제한을 하지 않아 사용자에게 빈 화면이 보이는 이슈가 있었던 적이 있었으며, 이를 방지하고자 서버를 증설한 경험이 있었다. 만일 처리율 제한 장치를 설정함으로써 임계치를 두고 사용자당 이를 넘지 않는 요청에 대해선 응답할 수 있게 처리해도 좋았을 거 같다. 물론 여기에는 트레이드 오프가 따르기 때문에 상황에 알맞은 알고리즘을 적용할 수 있도록 논의가 중요한 거 같다.또한 면접 상황에서 대규모 시스템 설계에 대해 질문받았을 때, 사용자 처리율 제한을 시키고자 하는 방법에 대해 구체적으로 답변하길 바랐던 적이 있어서 이 파트를 읽으면서 .. 2024. 9. 29. [DB] 무결성과 정합성 ACID 중, Consistency는 정합성에 해당한다. 이 정합성과 무결성이 헷갈리는 거 같아서 간단하게 이를 정리하고자 블로그에 작성했다.정합성데이터들의 값이 서로 일치하는 상태정합성 훼손 예시Before주문 정보 테이블고객 번호주문 번호주문 금액....112000 123000 고객 정보 테이블고객번호고객 이름....1대우니 After주문 정보 테이블고객 번호주문 번호주문 금액....112000 123000 고객 정보 테이블고객번호고객 이름....2대우니 고객 정보 테이블의 고객번호를 1에서 2로 변경했지만, 주문 정보 테이블에는 고객번호가 변경되지 않았을 때, (데이터의 값이 서로 일치하지 않는다.)데이터 정합성이 훼손되었다고 볼 수 있다.무결성데이터 값이 컬럼 저장 조건에 알맞게 정확한 상태B.. 2024. 9. 16. [트랜잭션] 정의 및 ACID 추석을 맞이하여 개념을 정리할 겸, DB의 꽃인 트랜잭션의 정의와 트랜잭션과 lock의 차이, 그리고 무결성과 정합성, ACID, 격리 수준, mysql 기준 MVCC 등에 대해 알아보고자 한다. 해당 블로그의 도움을 많이 받아 작성한 문서이다. https://mangkyu.tistory.com/category/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4 트랜잭션이란?시작에 앞서 트랜잭션이란 무엇일까? 트랜잭션이란 DB 상태를 변경시키기 위해 수행하는 논리적인 작업의 단위라 할 수 있다.즉, 상태 변경을 처리하기 위해 필요한 DB 연산을 모아놓은 것이다.그런데, 트랜잭션으로 묶인 작업은 하나라도 실패한다면 거래 이전으로 돌려야 하며, 모두 성공한다면 .. 2024. 9. 16. [Spring Batch] CursorItemReader 알아보기 서론Spring Batch에서 사용되는 CursorItemReader의 코드를 확인해보면서 동작 방식과 특징에 대해 알아보고자 한다. 그리고, 대용량 데이터를 처리할 때 cursor 사용이 빠른 이유와 DB 커넥션이 길어질 때 유의 사항을 알아보고자 한다.Cursor와 Paging Cursor Item Reader대용량 데이터를 가져올 때 빠른 이유cursor는 커넥션 연결 중 한번의 SQL 문을 요청 후, 결과값을 DB 메모리에 저장하고, fetch size만큼 서버메모리에 가져오는 방식이므로 한번 정렬 쿼리하므로 커넥션 time out이 충분히 길다면 성능 측면에서 빠르다. 그러나, 몇가지 유의 사항이 있다. 대용량 데이터를 가져올 때 유의 사항connection timeout이 길어야 한다. cur.. 2024. 4. 1. 이전 1 2 3 4 ··· 14 다음 728x90 반응형