SQL 16

[친절한 SQL 튜닝] Table Full Scan VS Index Range Scan

I/O 튜닝이 곧 SQL 튜닝이다 !SQL이 느린 이유SQL이 느린 이유는 십중팔구 I/O 때문이다. 구체적으로 말해, 디스크 I/O 때문이다. I/O는 잠(SLEEP) 이다. OS 또는 I/O 서브시스템이 I/O를 처리하는 동안 프로세스는 잠을 자기 때문이다. 프로세스는 실행중인 프로그램이다. 여러 프로세스가 하나의 CPU를 공유할 수 있지만, 특정 순간에는 하나의 프로세스만 CPU를 사용할 수 있다. 열심히 일해야 할 프로세스가 한가하게 잠을 자고 있으니 I/O가 많으면 성능이 느릴 수 밖에 없다. DB버퍼캐시디스크 I/O 가 SQL 성능을 결정한다. SQL을 수행하는 과정에 계속해서 데이터 블록을 읽는데, 자주 읽는 블록을 매번 디스크에서 읽는 것은 매우 비효율적이다. 모든 DBMS 에 데이터 캐싱..

SQL 2024.11.28

[친절한 SQL 튜닝] 하드파싱 VS 소프트파싱

SQL 공유 및 재사용 라이브러리 캐시SQL 파싱, 최적화, 로우 소스 생성 과정을 거쳐 생성한 내부 프로시저를 반복 재사용 할 수 있도록 캐싱해 두는 메모리 공간.SGA 구성요소이다.SGA(System Global Area) 서버 프로세스와 백그라운드 프로세스가 공통으로 액세스하는 데이터와 제어 구조를 캐싱하는 메모리 공간SQL이 전달되면 -> DBMS 는 해당 SQL이 라이브러리 캐시에 존재하는지 확인캐시에서 찾으면 곧바로 실행 단계로 넘어감 = 소프트 파싱캐시에서 찾지 못하면 최적화 단계를 거침 = 하드 파싱 하드파싱옵티마이저는 SQL을 최적화할때 아래 정보를 사용한다.테이블, 컬럼, 인덱스 구조에 관한 기본 정보오브젝트 통계 : 테이블 통계, 인덱스통계, 컬럼통계시스템 통계 : CPU 속도, Si..

SQL 2024.11.28

[MySQL] INDEX를 활용한 쿼리 튜닝

▶ MYSQL 실행 순서 FROM : 조회 테이블 확인 ON JOIN WHERE : 데이터 추출 조건 확인 GROUP BY : 컬럼 그룹화 HAVING : 그룹화 조건 확인 SELECT : 데이터 추출 ORDER BY : 데이터 순서 정렬 ▶ EXPAIN 과 ANALYZE ▷ EXPAIN Mysql 서버의 실행계획이 무엇인지 알고싶을 때 사용함 optimizer 로 부터 query 실행 계획을 가져와서 보여준다 ▷ EXPLAIN ANALYZE 실행 계획의 다양한 지점에서 소요된 행과 측정 시간을 계산하면서 쿼리를 계획하고 실행한다 일반 EXPLAIN 이 추출하는 실행계획, 예상비용 이외에 EXPLAIN ANALYZE 는 실행계획에서 개별 iterator 의 비용을 추출한다 예를 들어, Mike 와 Jon..

SQL 2023.05.31

[MySQL] DBMS를 구성하는 물리엔진과 내부 프로세스

다음은 '업무에 바로 쓰는 SQL 튜닝' 책을 읽고 작성한 내용입니다. MySQL 이라는 DBMS 는 데이터를 저장하고, 저장된 데이터를 가공하는 연산을 수행한다. 사용자는 DB 에서 원하는 데이터를 가져오고자 SQL 문을 수행한다 실행된 SQL 문은 MySQL 엔진에 있는 파서(parser) 가 문법에러가 있는지 DB에 존재하는 테이블 대상으로 SQL 문을 작성했는지 와 같은 사항들을 문법과 구문으로 검사한다 그 이후 옵티마이저(optimizer)는 사용자가 요청한 데이터를 빠르고 효율적으로 찾아가는 전략적 계획을 수립한다. 이 계획을 토대로 스토리지 엔진에 위치한 데이터까지 찾아간 뒤 해당 데이터를 MySQL 엔진으로 전달한다. MySQL 엔진은 전달된 데이터에서 불필요한 부분을 필터링 (변경, 제거..

SQL 2023.05.31

[ORACLE] 트리거 Trigger / 분석함수

※ 트리거 - 서브 프로그램 단위의 하나인 트리거는 테이블, 뷰, 스키마 또는 데이터베이스에 관련된 PL/SQL 블록으로, 관련된 특정 사건(event)이 발생될 때마다 자동으로 해당 PL/SQL 블록이 실행됨 ( = 마치 방아쇠(trigger) 를 당기면 총알이 발사되는 것 처럼 특정 이벤트가 발생될때마다 자동으로 PL/SQL 블록이 실행된다 ) - 이벤트가 발생된다 = insert, update, delete 의 DML문이나 DDL문이 실행됨 = 트리거 Trigger ▶ 주요 트리거 유형 [1] DML 트리거 1) 문장 트리거 - 영향을 받는 행이 전혀 없더라도 트리거가 한번은 실행됨 2) 행 트리거 - 테이블이 트리거 이벤트의 영향을 받을 때마다 실행되고, 트리거 이벤트의 영향을 받는 행이 없을 경..

SQL 2022.03.30

[ORACLE] sys계정_사용자관리 / 테이블스페이스 / 사용자 계정 / data dictionary

※ 오라클 데이터베이스의 논리적 저장 구조 오라클 : 데이터를 저장하고 추출, 삭제, 변경하는 작업을 하며, 데이터는 파일에 저장됨 오라클 데이터베이스 : 데이터파일들을 가지고있으며, 이 파일들에 데이터가 저장됨 1) 데이터블럭(Data block) - 최소 저장단위 데이터블럭의 default size : 8K 2) 익스텐트(Extent) - 8개의 데이터블럭이 모여서 하나의 익스텐트가 됨 3) 세그먼트(Segment) - 하나 이상의 익스텐트로 구성 4) 테이블스페이스(Tablespace) - 세그먼트들을 저장하는 논리적인 공간 이름 - 세그먼트가 모여서 테이블스페이스가 됨. (테이블, 인덱스, 프로시저, 뷰 등 여러 오 라클 객체들이 저장됨) 5) 데이터베이스 - 테이블스페이스(Tablespace)들..

SQL 2022.03.30

[ORACLE] PL/SQL - 조건문, 반복문 / 함수 / 프로시저 - 커서 , for loop 커서

※ PL/SQL (Procedural Language extension to Structured Query Language) 와 ~ 개길다 - SQL과 일반 프로그래밍 언어의 특성을 결합한 언어 - 변수, 상수 선언 가능 - 조건문, 반복문 사용 가능 = PL/SQL 에서는 if 문, for문, while문, case문,loop문 등 사용할 수 있다 참조 : https://coding-factory.tistory.com/452 [1] 선언부 declare - declare키워드 사용 - 변수나 상수를 선언하는 부분 declare i number; result number; [2] 실행부 begin - begin ~ end 키워드 사용 - 변수에 값 할당, 조건문, 반복문, sql문장 등을 처리 - 실행해..

SQL 2022.03.29

[ORACLE] sequence / index / 뷰 / 주민번호 이용해서 나이, 성별

※ sequence - 연속적인 숫자를 생성해내는 데이터베이스 객체 - 기본키가 각각의 입력되는 row를 식별할 수 있기만 하면 된다고 할때, 시퀀스에 의해 생성된 값을 사용함 - 테이블에 있는 기본키 값을 생성하기 위해 사용되는 독립적인 객체 - 테이블에 종속되지 않음 => 하나의 시퀀스를 여러 개의 테이블에 동시에 사용할 수 있다 ▷ 시퀀스 생성 create sequence 시퀀스명 minvalue --시퀀스의 최소값 maxvalue --시퀀스의 최대값 start with 시작값 increment by 증가치 nocache --cache사용하지 않겠다 nocycle --생성된 시퀀스값이 최대치 혹은 최소치에 다다랐을 때 초기값부터 다시 시작할 지 여부 order --요청되는 순서대로 값을 생성 cre..

SQL 2022.03.28

[ORACLE] DDL / 데이터타입 / 무결성 제약조건 설정, 조회, 변경

※ DDL - 데이터베이스 오브젝트 ( = 테이블 등 ) 들을 생성, 변경, 삭제, 관리하는 명령어 : create, drop, truncate, delete ▶ create - 오브젝트의 생성명령어 create 오브젝트타입 오브젝트명... ㄴ ex ) create table 테이블명... create sequence 시퀀스명.. ▶ drop - 오브젝트 제거(영구 소멸) drop 오브젝트타입 오브젝트명; ㄴ ex ) drop table 테이블명; drop sequence 시퀀스명; ▶ alter - 오브젝트 구조 변경 alter 오브젝트타입 오브젝트명.. ㄴ ex ) alter table dept5 add loc varchar2(20); ▶ truncate - truncate table : 테이블의 데..

SQL 2022.03.26

[ORACLE] insert / update / delete

※ insert문 - 데이터를 입력하는 DML DML : 오라클 명령어중에 한 분류로, select(조회), Insert(입력), update(변경), delete(삭제) 가 있다. - 데이터를 입력할 때 숫자 값 이외에는 데이터를 ‘(홑따옴표)' 로 감싸야 함 ▶ insert 단일행 입력 insert - 기존에 존재하는 테이블에 단일행으로 데이터를 입력하는 것 (행을 밑으로 하나 쌓아주는거라고 생각하면됨) ▷ 단일행 입력 기본형태 insert into 테이블명(컬럼1, 컬럼2, ...) values(값1, 값2, ...); ▷ 모든컬럼의 데이터 입력 - 컬럼명 생략 insert into dept2 values (9002,'특판4팀',1006,'임시지역'); ▷ 일부컬럼만 입력 - not null 로 지..

SQL 2022.03.24