본문 바로가기

최적화3

데이터베이스 실행 계획, 옵티마이저와 쿼리 최적화 실습 ( feat. mantech ) 목적 데이터베이스를 어떻게 하면 좀 더 잘 설계를 할 수 있을까??? 라는 질문에서 계속 궁금증이 생겨서 글을 작성한다. 쿼리가 어떤 것이 효율적인지 실행 계획을 분석하다가 정리할겸 글을 작성한다. 글에 바탕이 되는 데이터베이스는 Postgresql이고, DBeaver를 사용했다. 선행 지식 - 관계 대수 관계 대수를 프로그래밍 언어처럼 구성한 것이 SQL이고, 다음과 같은 종류가 있다. Selection: 선택 연산은 일반적으로 입력 릴레이션의 튜플 수에 비례한다. 따라서 선택 조건의 복잡도에 따라 비용이 결정된다. Projection: 투영 연산은 일반적으로 입력 릴레이션의 크기에 비례한다. 따라서 입력 릴레이션의 크기가 작으면 비용이 낮아진다. Union: Union 연산은 입력 릴레이션의 크기에 .. 2023. 5. 4.
my.cnf ( my.ini ) MySQL 최적화와 관련된 변수. MySQL 서버의 가장 적합한 설정이란 쉽지 않다. 단순 하드웨어가 아닌 워크로드, 데이터, 애플리케이션 요구 사항에 맞게 서버를 설정해야 합니다. MySQL에는 변경할 수 있는 수많은 설정이 있지만, 변경해서는 안되는 설정이 많다. 일반적으로 기본 설정이 더 좋으며 스키마 최적화, 인덱스, 쿼리 디자인에 더 많은 시간을 투자하는 것이 좋다. 스택오버플로, MySQL 포럼 등 인기 있는 사이트에서 최적의 설정이라고 올라온 자료들이 많다. 하지만 변경으로 인한 영향을 이해하지 않고 설정을 변경하면 서버 장애, 지속적인 지연, 성능 저하로 이어질 수 있다. my.cnf 파일은 시스템 환경 변수를 담고 있는 파일입니다. 성능 최적화를 하려면 하드웨어, RAID, MySQL의 I/O 동작, 메모리 사용량, 동시.. 2023. 1. 14.
MySQL Buffer Pool 1. MySQL Buffer Pool 이란?? Innodb 스토리지 엔진에서 가장 핵심적인 부분을 담당하고 있다. 디스크의 데이터 파일이나 인덱스의 정보를 메모리에 캐싱한다. 또, 쓰기 작업을 지연시켜 일괄 배치 작업으로 처리하여 디스크에 접근하는 i/o를 최적화할 수 있다. 2. Buffer Pool 크기 할당 운영체제와 각 MySQL 엔진에서 사용할 메모리도 고려하면서 설정을 해야된다. MySQL 엔진에서 크게 메모리가 사용되는 부분은 없지만, 레코드 버퍼가 상당한 메모리를 사용하기도 한다고 한다. 레코드 버퍼는 각 클라이언트 세션에서 테이블의 레코드를 읽고 쓸 때 버퍼로 사용하는 공간을 의미하고, 커넥션이 많고 사용하는 테이블도 많다면 레코드 버퍼 용도로 사용되는 메모리 공간이 필요할 수 있다. M.. 2023. 1. 13.