본문 바로가기

전체 글

(88)
오라클 .ora (listener.ora, sqlnet.ora, tnsnames.ora) listener.ora - 위치: 서버에서 $ORACLE_HOME/network/admin/listener.ora - 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 파일 - 오라클 서버에 존재, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및 포트 정보등을 설정하는 파일 - 설정형식: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip)(PORT = 포트번호)) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = SID_name) (ORACLE_HOME = 오라클위치) ) ..
파티셔닝 1. 파티션 개요 - 테이블 또는 인덱스를 파티션 단위로 나누어 저장하며 파티션 키에 따라 물리적으로 별도의 세그먼트에 데이터 저장 - 보관 주기가 지난 데이터를 별도 장치에 백업하고 삭제하는 작업이 높은 효율 - 특정 파티션만 FULL SCAN으로 높은 효율 가능 2. 파티션 유형 1) RANGE 파티셔닝 : 파티션 키 값의 범위로 분할. 가장 일반적이며 주로 날짜칼럼 위주 2) HASH 파티셔닝 : 데이터가 고르게 분산되도록 DBMS가 관리하며 병렬 처리시 성능 효과 극대화되며 DML 경합 분산에 효과적이다. 3) LIST 파티셔닝 : 불연속적인 값의 목록을 각 파티션에 지정. 사용자가 정한 그룹핑 기준에 따라 데이터를 분할 저장 4) COMPOSITE 파티셔닝 : 파티션 내에 또 다른 서브 파티션 ..
배치프로그램 튜닝 1. 배치프로그램 튜닝 개요 1) 배치프로그램 : 사용자와 상호작용이 없이 대용량의 데이터를 처리하는 일련의 작업들을 묶어 정기적으로 반복수행하거나 정해진 규칙에 따라 자동 수행되며 3가지로 구분이 된다. - 정해진 시점에 수행하는 정기배치, 조건을 충족할 경우 수행되는 이벤트성 배치, 명시적 요구가 있을 때 행하는 ON-DEMAND 배치가 있다. 2) 배치 환경의 변화 : 요즘 시간 배치 작업의 비중이 증가하며 분 배치 작업이 일부 존재하며 ON-DEMAND 배치를 제한적이나마 허용 3) 성능 개선 목표 설정 - 온라인 프로그램 : 최초 응답속도 최적화 목표 - 배치프로그램 : 항상 전체 처리속도 최적화를 목표로 설정 4) 배치프로그램 구현 패턴과 튜닝 방안 - 절차형 프로그램 : 어플리케이션 커서를 ..
고급 SQL 활용 / DML 튜닝 고급 SQL 활용 (1) CASE문 활용 - 여러 번 테이블을 ACCESS하는 경우 CASE문을 활용하여 1번만 액세스 EX) NVL( SUM (CASE WHEN COLUMN = VALUE THEN COLUMN END), 0 ) (2) UNION ALL을 활용한 M:M 관계의 조인 - FULL OUTER JOIN을 대체할 용도로 UNION ALL 활용 가능 -> FULL OUTER JOIN을 할 경우 테이블을 각각 2회씩 ACCESS, UNION ALL 1번 (4) 페이징 처리 (5) WINDOW 함수 활용 (6) WITH 구문 활용 - 자주 쓰는 SELECT FROM 절일 경우 WITH 구문을 통해 한번 선언하고 테이블처럼 어디에서나 이용 가능하게 활용 가능하다. DML 튜닝 (1) 인덱스 유지 비용 ..
소트 튜닝 (1) 소트와 성능 가) 메모리 소트 / 디스크 소트 - 메모리 소트 : 정렬작업을 메모리 내에서. INTERNAL (OPTIMAL) SORT라고도 함 - 디스크 소트 : 메모리 내에서 못하여 디스크 공간까지 사용. 느림. EXTERNAL SORT - PGA -> CGA / UGA - CGA : CALL이 진행되는 동안만 필요한 정보 저장 (PRIVATE 변수) - UGA : CALL을 넘어 다음 CALL 까지 계속 참조되는 정보 저장 (PUBLIC 변수) - DML 문장, SELECT 문장 중 한 단계 앞선 단계의 정렬은 CGA - SELECT 문장 중 가장 마지막 단계에서 정렬된 데이터는 UGA 나) 소트를 발생시키는 오퍼레이션 (1) SORT AGGREGATE : AGGRREGATE 함수 사용시 발..
쿼리 변환 1. 쿼리 변환이란? - 휴리스틱 쿼리 변환 : 결과만 보장된다면 무조건 쿼리 변환 수행. 일종의 RBO. 경험적으로 항상 더 나은 성능을 보일 것이라는 옵티마이저 개발팀의 판단 반영 - 비용 기반 쿼리 변환 : 변환된 쿼리의 비용이 더 낮을 때 사용하며 낮이 않을 경우 원본 쿼리를 이용해 최적화 한다. 2. 서브쿼리 UNNESTING - NESSTED 서브쿼리는 메인 쿼리와 부모 자식이라는 종속적이고 계층적인 관계이며 논리적인 관점에서 그 처리과정은 IN, EXISTS를 불문하고 NL 조인과 비슷한 필터 방식을 이용하며 이 방식이 항상 최적의 수행 속도를 보장 못함 - 옵티마이저는 동일한 결과를 보장하는 조인문으로 변환 후 최적화하는 서브쿼리 UNNESTING 혹은 원본 쿼리를 이용해 최적화하여 서브쿼..
서브쿼리 / 집합연산 / Join - Using , On, Outer Join 1. 집계 함수 (Aggregation Fuction) - NULL값은 집계 함수 연산 참여 X - NULL + 숫자 = NULL 2. Sub-Query - 연관 서브쿼리 : 서브쿼리에 메인쿼리 칼럼 보유. 메인쿼리가 먼저 수행 후 조건 확인 - 비연관 서브쿼리 : 서브쿼리에 메인쿼리 칼럼 미 보유. 서브쿼리 먼저 수행 후 메인에 결과 값을 제공. - 단일 행 서브쿼리 : 서브쿼리 결과 값이 항상 1건 이하. 단일 행 비교 연산자와 함께 사용 - 다중 행 서브쿼리 : 서브쿼리 결과 값이 여러 건. 다중 행 비교 연산자와 함께 사용 ex) IN - 다중 칼럼 서브쿼리 : 반환하는 칼럼이 2개 이상인 경우 -> SQL SERVER 불가! 3. 집합 연산자 - UNION ALL : 합집합, 중복 허용 - UN..
계층쿼리 / 선분이력 끊기 / 데이터 복제를 통한 소계 1. 계층 쿼리 - START WITH : 시작 점 지정 - CONNECT BY ~ PRIOR ~ : 진행 경로 설정 - ORDER SIBLINGS BY : 같은 레벨별 정렬 기준 - LEVEL : 루트부터 각 레벨 별 1씩 증가 - CONNECT_BY_ISLEAF : LEAF = 1, NON LEAF = 0 - CONNECT_BY_ROOT : 루트 데이터 출력 - CONNECT_BY_PATH : 전체 경로 표시 *CONNECT BY 절에서 Column 나온다면 연결된(하위혹은 상위) 데이터 비출력 *WHERE 절에서 Column 나온다면 그 관련 데이터만 비출력 2. 선분이력 끊기 - 월말 기준으로 선분을 끊는 경우 Select greatest (a.시작일자, b.시작일자) 시작일자, least (a...