분류 전체보기
-
EC2에 Spring 레거시 배포하기Infra/AWS 2024. 8. 12. 16:43
1. EC2설정 EC2를 설정하고, 고정 IP를 받자 이를 하기 위한 방법은 다음 글에 자세히 설명해두었다.https://j-d-i.tistory.com/264 가상화된 인프라 환경 IaaS EC2는 주로 백엔드 서버를 배포할 때 많이 사용한다.프론트엔드 서버도 EC2를 활용" data-og-host="j-d-i.tistory.com" data-og-source-url="https://j-d-i.tistory.com/264" data-og-url="https://j-d-i.tistory.com/264" data-og-image="https://scrap.kakaocdn.net/dn/fR76q/hyWKy7vbpa/M61eZsC8kP4KVIPN9ohIDk/img.png?width=1060&height=11..
-
Mybatis, Oracle Number타입 문제카테고리 없음 2024. 8. 11. 21:57
오라클에서 테이블 데이터 타입을 NUMBER로 만들었을 때, SELECT하면, java.math에 BIGINTEGER타입이랑 맵핑한다. 이때 VO에는 INTEGER타입으로 명시했다면, 둘이 맵핑되지않는 문제가 발생한다. 이때 해결법으로 타입변환을 사용해보도록하자 SELECT CAST(st.itemId AS INTEGER) as itemId ,st.itemName, CAST(st.itemPrice AS INTEGER) as itemPrice ,st.itemImg FROM( SELECT ROWNUM rw, t.* FROM tbl_item t WHERE itemId >0 AND ROWNUM (#{pageNum}-1) * #{listAmount} 물론 처음부터 특별한 경우..
-
조인 튜닝 - 서브쿼리 조인DataBase/튜닝 2024. 8. 8. 14:04
실무에서는 복잡한 서브쿼리와 조인하는 형태를 흔히 보게 된다. 서브쿼리 조인을 어떻게 처리하는지 이해하고, 원하는 방식으로 실행계획을 제어할 수 있어야 튜닝도 가능하다. 1. 서브쿼리 변환이 필요한 이유 옵티마이저는 비용을 평가하고 실행계획을 생성하기에 앞서 전달받은 SQL을 최적화에 유리한 형태로 변환하는 쿼리 변환을 진행한다. 쿼리 변환은 옵티마이저가 SQL을 분석해 의미적으로 동일하면서도 더 나은 성능이 기대되는 형태로 재작성하는 것을 말한다. 서브쿼리는 세 가지로 분류할 수 있다. 이는 아래 그림과 같다. 1. 인라인 뷰 : FROM 절에 사용한 서브쿼리 2. 중첩된 서브쿼리 : 결과집합을 한정하기 위해 WHERE 절에 사용한 서브쿼리 (특히, 메인쿼리 칼럼을 참조하는 형태를 상관 서브쿼리..
-
조인 튜닝 - 소트 머지 조인DataBase/튜닝 2024. 8. 7. 23:11
조인 칼럼에 인덱스가 없을 때, 대량 데이터 조인이어서 인덱스 효과적이지 않을 때 사용한다. 1. SGA vs PGA 공유 메모리 영역인 SGA에 캐시된 데이터는 여러 프로세스가 공유할 수 있다. 단, 동시에 엑세스 할 수는 없다.동시에 엑세스하려는 프로세스 간 엑세스를 직렬화하기 위한 Lock 메커니즘으로서 래치가 존재한다. 데이터 블록과 인덱스 블록을 캐싱하는 DB 버퍼캐시는 SGA의 가장 핵심적인 구성요소이며, 블록을 읽으려면 버퍼 Lock도 얻어야 한다. 오라클 서버는 SGA에 공유된 데이터를 읽고 쓰면서, 동시에 자신만의 고유한 메모리 영역을 갖는데, 각 오라클 서버 프로세스에 할당된 메모리 영역을 PGA라고 한다. 할당받은 PGA 공간이 작아 데이터를 모두 저장할 수 없을 대는 Temp 테이..
-
조인 튜닝 - NL 조인DataBase/튜닝 2024. 8. 7. 18:14
1. NL 조인의 기본 메커니즘 NL조인은 Nested Loop 방식을 사용한다. 중첩 루프문으로 수행 된다는 뜻이다.NL 조인은 중첩 루프문과 같은 수행 구조를 사용한다. 일반적으로 NL 조인은 Outer와 Inner 양쪽 테이블 모두의 인덱스를 사용한다. Outer쪽 테이블 사이즈가 크지 않으면 인덱스를 이용하지 않을 수 있다. Table Full Scan 하더라도 한 번에 그치기 때문이다. 반면 Inner쪽 테이블은 인덱스를 사용해야 한다. 사원 X1 인덱스에서 입사일자 >= '19960101'인 첫번째 레코드를 찾는다.인덱스에서 읽은 ROWID로 사원 테이블 레코드를 찾아간다.사원 테이블에서 읽은 사원번호 0006으로 고객 X1 인덱스를 탐색한다.고객_X1 인덱스에서 읽은 ROWID로 고객 ..
-
인덱스 설계DataBase/튜닝 2024. 8. 6. 17:07
1. 인덱스 설계가 어려운 이유 인덱스가 많으면, 다음과 같은 문제가 생긴다.DML 성능 저하 (->TPS 저하)데이터베이스 사이즈 증가 (-> 디스크 공간 낭비)데이테베이스 관리 및 운영 비용 상승 위와 같이 테이블에 인덱스가 여섯 개 달려 있으면, 신규 데이터를 입력할 때마다 여섯 개 인덱스도 데이터를 입력해야 한다. 테이블과 달리 인덱스는 정렬 상태를 유지해야 하므로 수직적 탐색을 통해 블록을 찾는다. 테이터를 지울 때도 마찬가지다. 여섯 개 인덱스에서 레코드를 일일이 찾아 지워줘야 한다. 2. 가장 중요한 두 가지 선택 기준 조건절에 항상 사용하거나 자주 사용하는 컬럼을 선정해야한다.그렇지 않은 컬럼 중 = 조건으로 자주 조회하는 컬럼을 앞쪽에 두어야 한다. 3. 스캔 효율성 이외의 판단 ..