IT/Oracle(67)
-
Bulk Insert
Bulk Insert는 대량 데이터를 효율적으로 삽입할 때 사용하는 방법으로, 데이터베이스 종류에 따라 다양한 방식으로 구현할 수 있습니다.아래는 주요 데이터베이스별로 예제를 정리했습니다.1. MySQL: LOAD DATA INFILE - MySQL에서는 LOAD DATA INFILE 명령을 사용해 대량 데이터를 빠르게 삽입할 수 있습니다. - 예제LOAD DATA INFILE '/path/to/your/data.csv'INTO TABLE your_tableFIELDS TERMINATED BY ',' -- 컬럼 구분자ENCLOSED BY '"' -- 문자 데이터 구분자LINES TERMINATED BY '\n' -- 행 구분자IGNORE 1 ROWS; -- 첫 번째 행(..
2025.02.15 -
Common Table Expression (CTE)
CTE는 SQL에서 쿼리 안에서 일시적으로 생성되는 임시 결과 집합입니다.WITH 키워드를 사용하여 정의하며, 하나의 쿼리에서 반복적으로 사용할 수 있고 가독성과 성능 최적화에 매우 유용합니다.CTE 기본 구조WITH cte_name AS ( SELECT 컬럼1, 컬럼2 FROM 테이블 WHERE 조건)SELECT * FROM cte_name;CTE의 장점복잡한 쿼리 단순화 : 긴 쿼리를 여러 단계로 나눠 작성할 수 있습니다.재사용성 : 하나의 CTE를 여러 번 호출해도 실제 실행은 한 번만 수행됩니다.가독성 : 코드가 더 깔끔해지고 유지보수가 쉬워집니다.임시 테이블 대체 : 세션마다 유지되는 임시 테이블을 생성하지 않아도 됩니다.예제 1: 중복 계산 방지WITH dept_avg AS (..
2025.02.14 -
BETWEEN으로 존재하지 않는 파티션 데이터 조회
BETWEEN으로 존재하지 않는 파티션까지 포함하여 조회할 경우 성능 저하가 발생할 수 있습니다. 이유는 다음과 같습니다:1. 존재하지 않는 파티션 탐색 시도DB 엔진은 BETWEEN 범위에 포함된 모든 파티션을 탐색하려 시도합니다.존재하지 않는 파티션까지 탐색하려고 하면, 불필요한 메타데이터 검사가 늘어나 쿼리 실행 시간이 증가할 수 있습니다. 2. 파티션 프루닝(Partition Pruning) 미적용 가능성파티션 프루닝은 필요한 파티션만 읽어오는 최적화 기법인데, 존재하지 않는 파티션이 포함되면 프루닝이 제대로 적용되지 않을 수 있습니다.결과적으로 모든 파티션을 스캔할 가능성도 있습니다.3. 성능 최적화 방안파티션 존재 여부를 체크하여 실제 존재하는 파티션만 대상으로 쿼리를 수행하면 성능이 훨씬 좋..
2025.02.14 -
Job Number 조회
Oracle에서 현재 실행 중이거나 과거에 실행된 Job Number를 조회하려면 사용 중인 Scheduler 유형에 따라 SQL 쿼리가 달라집니다.1. DBMS_SCHEDULER 사용 시Oracle 10g 이상에서 사용하는 DBMS_SCHEDULER 기반의 Job을 조회하려면 다음 SQL을 실행SELECT job_name, job_action, job_type, enabled, state, job_class, job_creator, schedule_name, last_start_date, next_run_dateFROM dba_scheduler_jobsORDER BY job_name;job_name: Job의 이름job_action: 실행될 작업enabled: 실행 가능 여부 (TRUE / FALSE)..
2025.02.14 -
언두 테이블스페이스 크기 관리
언두 테이블스페이스 기본 관리 원칙1. 언두 테이블스페이스 크기 관리언두 테이블스페이스의 적절한 크기를 설정해야 합니다. 이는 시스템의 트랜잭션 크기와 동시 사용자 수에 따라 달라집니다.권장 크기는 일반적으로 트랜잭션 크기 × 동시 사용자 수 × 4입니다.현재 언두 테이블스페이스 확인SELECT tablespace_name, file_name, bytes/1024/1024 AS size_mb FROM dba_data_files WHERE tablespace_name LIKE 'UNDO%'; 크기 조정ALTER DATABASE DATAFILE '/path_to_undo_file/undotbs01.dbf' RESIZE 2G; 추가 데이터파일 추가ALTER DATABASE ADD DATAFILE '/path_..
2025.02.13 -
INSERT SELECT 성능 개선 기본 전략
(1) 병렬 처리 (Parallel DML) 활성화대량 데이터를 삽입할 때는 병렬 처리를 활성화하여 작업을 분산시킬 수 있습니다.병렬 DML 활성화ALTER SESSION ENABLE PARALLEL DML;INSERT 문에 병렬 힌트 추가INSERT /*+ APPEND PARALLEL(A, 4) */ INTO partitioned_table PARTITION (partition_name)SELECT /*+ PARALLEL(B, 4) */ *FROM source_table B;(2) APPEND 힌트 사용APPEND 힌트를 사용하면 데이터를 직접 테이블의 HWM(High Water Mark) 아래에 추가하므로 로그 생성량을 줄이고 삽입 속도를 크게 향상시킵니다.INSERT /*+ APPEND */ INT..
2025.02.13