본문 바로가기
반응형

Back-End/Database18

데이터베이스 시스템 동시성 제어 방법 MVCC(Multi-Version Concurrency Control)MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식이다. 각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않는다.데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있다. 트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못한다.또한 읽기 작업 시 잠금을 사용하지 않아 높은 동시성을 제공한다. 읽기 작업이 잠금에 의해 지연되지 않아, 읽기 중심의 애플리케이션에서 우수한 성능을 보인다. 읽기 작업 시 잠금을 사용하지 않으므로, 쓰기 작업과의 충돌이 줄어든다. 하지만 여러.. 2025. 4. 2.
데이터베이스 커넥션 풀 미사용 시 발생 문제 애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요하다.데이터베이스 커넥션의 생애주기 :데이터베이스 드라이버를 사용하여 데이터베이스에 연결데이터 읽기/쓰기를 위한 TCP 소켓 열기소켓을 통한 데이터 읽기/쓰기연결 종료소켓 닫기커넥션 풀이 없다면 애플리케이션에서 데이터베이스에 접근해야하는 요청을 처리할 때마다 커넥션을 새로 생성하여 연결하고 해제하는 과정을 반복해야 한다. 이 과정은 비용이 상당히 많이 들기 때문에 요청의 응답시간이 길어진다.또 동시에 많은 요청이 들어올 경우 매번 새로운 커넥션을 생성하게 되는데, 데이터베이스의 최대 연결 수를 초과할 수 있다. 데이터베이스는 일반적으로 동시에 처리할 수 있는 요청 개수에 제한이 있는데, 이 제한을 초과하면 요청이 거부되어 사라지거.. 2025. 3. 28.
공유 락과 배타 락 DBMS에서 트랜잭션을 특별한 제어 없이 병행 수행을 허용한다면 데이터의 일관성과 무결성을 보장하기 어려울 수 있다. 이때, 병행 수행되는 트랜잭션들을 제어하기 위해서 락을 사용할 수 있다. DBMS에서 락은 크게 공유 락과 배타 락으로 분류할 수 있다.공유 락(Shared Lock)공유 락(Shared Lock) 은 읽기 락(Read Lock) 이라고 부르며, 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없다.즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터가 변경되지 않는다는 것을 보장한다.SELECT * FROM table_name WHERE id = 1 FOR SHARE;배타 락(Exclusive Lock)배타 락(Exclusive .. 2025. 3. 21.
데이터베이스 인덱스 인덱스는 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조로 백과사전의 색인과 같다.저장되는 컬럼의 값을 사용하여 항상 정렬된 상태를 유지하는 것이 특징이다.이러한 특징으로 인해 인덱스는 INSERT, UPDATE, DELETE의 성능이 희생된다는 것이 단점을 가지고 있다.인덱스 자료 구조 (MySQL InnoDB 기준)B+Tree와 같은 변형 B-Tree 자료구조를 이용해서 인덱스를 구현한다.기본 토대는 B-Tree 인덱스이기 때문에, 컬럼의 값을 변형하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지합니다.B-Tree(Balanced-Tree)B-Tree(Balanced-Tree)에서는 크게 3가지 노드가 존재한다.최상위에 하나의 루트 노드가장 하위 노드인 리프 노드실제 데이터 레코드를.. 2025. 3. 10.
재귀적 CTE(Common Table Expression) SQL 에서 반복적인 계산을 수행하거나 계층적 데이터를 쉽게 처리할 수 있도록 도와주는 기능이다.임시 결과 집합을 정의하는데, 재귀적 CTE는 자기 자신을 참조하여 반복적으로 확장할 수 있다. 수많은 테스트 더미 데이터를 추가할 때 효과적이다. 앵커 멤버: 재귀가 시작되는 기본 쿼리재귀 멤버: 앵커 멤버의 결과를 바탕으로 반복적으로 실행되는 쿼리WITH RECURSIVE cte_name AS ( -- 앵커 멤버 SELECT ... UNION ALL -- 재귀 멤버 SELECT ... FROM cte_name WHERE ...)SELECT * FROM cte_name; 예시로 유저 데이터를 10,000 개 삽입하는 쿼리를 재귀적 CTE 로 구현cte_max_resurs.. 2024. 8. 1.
Transaction ≣ 목차트랜잭션을 잘게 나누면 보정배치가 쉬워지고 트랜잭션이 왜 실패했는지 추적할 수 있다.충돌 횟수를 고려하여 락 종류를 선택한다.자기 자신만 접근하는 로직일 경우 충돌이 적을 확률이 높아진다.트랜잭션 작은 단위로 나눌 시, Manager (application 계층) 추가 또는 service 에서 필요한 repository 를 DI 받아서 하나의 메서드에서 처리한다.만약 연관 관계가 맺어져있다면?reservation.getUser().usePoint(amount)exception 이후에 코드가 실행되지 않는지 체크하고 테스트 할 필요성이 있다.트랜잭션 사용 논리적 흐름구분해서 고려할 필요가 있다.실제 비즈니스 기반의 로직시스템 입장에서의 로직동시성 제어트랜잭션공유락, 배타락 = 트랜잭션 동시성 제어 .. 2024. 7. 23.
MySQL root 계정 비밀번호 재설정 MySQL 서버 중지sudo launchctl unload -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plistHomebrew 를 통해 설치한 경우brew services stop mysql MySQL 서버를 안전 모드로 시작인증을 무시하고 안전 모드로 시작하면 비밀번호를 요구하지 않는다.sudo mysqld_safe --skip-grant-tablesERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)접속되어있지 않은 경우 MySQL 접속brew services listbrew services start mysql안전 모드로 접속 성공my.. 2024. 7. 9.
MySQL - Workbench, DB 종류 💡 MySQL Workbench 실행하기 ◾ 한글 데이터 저장을 위해 기본 character set 을 utf8로 설정한다. 💡 HeidiSQL 설치 https://www.heidisql.com/download.php#google_vignette Download HeidiSQL Ads were blocked - no problem. But keep in mind that developing HeidiSQL, user support and hosting takes time and money. You may want to send a donation instead. Download HeidiSQL 12.0, released on 12 Apr 2022 Please disable your adblocker an.. 2022. 7. 19.
MySQL - 실습문제 📃 회원 테이블 추가하기 앨리스 가게에서는 회원가입을 통해 구매한 가격만큼 마일리지 혜택을 주려고 합니다. 이를 위해 customer 테이블을 만들고자 합니다. 지시사항에 맞추어 customer 테이블을 완성하세요. 💬 지시사항 ◾ 고객의 정보는 (1, 'Elice', '2010-01-15', 100) (2, 'Cheshire', '2005-03-10', 100) (3, 'Dodo', '2010-04-30', 100) ◾ customer 테이블의 모든 컬럼을 출력할 것 create table customer( id int, -- id -- name varchar(10), -- 이름 -- birthday date, -- 생일 -- mileage int -- 마일리지 -- ); insert into cust.. 2022. 7. 18.
728x90
반응형