mysql 10

쿼리 성능 최적화 (2)

쿼리를 재구성하는 방법 문제가 있는 쿼리를 최적화할 때는, 원하는 결과를 얻을 수 있는 다른 쿼리를 구성하는 것이 좋지만 반드시 원하는 결과와 동일한 데이터를 산출하는 쿼리를 고집할 필요는 없다. 효율성이 향상된다면 쿼리를 다시 작성하여 약간은 다른 결과를 검색하고, 궁극적으로 애플리케이션 코드를 통해 성능을 향상 시킬 수 있다. 이 섹션에서는 광범위한 쿼리를 재구성하는 데 도움이 되는 기법에 대해 설명하고 각 기법을 언제 사용하는지에 대해 설명하고자 한다. 복잡한 쿼리 vs 많은 쿼리 쿼리 설계에 대한 중요한 질문은 "복잡한 쿼리를 여러 개의 단순한 쿼리로 분할하는 것이 더 나은지 여부"이다. 데이터베이스 설계에 대한 전통적인 접근 방식은 가능한 한 적은 쿼리로 최대한 많은 작업을 수행하는 것을 강조했..

쿼리 성능 최적화 (1)

쿼리가 느린 이유 빠른 쿼리의 핵심은 당연히도 실행 시간에 있다. 쿼리는 작업이지만, 하위 작업으로 구성되며 이러한 하위 작업은 모두 시간을 소모한다. 결국 쿼리를 최적화하기 위해서는 하위 작업을 (1) 제거하거나, (2) 발생 횟수를 줄이거나 (3) 더 빠르게 수행하여 최적화해야한다. 일반적으로 클라이언트로부터 서버까지의 쿼리의 ( 아주 대략적인 ) 라이프 사이클은 구문 분석, 계획 실행 후 다시 클라이언트로 돌아가는 것으로 이루어진다. 여기서 실행은 쿼리의 수명 중 가장 중요한 단계이며, 이 작업에서 스토리지 엔진에 대한 많은 호출과 그룹화 및 정렬과 같은 검색 후 작업이 이루어진다. 이 모든 작업을 수행하는 동안 쿼리는 네트워크, CPU 및 통계, 계획, 잠금 등의 작업에 시간을 소비하며, 특히 행..

고성능을 위한 인덱싱 (1)

개요 인덱스란, 스토리지 엔진이 행을 빠르게 찾기 위해 사용하는 데이터 구조이다. 인덱스는 우수한 성능을 위해 매우 중요하며, 데이터가 커질수록 더더욱 중요하다. 잘못된 인덱싱의 사용은 실제 성능 문제의 주요 원인이 되기도 한다. 인덱스 최적화는 쿼리 성능을 향상시키는 가장 강력한 방법이다. 인덱스는 성능을 수십 배나 향상시킬 수 있으며 최적의 인덱스는 때때로 단순히 양호한 인덱스보다 성능을 2배 정도 향상 시킬 수 있다. 인덱싱 기본 MySQL에서 인덱스가 어떻게 작동하는지 이해하는 가장 쉬운 방법은 책의 색인을 떠올리는 것이다. 책에서 특정 주제에 대해 찾고 싶다면, 색인을 펴서 주제를 논하는 페이지 번호를 찾고, 해당 페이지로 이동하면 된다. MySQL 스토리지 엔진은 비슷한 방식으로 인덱스를 사용..

운영 체제 및 하드웨어 최적화

개요 MySQL에 필요한 4가지 기본 리소스는 CPU, 메모리, 디스크, 네트워크 리소스이다. 네트워크는 심각한 병목 현상을 거의 나타내지 않지만, CPU, 메모리, 디스크는 확실히 자주 나타낸다. CPU, 메모리, 디스크 간의 관계는 복잡하여, 한 영역의 문제가 종종 다른 곳에서 나타난다. 어떤 문제에 자원을 투입하기 전에 다른 문제에 자원을 대신 투입해야하는지 자문하는 과정이 필요하다. 이 장에서는 MySQL의 적절한 성능을 위해 하드웨어와 운영 체제를 어떻게 구성해나가는 것이 필요한지 다룬다. MySQL의 성능을 제한하는 요소 MySQL의 가장 흔한 병목 현상은 "CPU 고갈"이다. MySQL이 병렬로 너무 많은 쿼리를 실행하려고 하거나 수가 적더라도 CPU에서 쿼리가 너무 오랫동안 실행될 때 CP..

Performance Schema (2)

성능 스키마 사용 앞서서, 성능 스키마가 무엇인지, 이를 어떻게 설정하는지 알아보았다면, 이곳에서는 성능 스키마를 통해 일반적인 문제를 해결해보고자 한다. SQL문 점검 1. Performance schema 직접 사용 성능 스키마는 SQL문의 성능을 점검하기 위해 다양한 인스트루먼트 세트를 제공한다. performance_schema를 사용하면 성능 문제를 일으키는 쿼리와 이유를 쉽게 찾을 수 있다. 아래와 같은 유형의 인스트루먼트를 활성화하면 SQL 구문 인스트루먼트를 확인할 수 있다. Instrument Class Description statement/sql SELECT 또는 CREATE TABLE 과 같은 SQL문 statement/sp Stored Procedure 제어 statement/sc..

Performance Schema (1)

성능 스키마 소개 성능 스키마 ( Performance Schema ) 는 MySQL 서버 내에서 실행되는 작업에 대한 상세 메트릭을 제공한다. 성능 스키마는 크게 두 가지 개념을 바탕으로 작동된다. 1. 인스트루먼트 ( instrument ) 인스트루먼트는 정보를 얻고자 하는 MySQL의 코드 내 특정 부분을 나타낸다. 2. 컨슈머 ( consumer ) 어떤 코드가 수행되었는지에 대한 정보를 저장하는 테이블을 나타낸다.대부분의 DBA가 성능 스키마를 통해 사용하는 부분이 이 컨슈머이다. 인스트루먼트 요소 SELECT * FROM performance_schema.setup_instruments WHERE DOCUMENTATION IS NOT NULL; 위와 같은 쿼리문을 통해 performance_s..

아키텍처

MySQL 서버의 구조는 다음과 같이 나누어 생각할 수 있습니다. - MySQL 엔진: 머리 역할 - 스토리지 엔진: 손발 역할 MySQL 엔진 아키텍처 My SQL 전체 구조 MySQL 서버는 다른 DBMS에 비해 구조가 상당히 독특합니다. 이 구조로 인해 엄청난 혜택이 있기도 하지만, 이상한 곳에서 문제가 되기도 합니다. MySQL은 다른 DBMS와 마찬가지로 대부분의 프로그래밍 언어에서 접근 방법을 모두 지원하고 있습니다 ( C/C++, PHP, JAVA, Python, Ruby 등 ). a) MySQL 엔진 MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룹니다. b) 스토리지 엔진 My..

Database/Real MySQL 2022.05.07

사용자 및 권한

MySQL의 사용자 계정은 단순히 사용자의 아이디 뿐 아니라 해당 사용자가 어느 IP에서 접속하고 있는지도 확인합니다. MySQL 8.0부터는 권한을 묶어서 관리하는 역할의 개념이 도입됐기 때문에 각 사용자의 권한으로 미리 준비된 권한 세트를 부여하는 것도 가능합니다. 데이터베이스의 보안은 중요하기에, 반드시 계정의 식별 방식과 권한, 역할에 대한 기본적인 내용을 숙지해야 합니다. 사용자 식별 MySQL은 다른 DBMS와 달리 사용자의 접속 지점(클라이언트가 실행된 호스트명이나 도메인 또는 IP주소)도 계정의 일부가 됩니다. → 계정을 언급할 때는 항상 아이디와 호스트를 함께 명시해야 한다. (예) svc_id@127.0.0.1 호스트가 함께 명시되기 때문에, 위 아이디로 MySQL서버에 접속을 하면, ..

Database/Real MySQL 2022.05.07

MySQL 설치와 설정

MySQL 서버 설치 1) 버전 선택 가능한 한 최신 버전을 설치하는 것이 좋습니다. MySQL 8.0 버전이라면 MySQL 8.0.15와 8.0.20 사이의 버전부터 시작하는 걸 권장합니다. 커뮤니티 에디션과 엔터프라이즈 에디션 사이에 기능적인 차이는 없습니다. 다만, 기술 지원의 차이만 존재합니다. ( 이런 상용화 방식을 오픈 코어 모델이라고 합니다 ) 2) 설치 설치는 MySQL 사이트에서 DMG파일로 진행합니다. ( mac 기준 ) 저 같은 경우, Homebrew를 이용해 설치를 했습니다. brew install mysql 설치 버전에 x86과 ARM이 있는데, 두 가지의 차이는 뭘까? x86과 ARM의 차이는 사용하는 CPU의 아키텍처. 일반적으로 데스크탑에서는 x86을 주로 사용하고 스마트폰에..

Database/Real MySQL 2022.05.06

소개

MySQL의 시작 - MySQL은 스웨덴의 TcX라는 회사의 터미널 인터페이스 라이브러리인 UNIREG로부터 시작하였습니다. TcX에서 몬티와 데이빗을 중심으로 개발 시작합니다. - Oracle에 인수된 후, 시장에서 사라질 것이라는 사람들의 예상과는 달리 안정성과 성능 개선에 집중하면서 MySQL 8.0부터는 상용 DBMS가 가지고 있는 기능들이 장착되기 시작하였습니다. MySQL의 경쟁력 - 오라클과 비교했을 때, MySQL의 경쟁력은 당연히 가격이나 비용에 있습니다. - 최근 컴퓨터 시장의 변화는 방대한 데이터량을 산출하고 있는데, 이를 감당하기에 오라클 RDBMS는 비용이 많이 듭니다. - 페이스북 DBA는 이렇게 말합니다. "페이스북이 가진 데이터를 모두 오라클 RDBMS에 저장하면 페이스북은 ..

Database/Real MySQL 2022.05.06