728x90

친절한 SQL 3

[친절한 SQL 튜닝 스터디] 6장. DML 튜닝

6.0 DML 성능 영향 요소 기본적인 DML 튜닝을 설명하기 전 DML 성능에 영향을 미치는 요소에 대해 설명한다. 인덱스 인덱스를 위한 데이터를 생성하거나 삭제하는 작업은 DML 성능에 영향을 준다. INSERT, DELETE는 인덱스 조작을 한 번만 수행한다. UPDATE는 인덱스 조작을 두 번 수행한다. (DELETE, INSERT) 시스템마다 다르지만 인덱스 1개에 100만 건 데이터를 넣을 때는 5초 인덱스 3개에 100만 건 데이터를 넣을 때는 40초 무결성 제약 PK, FK, Check, Not Null 같은 제약도 DML 성능에 영향을 미친다. 시스템마다 다르지만 PK가 없으면 100만건 데이터를 넣을 때는 1.3초 PK가 있으면 100만건 데이터를 넣을 때는 4.95초 조건절 조건절을 ..

카테고리 없음 2024.04.04

[친절한 SQL 튜닝 스터디] 3장. 인덱스 튜닝

3.1.1 테이블 랜덤 액세스 절차 쿼리문에 사용하는 컬럼을 인덱스가 모두 포함하는 경우가 아니라면, 인덱스를 스캔한 후에 ROWID 획득한다. ROWID(오브젝트 번호, 데이터파일 번호, 블록번호)가 가리키는 테이블 블록을 버퍼 캐시에서 먼저 찾아본다. 못 찾을 때만 ROWID를 가지고 디스크에서 찾아 블록을 읽는다. 1장에서 설명했지만, 디스크에서 읽는 방법은 엄청 느리지만, 버퍼 캐시를 탐색하는 것도 생각보다 고비용 구조이므로 테이블 랜덤 액세스 수 자체를 줄여야 한다. 3.1.2 인덱스 클러스터링 팩터 - 클러스터링 팩터(Clustering Factor, 이하 'CF')는 '군진성 계수', 특정 컬럼을 기준으로 같은 값을 갖는데이터가 서로 모여있는 정도를 의미한다. - 인덱스 ROWID로 테이블을..

[친절한 SQL 튜닝 스터디] 1장. SQL 처리 과정과 I/O - 데이터 저장 구조 및 I/O 메커니즘

1.3.1 SQL이 느린 이유 SQL이 느린이유? 디스크 I/O 때문! I/O = 잠 OS가 I/O를 처리하는 동안 프로세스는 잠을 잔다! 디스크에서 데이터를 읽어야 할 때는 CPU를 OS에 반환하고 잠시 수면 상태에서 I/O가 완료되기를 대기 (I/O Call 하고 CPU 반환 -> SLEEP) 1.3.2 DB 저장구조 데이터를 저장하려면 가장 먼저 테이블 스페이스 가 필요하다 - 테이블 스페이스 : 세그먼트를 담는 컨테이너 (여러 개의 데이터 파일로 구성) - 세그먼트 : 테이블, 인덱스 처럼 데이터 저장 공간이 필요한 오브젝트 (여러 익스텐트로 구성) - 익스텐트 : 공간을 확장하는 단위 (연속된 블록의 집합) - 블록(페이지) : 레코드를 실제로 저장하는 공간 한 블록은 하나의 테이블이 독점 (한..

728x90