DataBase/튜닝
-
Spring 성능 테스트 With Ngrinder (1) - Ngrinder 설치DataBase/튜닝 2024. 8. 22. 15:17
엔그라인더는 크게 두 가지 구성요소로 되어있다. 1. Controller - 성능 테스트를 위한 웹 인터페이스 제공- 테스트 프로세스 조정- 테스트 통계를 대조하여 표시- 스크립트 만들고 수정 2. Agent - 에이전트 모드로 실행할 때 대상 시스템에 로드를 가하는 프로세스 및 스레드 실행 - 모니터 모드로 실행할 때 대상 시스템 성능 모니터링 이제 컨트롤러와 에이전트를 다운받아야 한다. 2. nGrinder 설치 및 세팅 nGrinder의 Controller와 agent를 설치하기 위해선 JDK가 필요하다. nGrinder는 통신을 위해 여러 포트를 사용하므로, 해당 포트가 방화벽에 걸리지 않는지 확인이 필요하다. Agent : any -> controller 16001Agent: any - > ..
-
불친절 SQL 2장 정리 (인덱스 기본)DataBase/튜닝 2024. 8. 19. 21:21
1. 인덱스 튜닝의 핵심 요소 - 스캔 과정 비효율 줄이기 -> 인덱스 구성 및 순서에 영향 - 랜덤 엑세스 최소화 튜닝 -> 인덱스 구성에 영향 2. 인덱스 탐색 과정 -> 수직적 탐색을 통해 리프 블록을 찾는다 (루트에서 브랜치를 통해 리프까지) -> 이때 키에는 하위 브랜치의 범위가 담긴다. -> 비교해야하는 값과 키를 탐색하며, 자신의 값보다 같거나 큰 값을 만나면 그 옆의 브랜치로 이동한다. -> 수평적 탐색을 통해 값을 찾는다. (리프 사이 사이를 다니며 탐색) -> 리프 블록의 값을 비교하며 필요한 값을 찾는다. -> 인덱스의 값으로 충분하지 않으면, ROWID를 사용해서 테이블에 접근해서 필요..
-
불친절 SQL 1장 정리DataBase/튜닝 2024. 8. 19. 19:55
1. SQL이 느린 이유 -> 디스크 I/O 때문임! (I/O 처리하는 과정에서 프로세스가 잠을 자기 때문) 여러 프로세스가 하나의 CPU를 공유할 수 있지만, 특정 순간에는 하나의 프로세스만 CPU를 사용할 수 있다. 디스크에서 데이터를 읽어야 할 때 CPU를 OS에 반환하고 수면 상태에서 I/O 완료를 기다림 2. 데이터베이스 저장 구조(오라클) -> 테이블 스페이스 : 여러 세그먼트를 담음 세그먼트는 여러 카테고리가 있음 (테이블, 인덱스, 파티션 등) *세그먼트, 익스텐트,블록은 하나의 테이블에 대한 정보임 -> 세그먼트 -> 세그먼트 : 여러 익스텐트를 담는 저장 공간 -> 익스텐트 ..
-
조인 튜닝 - 서브쿼리 조인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. 스캔 효율성 이외의 판단 ..
-
인덱스 스캔 효율화DataBase/튜닝 2024. 8. 1. 14:14
LOT, 클러스터, 파티션은 랜덤 엑세스 최소화하는 데 매우 효과적인 저장 구조하지만, 이를 적용하려면, 많은 테스트를 진행해야 한다. (시스템 개발 단계에서 물리 설계가 중요한 이유) 1. 인덱스 탐색 인덱스의 탐색은 수직적 탐색, 수평적 탐색으로 나눌 수 있다. 화살표로 찾아간 블록에는 자신의 키 값보다 크거나 같은 값을 갖는 레코드가 저장돼 있다.각 레코드는 하위 노드를 가리키는 블록 주소를 가지고, 하위 노드에는 자신의 키 값보다 크거나 같은 값을 가진 레코드가 저장되어 있다.LMC는 자식 노드 중 가장 왼쪽 끝에 위치한 값을 가리킴 (부모 노드 A 3보다 작거나 같은 값) 1.1 (=)조건 (1) WHERE C1 = 'B' 루트 스캔 과정에서 C1='B'로 내려가는게 아니라, 그 왼쪽부터 ..