반응형

SQL & DB/SQL 튜닝 6

[SQL 튜닝] SQL 옵티마이저

선택도와 카디널리티 1. 선택도 : 조건절에 의해 선택되는 레코드 비율 선택도 = 1 / NDV(컬럼 값 종류 개수) 카디널리티 : 전체 레코드 중 조건절에 의해 선택되는 레코드 수 카디널리티 = 총 로우 수 * 선택도 = 총 로우 수 / NDV 옵티마이저는 카디널리티를 구하고, 데이터를 액세스하는데 드는 비용을 계산해서 데이블 액세스 방식, 조인순서, 조인방식 등을 결정 선택도를 제대로 계산하는 것이 중요 통계정보 테이블 통계 인덱스 통계 컬럼 통계 : 테이블 통계 수집할 때 함께 수집. '=' 조건에 대한 선택도는 데이터 분포가 균일하지 않은 컬럼에서는 잘못 산출될 수 있기 때문에 옵티마이저는 일반적인 컬럼통계 외에 히스토그램을 추가로 활용 시스템 통계 : 애플리케이션 및 하드웨어 성능 특성 측정 C..

SQL & DB/SQL 튜닝 2021.06.26

[SQL 튜닝] Lock과 트랜잭션 동시성 제어

오라클 Lock - 공유 리소스와 사용자 데이터를 보호할 목적으로 DML Lock, DDL Lock, 래치, 버퍼 Lock, 라이브러리 캐시 Lock/Pin 등 다양한 종류의 Lock을 사용 - 래치 : SGA에 공유된 각종 자료구조를 보호하기 위해 사용 - 버퍼 LOCK : 버퍼 블록에 대한 액세스를 직렬화 하기 위해 사용 - 라이브러리 캐시 Lock와 Pin은 라이브러리 캐시에 공유된 SQL 커서와 PL/SQL프로그램을 보호하기 위해 사용 - 애플리케이션 개발에서 가장 중요한 것은 DML LOCK - 다중 트랜잭션이 동시에 액세스하는 사용자 데이터의 무결성 보호 DML 로우 Lock - 두개의 동시 트랜잭션이 같은 로우를 변경하는 것을 방지 - DML 로우 Lock에는 배타적 모드를 사용하므로 UPD..

SQL & DB/SQL 튜닝 2021.06.19

[SQL 튜닝] 파티션을 활용한 DML튜닝

테이블 파티션 - 파티셔닝은 테이블 또는 인덱스 데이터를 특정 컬럼(파티션 키) 값에 따라 별도 세크먼트에 나눠서 저장하는 것 - 파티션이 필요한 이유 1. 관리적측면 : 파티션 단위 백업, 추가, 삭제, 변경 --> 가용성 향상 2. 성능 측면 : 파티션 단위 조회 및 DML, 경합 또는 부하 분산. 1) Range 파티션 주로 날짜 컬럼을 기준으로 파티셔닝함. 파티션 테이블에 대한 SQL 성능 향상 원리는 파티션 Pruning(=elimination)에 있음. 파티션 pruning이란 SQL 하드파싱이나 실행 시점에 조건절을 분석해서, 읽지 않아도 되는 파티션 세그먼트를 액세스 대상에서 제외하는 기능. 파티션도 클러스터, IOT와 마찬가지로 관련있는 데이터가 물리적으로 인접하도록 저장하는 클러스터링 ..

SQL & DB/SQL 튜닝 2021.06.07

[SQL 튜닝] SQL분석도구(MYSQL)

실행계획 확인 1. Explain 실행계획 확인 방법 EXPLAIN SELECT * FROM 테이블 2. 컬럼별 내용정리 MySQL Query 추적 MySQL에 root로 로그인합니다. -general_log 확인 일반적으로 모든 쿼리에대한 로그를 남기기 위해 general_log Value 값을 변경해 주어야한다. general log란 MySQL에서 실행되는 전체 쿼리에 대한 로그이며, general log를 활성화하면 MySQL이 쿼리 요청을 받을 때 즉시 general log에 기록 SHOW VARIABLES LIKE '%general%'; -general_log 상태값 변경 상태값을 ON으로 변경해준다.(mysql 재시작 필요 없음) general_log_file의 기본 경로에서 실시간으로 입력..

SQL & DB/SQL 튜닝 2021.05.01

[SQL 튜닝] 인덱스 튜닝(1) - 테이블 액세스 최소화 및 부분범위 처리 활용

테이블 액세스 최소화 ROWID 논리적 주소에 가까움 포인터라고 이야기 하는 사람이 많지만 포인터가 아니다. 지시봉처럼 어딘가를 가리킨다는 의미에서는 포인터가 맞지만, 프로그래밍에서 배우는 포인터와는 전혀 상관 없음 메인메모리DB(MMDB) 잘 츄닝된 OLTP성 데이터베이스 시스템이면 버퍼캐시 히트율 99%이상. -> 디스크를 경유하지 않고 대부분 데이터를 메모리에서 읽는다는 뜻 But 메인메모리 DB만큼 빠르지 않음 메인 메모리DB의 경우 인스턴스를 기동하며 디스크에 저장된 데이터를 버퍼캐시로 로딩하고 이어서 인덱스로 생성한다. 오라클처럼 디스크 상의 주소정보를 갖는게 아니라 메모리상의 주소정보, 즉 포인터를 가지기 때문에 인덱스를 경유해 테이블을 액세스하는 비용이 낮다. I/O 매커니즘 DBA(=데이..

SQL & DB/SQL 튜닝 2021.05.01

[SQL 튜닝] 인덱스 기본

인덱스 : 테이블에서 데이터를 검색할 때 사용 인덱스 튜닝의 핵심요소 1. 인덱스 스캔 효율화 튜닝 - 인덱스 스캔과정에서 발생하는 비효율을 줄이는 것 2. 랜덤 액세스 최소화 튜닝(랜덤 I/O 방식을 사용) - 테이블 엑세스 횟수를 줄이는 것 ==> SQL튜닝은 랜덤 I/O와의 전쟁임 인덱스 구조 - 인덱스를 활용하면 일부만 읽고 멈출 수 있는 '범위 스캔'이 가능함 - DBMS는 B-Tree 인덱스를 사용 - B-Tree는 나무를 거꾸로 뒤집은 모양으로 뿌리가 위쪽에 있고 가지를 거쳐 맨 아래에 잎사귀가 있음 인덱스 수직적 탐색 - 조건을 만족하는 첫 레코드를 찾는 과정, 인덱스 스캔시작지점을 찾는 과정 - 루트를 포함한 브랜치 블록은 푯말과 같은 역할을 함. 인덱스 수평적 탐색 - 찾고자 하는 데이..

SQL & DB/SQL 튜닝 2021.04.22
반응형