일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 클린코드
- leetcode215
- 조인
- 리트코드215
- 결합인덱스구조
- SQL튜닝의시작
- 친절한SQL튜닝
- Oracle
- B*Tree인덱스
- join
- heapq
- 오라클
- table full scan
- 오라클튜닝
- db
- RAC
- index fast full scan
- SQLP
- intellij
- 로버트C마틴
- 리눅스
- 클린 코드
- SQLD
- 데이터모델링
- clean code
- B*Tree인덱스구조
- database
- B*Tree
- 알고리즘
- 파이썬
- Today
- Total
목록분류 전체보기 (45)
개발노트
일반적인 조인 메서드 선택 기준 1) 소량 데이터 조인 → nl 조인 2) 대량 데이터 조인 → 해시 조인 3) 대량 데이터 조인인데 해시 조인으로 처리 불가할 때 → 소트 머지 조인 ** 조인 조건식이 등치(=)가 아니거나, 카테시안 곱일 때 수행빈도가 매우 높은 쿼리에 대한 조인 메서드 선택 기준 1) (최적화된) nl 조인과 해시 조인 성능이 같다면 → nl 조인 2) 해시 조인이 약간 더 빠르면 → nl 조인 => 수행빈도가 높은 소량 데이터 조인은 설령 해시 조인이 약간 더 빠르더라도 nl 조인을 선택하라 3) nl 조인보다 해시조인이 매우 빠르면 → 해시 조인 nl 조인을 가장 먼저 고려해야 하는 이유는? nl 조인에서 사용하는 인덱스는 공유 및 재사용하는 자료구조다. 반면, 해시테이블은 단 ..
기본 메커니즘 1. build 단계 : 작은 쪽 테이블(build input)을 읽어 해시 테이블(해시 맵)을 생성한다. 2. probe 단계 : 큰 쪽 테이블(probe input)을 읽어 해시 테이블을 탐색하면서 조인한다. * use_hash 힌트로 해시조인을 유도한다. SQL 수행과정 SELECT /*+ ordered use_hash(E) */ E.EMPNO, E.ENAME, E.SAL, D.DNAME FROM DEPT D INNER JOIN EMP E ON D.DEPTNO = E.DEPTNO AND E.SAL > 1500 AND E.JOB = 'SALESMAN' WHERE D.DNAME = 'SALES' ; Execution plan -----------------------------------..
PGA 오라클 서버 프로세스는 SGA 에 공유된 데이터를 읽고 쓰면서, 동시에 자신만의 고유 메모리 영역 PGA 를 갖는다. PGA 는 프로세스에 종속적인 고유 데이터를 저장하는 용도로 사용한다. 할당받은 PGA 공간이 작아 데이터를 모두 저장할 수 없을 때는 Temp 테이블스페이스를 이용한다. * temp tbs 는 물리적 disk 형태로 존재한다. PGA 는 다른 프로세스와 공유하지 않는 메모리 공간으로, 래치 메커니즘이 불필요하다. → 같은 양의 데이터를 읽더라도 SGA 버퍼캐시에서 읽을 때보다 훨씬 빠르다. Sort Merge Join 기본 메커니즘 이름이 의미하는 것처럼 2단계로 진행한다. 1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다. 2. 머지 단계 : 정렬한 양쪽 집합을 서로..
SQL 트레이스를 통해 수집한 CALL 통계 정보 disk : 디스크에서 물리적으로 읽은 블록 개수 query + current : DB 버퍼 캐시에서 읽은 총 블록 개수 query : consistent 모드로 읽은 블록수(db buffer cache 에서 쿼리 scn 시점보다 작거나 같은 데이터 블록을 찾아 읽음) current : current 모드로 읽은 블록 수(db buffer cache 에 저장된 가장 최근 업데이트 된 데이터 블록을 읽음) mvcc(multi-version concurrency control) 모델 current 모드 : 디스크에서 db 버퍼 캐시로 적재된 원본 블록을 현재 상태 그대로 읽는 방식 consistent 모드 : 쿼리 SCN 과 블록 SCN 을 비교해서 쿼리가 ..
NL 조인 특징 요약 1. 랜덤 액세스 위주의 조인 방식 *랜덤 액세스는 레코드 하나를 읽기 위해 블록을 통째로 읽는다. 2. 조인을 한 레코드씩 순차적으로 진행 → 부분범위 처리가 가능, Driving 테이블 처리 범위에 따라 전체 일량 결정 3. 인덱스 구성 전략이 중요 따라서, NL 조인은 소량 데이터를 주로 처리하거나, 부분범위 처리가 가능한 온라인 트랜잭션 처리(OLTP) 시스템에 적합한 조인 방식이라고 할 수 있다. 기본 메커니즘 NL JOIN = Nested Loop Join SELECT E.사원명, C.고객명, C.전화번호 FROM 사원 E, 고객 C WHERE E.입사일자 >= '19960101' AND C.관리사원번호 = E.사원번호 사원 : Outer Table, Driving Tab..
쉘(Shell) 시스템에 로그인하게 되면 제일 처음 접하게 되는 것이 쉘이다. 쉘은 입력하는 모든 명령을 해석하고 실행한다. 현재 시스템에서 사용할 수 있는 쉘을 /etc/shells 에 등록되어 있다. 특정 쉘을 사용하고 싶다면 쉘의 설치 후 /etc/shells 에 등록 해주어야 한다. 사용자 각자의 쉘은 /etc/passwd 파일의 username 필드 뒤쪽에 등록되어 있다. 리눅스에서 사용 가능한 쉘의 종류 Bash Bourne Again 셀 현재 리눅스의 표준 쉘로 가장 많이 사용되고 있다. sh을 기반으로 ksh 과 csh 의 좋은 점만 따다가 만든 공짜 쉘이었다.(그래서 많이 쓰인것도 있음) bash 는 리눅스 뿐만 아니라 GNU 운영체제, MAC OS 등 다양한 운영체제에서 사용된다. PO..
로그인 사용자 식별자(id) 와 접속 키(password) 입력에 의해 접근 허가를 받는 과정 root 사용자 일반 사용자 이외에 시스템 자원에 모두 접근할 수 있는 특수 사용자로, super user 이다. 그룹 식별자 서로 다른 사용자들을 특정 자원에 대해 같은 권한을 가지게 하기 위한 목적으로 그룹을 사용한다. 따라서 사용자는 로그인 후 그룹 식별자(id) 도 갖게 된다. /etc/passwd 사용자의 이름과 접속키 저장된 텍스트 파일 * 접속키는 암호화되어 저장하는데, 실제 접속키는 /etc/shadow 파일에 저장되어 있다. /etc/passwd 파일 내용 root@linux:~$ cat /etc/passwd | egrep 'root|mysql|postgres|john' root:x:0:0:ro..
Oracle RAC(Real Applications Cluster) RAC 데이터베이스에는 일반적으로 여러 개별 서버에 동일 공유 데이터베이스에 대한 여러 Instance 가 포함된다. 대부분의 회사들은 oracle 서버를 사용할 때 RAC 구조로 서버를 구성한다. RAC으로 연결된 N개의 Instance는 동일한 Datafile을 공유(사실 같은 파일을 공유한다기보다는.. 동기화 작업으로? 내용은 같으나 물리적 위치는 다르지 않나?)하여 사용하지만, 데이터베이스 작업에 사용할 수 있는 CPU나 메모리 등의 Resouce 는 서로 공유하지 않고 해당 Node의 Resource만 사용한다. 아래와 같은 이미지로 RAC 을 구성할 때, tnsnames.ora 는 다음과 같이 구성 TNS_I1 = (DESCR..