8.1 최적화 개요
데이터베이스 성능은 테이블, 쿼리, 구성 설정 등 데이터베이스 수준의 여러 요인에 따라 달라집니다. 이러한 소프트웨어 구조는 하드웨어 레벨에서의 CPU 및 I / O 작업에 이어, 그들을 최소화하고 최대한 효율적으로해야합니다. 데이터베이스의 성능을 할 때 소프트웨어에서 높은 수준의 규칙과 지침에 대해 배우고 시계를 사용하여 성능을 측정하는 것부터 시작합니다. 숙련되면서 내부에서 일어나는 일들에 대해 자세하게 설명 CPU 사이클과 I / O 작업 등의 측정을 시작합니다.
일반적인 사용자의 목표는 기존의 소프트웨어와 하드웨어 구성에서 최고의 데이터베이스 성능을 얻을 수 있습니다. 고급 사용자는 MySQL 소프트웨어 자체를 개선하는 기회를 찾아 내고, 자체 스토리지 엔진과 하드웨어 장비를 개발하여 MySQL 에코 시스템을 확장 할 수 있습니다.
데이터베이스 레벨에서의 최적화
데이터베이스 응용 프로그램을 빠르게 할 수있어서 가장 중요한 요소는 기본 설계입니다.
테이블은 제대로 구축되어 있습니까? 특히 컬럼에 적절한 데이터 형식이 각 테이블에 작업의 종류에 적절한 열이 있습니까? 예를 들어, 빈번한 갱신을 수행하는 응용 프로그램은 많은 경우에 약간 열이있는 다수의 테이블을 사용하여 대량의 데이터를 분석하는 응용 프로그램은 많은 경우에 다수의 열이있는 몇몇 테이블을 사용 합니다.
쿼리를 효율적으로하기위한 적절한 인덱스 가 설정되어 있습니까?
테이블마다 적절한 스토리지 엔진을 사용하고 있으며, 사용하는 각 스토리지 엔진의 장점과 기능을 활용하고 있습니까? 특히
InnoDB
등의 트랜잭션 스토리지 엔진 또는MyISAM
과 같은 비 트랜잭션 스토리지 엔진 선택은 성능과 확장 성이 매우 중요한 경우가 있습니다.참고MySQL 5.5 이상에서는
InnoDB
는 새로운 테이블의 기본 스토리지 엔진입니다. 실제로 고급InnoDB
성능 기능은InnoDB
테이블이 특히 바쁜 데이터베이스에 대해 종종 간단한MyISAM
테이블보다 성능이 뛰어나다는 것을 의미합니다.각 테이블은 적절한 행 형식을 사용하고 있습니까? 이 선택은 테이블에 사용되는 스토리지 엔진에 따라 다릅니다. 특히 압축 테이블은 사용할 디스크 공간이 줄어들 기 때문에 데이터의 읽기 및 쓰기에 필요한 디스크 I / O를 줄일 수 있습니다. 압축은
InnoDB
테이블에서 모든 종류의 워크로드와 읽기 전용MyISAM
테이블에 사용할 수 있습니다.응용 프로그램은 적절한 잠금 전략 을 사용하고 있습니까? 예를 들어, 데이터베이스 작업을 동시에 수행 할 수 있도록 가능한 한 공유 액세스를 허용하거나 중요한 작업이 최우선되도록 적절한 경우에 독점 액세스를 요청하는 등입니다. 다시 말하지만, 스토리지 엔진의 선택이 중요합니다.
InnoDB
스토리지 엔진은 사용자가 관여하지 않고 대부분의 잠금 문제를 처리하는 데이터베이스의 동시성을 향상하고 코드의 실험과 튜닝의 양을 줄일 수 있습니다.캐시에 사용되는 메모리 영역 이 올바르게 크기 설정되어 있습니까? 즉, 자주 액세스되는 데이터를 보유하는 데 충분한 크기가 있으면서도 물리적 메모리를 오버로드 페이징을 발생시킬만큼 크지 않습니다. 구성하는 주요 메모리 영역은
InnoDB
버퍼 풀,MyISAM
키 캐시, MySQL 쿼리 캐시입니다.
하드웨어 레벨에서의 최적화
데이터베이스가 사용 될수록 어떤 데이터베이스 응용 프로그램도 결국 하드웨어의 한계에 도달합니다. 데이터베이스 관리자는 응용 프로그램을 튜닝하거나 서버를 다시 구성하여 이러한 병목 현상 을 차단할 수 있는지 여부 또는 추가 하드웨어 리소스가 필요한지 여부를 평가해야합니다. 시스템 병목 현상은 일반적으로 다음과 같은 원인에서 발생합니다.
디스크 탐색. 디스크가 데이터를 검색하려면 시간이 걸립니다. 최신 디스크는 보통이 평균 시간이 10 ms 미만이기 때문에 이론적으로 초당 약 100 탐색 수행 할 수있게합니다. 이 시간은 새로운 디스크는 점차 개선되고 있지만, 하나의 테이블에 최적화하는 것은 매우 어렵습니다. 탐색 시간을 최적화하는 방법은 여러 디스크에 데이터를 분산하는 것입니다.
디스크의 읽기 및 쓰기. 디스크가 올바른 위치에있는 경우 데이터를 읽거나 쓸해야합니다. 최신 디스크는 하나의 디스크에 적어도 10 - 20M 바이트 / 초 처리량을 제공합니다. 이것은 여러 디스크에서 병렬로 읽을 수 있기 때문에 탐색보다 최적화가 쉽습니다.
CPU 사이클. 데이터가 메인 메모리에있는 경우, 결과를 얻기 위해이를 처리해야합니다. 메모리 양과 비교하여 큰 테이블을 사용하는 것은 가장 일반적인 제한 요인이됩니다. 그러나 작은 테이블에서는 보통 속도는 문제가되지 않습니다.
메모리 대역폭. CPU에서 CPU 캐시에 들어있는 것보다 많은 데이터를 필요로하는 경우 메인 메모리의 대역폭 병목 현상입니다. 이것은 대부분의 시스템에서 드문 병목 현상이지만 인식하고 있어야합니다.
이동성과 성능의 균형
휴대용 MySQL 프로그램에서 성능 중심의 SQL 확장을 사용하려면 문에서 MySQL 고유의 키워드를 /*! */
주석 기호로 묶을 수 있습니다. 다른 SQL 서버는 댓글 된 키워드를 무시합니다. 댓글 작성 내용은 섹션 9.6 "댓글 구문" 을 참조하십시오.