DB&SQL 22

나쁜 SQL이란 무엇인가

개요이번 글에서는 나쁜 SQL이 무엇인지 그리고 이를 발견했을 때 어떤 조치를 취해야하는지에 대해 다룬다. SQL은 다양한 방식으로 작성될 수 있지만 같은 결과를 반환하면서도 성능에는 큰 차이가 날 수 있다. 이때 성능이 저하된 쿼리를 '나쁜 SQL'로 간주한다. 이러한 쿼리는 자원을 비효율적으로 사용하며 전체 시스템 성능을 저하시킨다. 나쁜 SQL 정의나쁜 SQL은 비효율적으로 자원을 사용하는 SQL 문장을 의미한다. 같은 결과를 반환하는 여러 SQL 문장이 있을 수 있지만 이들 중 일부는 성능이 현저히 떨어질 수 있다. 주요 성능 저하 요인은 다음과 같다: 파싱 시간(Parsing Time)입출력(I/O)CPU 시간대기 시간(Wait Time)성능 저하 요인1. 파싱시간쿼리가 실행될 떄 데이터베이스 ..

DB&SQL 2024.05.19

SQL 성능 튜닝 - 필요성과 주요 원인

개요SQL 성능 튜닝은 데이터베이스 관리에서 필수적이며 지속적으로 이루어져야 하는 작업이다. 이번 글에서는 SQL을 언제 튜닝해야하는지 쿼리 속도가 느려지는 주요 원인은 무엇인지에 대해서 다룬다. 이를 통하여 데이터베이스 성능을 최적화 하는 방법을 이해하고자 한다. SQL 성능 튜닝의 필요성코드 작성 시 튜닝SQL 문장을 작성할 때 성능 튜닝을 고려해야한다. 대부분의 경우 작성된 쿼리가 높은 자원을 소비하지 않기에 처음에는 성능 문제로 인식되지 않을 수도 있다. 하지만 많은 쿼리가 짧은 시간 내에 실행되거나, 많은 사람들이 해당 쿼리를 이용할 경우 전체 시스템에 큰 부하를 줄 수 있다. 따라서 코드 작성 시에 튜닝 기법을 적용하여 시스템 전체의 성능 향상을 기대할 수 있다.코드 작성 후 튜닝시간이 지나면..

DB&SQL 2024.05.18

오라클 아키텍처 - 논리 및 물리적 구조

논리 및 물리적 데이터베이스 구조(Logical and Physical Database Structure) 개요데이터베이스 시스템을 효과적으로 관리하고 최적화하기 위해서는 그 내부 구조에 대한 이해가 필수적이다. 오라클 데이터베이스의 논리적 및 물리적 구조를 간략히 살펴보고 각각의 주요 구성 요소들에 대해서 알아본다. 주요 주제는 데이터 블록, 익스텐스, 세그먼트, 테이블스페이스 및 스키마이다. 본론데이터 블록데이터 블록은 데이터베이스에서 가장 작은 단위로 디스크와 메모리에서 데이터를 저장하는 기본 단위이다. Oracle 데이터베이스에서 데이터 블록의 크기는 2킬로바이트에서 32킬로바이트까지 지정할 수 있다. 이는 여러 운영체제 데이터 블록의 조합으로 구성되며 논리적 구조로 간주된다.익스텐스와 세그먼트다..

DB&SQL 2024.05.17

오라클 아키텍처 - 데이터베이스 저장 관리 체계

데이터베이스 저장 관리 체계(Database Storege Architecture) 개요오라클 데이터베이스의 저장 관리 체계에 대하여 전반적인 개념을 소개한다. 오라클 데이터베이스의 '저장소(Storege)는 디스크에 저장된 파일들을 의미하며 메모리는 저장소로 간주되지 않는다. 본론오라클 데이터베이스에는 다양한 유형의 저장 파일이 존재하며 각각의 파일은 데이터베이스 운영에 있어 중요한 역할을 수행한다. 제어 파일(Control File): 제어 파일은 데이터베이스의 물리적 구조정보를 포함하고 있으며 이 파일 없이는 데이터베이스 내 데이터에 접근할 수 없다. 따라서 제어 파일은 데이터베이스 관리에 있어 필수적이다.데이터 파일(Data File): 데이터 파일은 데이터베이스의 실제 데이터를 저장하며 테이블,..

DB&SQL 2024.05.16

오라클 아키텍쳐 - 자동 메모리 관리

개요오라클 데이터베이스의 자동 메모리 관리 기능을 간략히 다룬다. 자동 메모리 관리는 DBA가 다루는 주제이나 비 DBA인 개발자들에게 도움이 될 수 있는 기초적인 지식을 다룬다. 본론자동 메모리 관리는 오라클 데이터베이스의 성능 향상을 위해 중요한 역할을 한다. SQL 코드의 실행 성능은 각 메모리의 영역의 크기에 크게 의존한다. 특정 메모리 영역이 부족할 경우 쿼리의 성능이 저하된다. 이를 효과적으로 관리하기 위해 오라클은 자동 메모리 관리 기능을 지니고 있다. 이 기능은 오라클 전체 메모리 관리에 관여를 하여 SGA와 PGA, PGA들 강의 메모리 배분 등을 자동으로 조절한다. 자동 메모리 관리가 도입되기 전에는 DBA가 각각의 메모리 크기를 수동으로 설정해야 했으나 자동 메모리 관리 기능이 최적화..

DB&SQL 2024.05.15

오라클 아키텍처 - DML 실행 프로세스

DML 실행 프로세스 개요DML 실행 프로세스는 Shared Pool에 데이터가 있는지 체크한 뒤 Buffer Chache와 Undo Segments를 체크하여 요청 관련 블록을 카피 변경 잠금하는 과정을 거친다. 이후 커밋이 이루어질 경우 Redo Log를 기록하고 디스크에 변경 사항을 반영하는 과정을 거친다. Shared Pool Check우선 서버는 라이브러리 캐시 내에 유사 SQL 문장이 있는지 검사한다. 이미 존재한다면 같은 쿼리를 파싱할 필요가 없기에 비용을 아낄 수 있다. 다음으로 데이터 딕셔너리 캐시를 확인한다. 관련 테이블 정보가 있다면 관련 테이블의 권한이나 정의를 가져올 비용을 아낄 수 있다. 두 캐시에 관련 데이터가 없을 경우 디스크에서 데이터를 읽어들여 캐시 영역에 쓴다. Buff..

DB&SQL 2024.05.14

오라클 아키텍처 - Buffer Cachey, Redo Log Buffer, Undo

Buffer Cache, Redo Log Buffer, Undo 개요SGA의 구성요소인 Shared Pool 에 이어서 주요 구성 요소인 Buffer Cache와 Redo Log Buffer, undo를 정리해본다. Buffer Cache버퍼 캐시는 SGA에서 가장 큰 메모리 영역 중 하나로 디스크에서 읽은 데이터 블록의 복사본을 저장한다. 이 영역은 모든 사용자가 접근 할 수 있는 공유 데이터를 제공하며 한 사용자가 데이터를 요청할 떄 이미 캐시에 존재한다면 디스크 접근 없이 빠르게 데이터를 제공한다. 만약 요청한 데이터의 일부만 캐시에 존재한다면 나머지 데이터만 디스크에서 읽어오는 방식으로 처리한다. 데이터베이스 버퍼 캐시 쓰기 과정은 "더티 블록(Dirty Blocks)"이라 불리는 수정된 불록들을..

DB&SQL 2024.05.13

오라클 데이터 베이스 아키텍처 - Shared Pool

Shared Pool 개요이번 글에서는 SGA(System Global Area)의 핵심 구성 요소중 하나인 Shared Pool에 대해서 자세히 정리해본다. Shared Pool은 모든 세션에 의해 공유되는 여러 하위 메모리 영역을 포함하고 있으며 이 영역들은 데이터 베이스 성능 튜닝에 중요한 역할을 한다. Shared Pool의 구성1. Data Dictionary Cache데이터베이스 객체의 정의와 권한 정보를 저장한다.데이터베이스의 테이블이나 컬럼이 존재하는지, 사용자에게 해당 객체에 대한 접근 권한이 있는지 확인하는데 사용된다.복잡한 데이터베이스 환경에서 수천 개의 세션에서 동시에 발생하는 유사한 쿼리 요청을 효율적으로 처리하기 위해 필수적이다.2. Result Cache반복적으로 실행되는 쿼리..

DB&SQL 2024.05.12

오라클 데이터 아키텍처 - PGA

개요오라클 데이터 아키텍처에서 다루었던 PGA 영역에 대해서 보다 깊이 있는 이해를 위하여 정리한다. PGA는 유저마다 독립적으로 할당되는 메모리 영역으로 다른 유저가 접근할 수 있는 개인적인 공간이다. PGA의 주요 구성 요소PGA는 여러 하위 메모리 영역으로 구성된다. 각 영역은 데이터 베이스와 유저 간의 세션 관리, SQL 쿼리 실행, 커서 관리 등 여러 기능을 수행한다. 주요 영역은 다음과 같이 정리할 수 있다. 1. 세션 메모리 영역(Session Memory Area) : 사용자가 데이터베이스에 접속하면 해당 사용자를 위한 세션이 생성된다.세션 정보, 로그인 정보, 세션 상태 등이 저장된다.불필요한 연결은 추가적인 메모리를 사용하므로 관리가 중요하다.2. 개인 SQL 영역(Private SQL..

DB&SQL 2024.05.11

오라클 SQL튜닝 - 데이터베이스 블록

데이터베이스 블록(Block)이란?데이터베이스 블록은 오라클 데이터베이스에서 데이터를 저장하는 가장 작은 단위이다.  블록은 여러 운영체제블록으로 구성된 논리적 단위로 수백만 또는 수십억개가 될 수 있으며 실제 데이터를 저장한다. 하나의 블록에는 한 테이블 전체 또는 몇 개의 행만 포함될 수 있다. 때로는 여러 테이블이 클러스터링 될 때 다른 테이블의 행들이 하나의 블록에 포함될 수도 있다. 블록의 구조블록은 2KB에서 32KB까지 다양한 크기를 가질 수 있지만 일반적으로 8KB로 설정된다. 이 크기는 데이터베이스 설치 시 DBA에 의해 지정할 수 있다. 블록은 블록 헤더와 행으로 구성된다. 블록 헤더에는 블록 유형 정보, 해당 블록에 포함된 테이블의 정보, 그리고 각 행의 주소가 포함된 행 디렉토리를 ..

DB&SQL 2024.05.09