STUDY/DB
-
파티셔닝STUDY/DB 2023. 6. 7. 22:21
파티셔닝이란? 큰 테이블이나 인덱스를 관리하기 쉬운 조각으로, 물리적으로 분할하는 것을 의미한다. 물리적인 데이터 분할이 있더라도, DB에 접근하는 애플리케이션의 입장에서는 이를 인식하지 못한다. Data Partitioning은 큰 테이블과 인덱스의 관리를 보다 쉽게 하기 위해 설계된다. 파티셔닝 사용의 장점 가용성(Availability) : 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다. 파티션은 독립적으로 관리된다. Backup and Restore을 파티션별로 작업할 수 있다. 같은 테이블에서 Unavailable한 파티션은 다른 파티션에 영향을 주지 않는다. 관리용이성(Manageability) : Database의 큰 객체들을 제거하여 관리를 쉽게 ..
-
RAC(Real Application Clusters)STUDY/DB 2023. 5. 24. 01:35
DB 이중화 구성은 데이터베이스 시스템의 가용성과 내결합성을 향상시키기 위해 사용된다. HA(Hign Availability: 고가용성) OPS(Oracle Parallel Server) RAC(Real Application Clusters) HA(Hign Availability: 고가용성) 두 대의 서버를 동일하게 구성해서 서버 1대는 Active 상태로 두고 다른 1대는 Standby 상태로 설정해서, 만약 Active 상태의 서버에 장애가 발생할 경우 Standby 서버가 즉시 Active 상태로 바뀌면서 서비스 중단이 발생하지 않도록 하는 구성이다. 문제점 비용이 많이 든다. Active 상태의 서버에서 작업을 하다 장애가 발생하면 Standby 상태의 서버로 작업은 가능하지만, 데이터가 동기화 ..
-
DBCP(Database Connection Pool)STUDY/DB 2023. 5. 17. 22:42
DBCP란? 웹 컨테이너(WAS)가 실행되면서 DB와 미리 일정 갯수의 connection(연결)을 만들어 pool에 저장해두었다가, 클라이언트 요청이 오면 connection을 제공하고고, 처리가 끝나면 pool에 다시 반환하여 보관하는 방식을 의미한다. DBCP를 사용하는 이유는 무엇일까? 데이터베이스와 Connection을 맺는 작업은 매우 느리며 자원을 많이 소모하는, 비용이 큰 작업이다. 연결을 매번 생성하면 매 요청마다 연결 생성 비용이 발생하여 애플리케이션의 성능을 저하시킬 수 있고, 만약 다수의 사용자들이 동시다발적으로 데이터베이스의 Connection 연결을 요청한다면 최악의 경우 서버가 다운될 수 있다. 이러한 비용과 같은 문제들을 해결하기 위해 DBCP를 사용할 수 있다. 여러 개의 ..
-
Spring TransactionalSTUDY/DB 2023. 5. 10. 23:08
트랜잭션이란? 데이터베이스의 상태를 변경시키는 작업 또는 한번에 수행되어야하는 연산들을 말한다. 트랜잭션 작업이 끝나면 commit 또는 rollback 되어야한다. 트랜잭션 성질 원자성(Atomicity) : 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉 모두 성공 또는 모두 실패이다. 일관성(Consistency) : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다. 지속성(Durability) : 트랜잭션이 성공적으로 처리되면 결과가 항상 저장되어야 한다. Spring에서의 트랜잭션 활용 비즈니스 로직과 결합 읽기 전용 트랜잭션의 공통화 테스트의 DB 커밋을 롤백 Spring이 ..
-
Database LockSTUDY/DB 2023. 4. 26. 00:06
Database Lock이란? Lock은 여러 트랜잭션이 공유 데이터에 접근할 때 데이터를 잘못 업데이터하거나 잘못된 데이터 구조를 변경하는 것을 방지하는 것으로 데이터베이스 동시성과 일관성을 유지하는 데 중요한 역할을 한다. 일반적으로 데이터베이스는 베타적 락(Exclusive Locks)과 공유 락(Share Locks) 두 종류의 락을 사용하는데, 하나의 리소스(행 또는 테이블)에는 하나의 베타적 락만 획득할 수 있고, 여러 개의 공유 락을 동시에 획득할 수 있다. Lock의 설정 범위(Level) 데이터베이스 데이터베이스 범위의 Lock은 전체 데이터베이스를 기준으로 Lock을 하는 것을 의미한다. 즉, 1개의 세션만이 DB의 데이터에 접근이 가능하다. 파일 데이터베이스 파일을 기준으로 Lock을..
-
Isolation LevelSTUDY/DB 2023. 4. 25. 23:06
Isolation Level이란? 데이터베이스 트랜잭션 처리에서의 격리 수준을 의미하며, 동시에 수행되는 여러 트랜잭션들이 서로 영향을 주지 않도록 데이터베이스 시스템에서 제공하는 기술이다. 이를 통해 동시성과 일관성 사이의 균형을 조절할 수 있다. 1. READ UNCOMMITTED(읽기 미완료) 가장 낮은 격리 수준으로, 트랜잭션들이 아직 커밋되지 않은 데이터를 읽을 수 있다. 이로 인해 dirty read, non-repeatable, phantom read와 같은 문제가 발생할 수 있다. [예] 트랜잭션A가 어떤 값을 x에서 y로 변경하고 아직 커밋하지 않은 상황에서 트랜잭션B가 해당 값을 읽을 경우 트랜잭션B에 y가 조회되는 것이다. 하지만 속도가 빠르기 때문에 데이터의 일관성이 떨어지더라도, ..
-
실행계획STUDY/DB 2023. 4. 19. 22:20
실행 계획이란? Sql Statement가 요구한 데이터를 추출하기 위해 DBMS가 차례로 수행하는 Access 과정 통계정보를 기반으로 다양한 Access Path를 수립하고 그 중 Cost가 가장 낮은 Access Path를 결정 옵티마이저에 의한 Plan이 잘못 수립될 가능성이 있기때문에 이해하고 제어하는 것이 필요 실행 계획 확인하는 방법 EXPLAIN PLAN : 쿼리 실행 계획을 생성하는 데 사용되는 SQL문으로, 쿼리를 실제로 실행하지 않고 실행 계획을 생성할 수 있다. 생성된 실행 계획은 'PLAN_TABLE'이라는 테이블에 저장된다. SET AUTUTRACE : 쿼리를 실행한 후 자동으로 실행 계획을 출력하는 기능을 활성화하는 명령어로, 쿼리 실행 결과와 실행 계획을 함께 확인할 수 있다..
-
Join 방식STUDY/DB 2023. 4. 13. 00:58
Join 두 개 이상의 테이블에서 조인 컬럼에 일치하는 행을 찾아서 연결하는 것으로, 대부분 SQL 쿼리에서 사용되며, 데이터베이스의 논리적 연산 중 하나이다. Driving Table 조인을 할 때 기준이 되는 테이블로, 조인 컬럼에 대해 인덱스를 가지고 있는 경우에 선택된다. 인덱스를 가진 테이블을 기준으로 조인을 수행하면, 조인 컬럼을 이용해 빠르게 해당 행을 찾을 수 있다. Driven Table 드라이빙 테이블에서 조인 컬럼과 일치하는 모든 행을 찾아서 조인하는 테이블 Join 종류 1. Nested Loop Join(순차적 루프에 의한 접근 방식) - 가장 기본적인 Join 방식으로, 두 개의 테이블 중 하나를 기준으로 하나씩 순차적으로 읽어들이면서 다른 테이블과 조인하는 방식 순차적으로 처리..