동시성 제어(Concurrency Control)동시성 제어란?동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 데이터베이스를 보호하는 것을 의미합니다. 일반적으로 동시성을 허용하면 일관성이 낮아지게 됩니다. 그래서 DBMS는 동시성을 제어할 수 있도록 LOCK 기능과 트랜잭션의 격리성 수준을 조정할 수 있는 SET TRANSACTION 명령어를 제공하고 있습니다.이러한 동시성을 제어하는 방법에는 낙관적 동시성 제어와 비관적 동시성 제어가 있습니다.낙관적 동시성 제어사용자들이 같은 데이터를 동시에 수정하지 않을 것이라고 가정.데이터를 읽은 시점에 LOCK을 걸지 않는 대신 수정 시점에 값이 변경되었는지 반드시 검사해야 합니다.비관적 동시성 제어사용자들이 같..
Tablespace 확장 방법1. Resize 방법alter database datafile '+DATAC1/ORA19/DATAFILE/TS1_01' resize 10G;alter database tempfile '/u03/oradata/ORA10/TT_TEMP01.dbf' resize 1000M;TEMP_Tablespace: Sorting이나 GROUP BY 할 때 사용하는 임시적인 공간입니다.2. Add 방법alter tablespace TS1 add datafile size 10G; # Oracle Managed Filesystem의 경우 이렇게 파일 이름을 지정하지 않습니다.alter tablespace TS1 add datafile '+DATAC1/ORA19/DATAFILE/TS1_02' siz..
Oracle DB의 메모리 구조SGA 메모리어떠한 서버의 Memory(=RAM)가 있다고 하면, DB를 설치할 때 메모리에서 "내가 얼마만큼의 공간을 사용하겠다"라고 지정한 공간이 SGA(System Global Area)입니다. 따라서, 이 SGA는 오라클이 사용하는 영역이 됩니다. 그리고 SGA의 내부에는 Buffer Cache, Shared Pool, Large Pool 등의 여러 공간이 존재합니다. 그럼 이 공간들에 대해 하나씩 설명해 보겠습니다.Buffer Cache필요한 데이터를 가져올 때 매번 Disk를 통해 가져오는 것은 속도적인 측면에서 느리기 때문에, 서버 기동 시 필요한 데이터나 자주 사용하는 데이터들을 DB로부터 가져와, 임시적으로 Buffer Cache에 올려 사용합니다. 이후, ..
옵티마이저(Optimizer)란?옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심입니다.컴퓨터 두뇌가 CPU라면, DBMS의 두뇌는 Optimizer입니다. 개발자가 SQL을 작성하고 실행하면 소프트웨어 실행 파일처럼 즉시 실행되는 것이 아니라 옵티마이저(Optimizer)에서 "이 쿼리문을 어떻게 실행 시키겠다" 라는 여러가지 실행 계획을 세우게 됩니다. 이렇게 실행 계획을 세운 뒤 시스템 통계정보를 활용하여 각 실행 계획의 예상 비용을 산정한 후 각 실행 계획을 비교하여 최고의 효율을 가지고 있는 실행 계획을 판별한 후 그 실행 계획에 따라 수행하게 됩니다. 옵티마이저의 종류옵티마이저는 규칙 기반 옵티마이저와 비용 기반 옵티마이저로 나뉩니다. 규칙 기..
Query Optimize Skill(Query 최적화 및 튜닝 기술)Tip 1. Use Column Names Instead of * in SELECT Statement단순히, 몇 개의 column만 조회하는 경우라면 * (Asterisk)를 사용할 필요가 없습니다. 비록 적기 편할 순 있겠지만, 쿼리를 완료하기 위해서 더 많은 시간을 필요로 합니다.일부 칼럼만 선택함으로써 결과 테이블의 크기를 줄이고, 네트워크 트래픽을 감소 시킴으로써 쿼리의 평균 속도를 높일 수 있습니다.Original: SELECT * FROM SH.Sales;Improved: SELECT s.PROD_ID FROM SH.Sales s;27% Time Reduction Tip 2. Avoid include HAVING clause..
WITHIN GROUPWITHIN GROUP은 ORACLE에서 주로 사용되는 구문으로, LISTAGG 함수를 사용할 때 함께 사용하는 것을 많이 볼 수 있습니다. WITHIN GROUP 절은 평소에 많이 사용하지 않기 때문에 조금 생소하게 느껴질 수 있습니다. WITHIN GROUP 절은 LISTAGG, RANK, DENSE_RANK 함수 등과 함께 사용할 수 있습니다.WITHIN GROUP 절과 같이 사용할 수 있는 함수LISTAGG: 그룹 내의 여러 행을 하나의 문자열로 연결합니다.RANK: 그룹 내에서 순위를 매깁니다.DENSE_RANK: RANK와 유사하지만 동일한 값에 대해 동일한 순위를 부여합니다.PERCENTILE_CONT: 연속 분포 모델을 가정하고 백분위수 값을 계산합니다.PERCENTI..
트랜잭션(Transaction)트랜잭션트랜잭션: DBMS에서 데이터를 다루는 논리적인 작업의 단위DB에서 데이터를 다룰 때 장애가 일어난 경우 데이터를 복구하는 작업의 단위가 됩니다.DB에서 여러 작업이 동시에 같은 데이터를 다룰 때가 이 작업을 서로 분리하는 단위가 됩니다.트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 합니다.(원자성)우리가 데이터베이스에 삽입, 수정, 삭제 등의 작업을 할 때, 여러 개의 작업들을 하나의 트랜잭션으로 묶습니다. 즉, 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위가 됩니다. 예를 들어 A계좌(홍길동)에서 B계좌(김연아)로 돈을 이체하는 경우에 이 업무는 A에서 돈을 빼고 B에 돈을 더하는 2가지의 Update 문으로 나뉘게 됩니다. 그리고 이것들은..
- Total
- Today
- Yesterday