Skip to main content

8.1 최적화 개요

8.1 최적화 개요

Database데이터베이스의 performance성능은 depends테이블, on쿼리, several환경 factors설정 at the데이터베이스 database레벨의 level,여러 such요소에 as따라 tables,달라집니다. queries,이러한 and소프트웨어 configuration구조가 settings.하드웨어 These레벨의 software constructs result in CPU andCPU, I/O operations작업으로 at이어지며, the이를 hardware최소화하고 level,최대한 which효율적으로 you만들어야 must합니다. minimize데이터베이스 and성능과 make관련된 as일을 efficient함에 as있어, possible.소프트웨어 As측면에서 you높은 work수준의 on규칙과 database가이드라인을 performance,배우고 you벽걸이 start시계 by같은 learning것을 the사용하여 high-level성능을 rules측정하는 and것부터 guidelines시작하게 for the것입니다. software전문가 side,수준이 and되고 measuring나면, performance내부에서 using일어나는 wall-clock일에 time.대해 As you많이 become an expert, you learn more about what happens internally, and start measuring things such as배우고, CPU cycles and사이클, I/O operations.작업 등으로 성능을 측정하기 시작할 것입니다.

Typical일반 users사용자는 aim기존의 to소프트웨어 get the하드웨어 best구성에서 database최고의 performance데이터베이스 out성능을 of얻는 their것을 existing목표로 software합니다. and고급 hardware configurations. Advanced users look for opportunities to improve the사용자는 MySQL software소프트웨어 itself,자체를 or개선할 develop their있는 own기회를 storage찾거나, engines자체 and스토리지 hardware엔진과 appliances하드웨어 to어플라이언스를 expand the개발하여 MySQL ecosystem.생태계를 확장할 수 있습니다.

Optimizing데이터베이스 at레벨에서의 the Database Level최적화

The데이터베이스 most애플리케이션의 important속도를 factor높이는 in making있어 a가장 database중요한 application요소는 fast기본 is its basic design:설계입니다:

  • 테이블이

    Are제대로 the구축되어 tables있습니까? structured특히 properly?컬럼에 In적절한 particular,데이터 do타입을 the사용했고, columns have테이블에는 the작업 right유형에 data적합한 types,컬럼을 and사용했습니까? does예를 each들어, table빈번한 have업데이트를 the수행하는 appropriate애플리케이션은 columns대체로 for소수의 the컬럼을 type가진 of다수의 work?테이블을 For사용하고, example,대량의 applications데이터를 that분석하는 perform애플리케이션은 frequent대체로 updates소수의 often컬럼을 have가진 many다수의 tables테이블을 with few columns, while applications that analyze large amounts of data often have few tables with many columns.

    사용합니다.
  • 쿼리를

    Are효율적으로 the수행하기 right위해 적절한 indexes인덱스 in설정되어 place to make queries efficient?

    있습니까?
  • 테이블마다

    Are적절한 you스토리지 using엔진을 the사용하고 appropriate있으며, storage engine스토리지 for엔진의 each장점과 table,기능을 and taking활용하고 advantage있습니까? of특히 the strengths and features of each storage engine you use? In particular, the choice of a transactional storage engine such as InnoDB or같은 a트랜잭션 nontransactional스토리지 one엔진 such또는 as MyISAM can같은 be비트랜잭션 very스토리지 important엔진의 for선택은 performance성능과 and확장성에 scalability.

    매우
    중요할
    Note

    InnoDB is the default storage engine for new tables. In practice, the advanced InnoDB performance features mean that InnoDB tables often outperform the simpler MyISAM tables, especially for a busy database.

  • Does each table use an appropriate row format? This choice also depends on the storage engine used for the table. In particular, compressed tables use less disk space and so require less disk I/O to read and write the data. Compression is available for all kinds of workloads with InnoDB tables, and for read-only MyISAM tables.

  • Does the application use an appropriate locking strategy? For example, by allowing shared access when possible so that database operations can run concurrently, and requesting exclusive access when appropriate so that critical operations get top priority. Again, the choice of storage engine is significant. The InnoDB storage engine handles most locking issues without involvement from you, allowing for better concurrency in the database and reducing the amount of experimentation and tuning for your code.

  • Are all memory areas used for caching sized correctly? That is, large enough to hold frequently accessed data, but not so large that they overload physical memory and cause paging. The main memory areas to configure are the InnoDB buffer pool and the MyISAM key cache.

    있습니다.

참고사항
InnoDB는 신규 테이블의 기본 스토리지 엔진입니다. 실제, InnoDB의 고급 성능 기능으로 인해 단순한 MyISAM 테이블보다 나은 성능을 발휘하는 경우가 많으며, 특히 사용량이 많은 데이터베이스에서 뛰어납니다.

  • 각 테이블은 적절한 행 서식을 사용하고 있습니까? 이 선택은 테이블에 사용되는 스토리지 엔진에 따라 달라집니다. 특히 압축된 테이블은 디스크 공간을 적게 사용하므로 데이터 읽기 및 쓰기에 필요한 디스크 I/O가 줄어듭니다. 압축은 InnoDB 테이블을 사용하는 모든 종류의 워크로드, MyISAM 테이블의 읽기 전용 워크로드에 사용할 수 있습니다.
  • 애플리케이션에서 적절한 잠금 전략을 사용하고 있습니까? 예를 들어, 데이터베이스 작업이 동시에 수행될 수 있도록 가능한 한 공유 액세스를 허용하거나, 중요한 작업이 최우선 순위를 차지할 수 있도록 배타적 액세스를 요청합니다. 여기서도 스토리지 엔진의 선택이 중요합니다. InnoDB 스토리지 엔진은 사용자가 관여하지 않고도 대부분의 잠금 문제를 처리하며, 덕분에 데이터베이스의 동시성을 향상시키고 코드에 대한 실험과 튜닝의 양을 줄일 수 있습니다.
  • 캐싱에 사용되는 모든 메모리 영역의 크기가 올바르게 설정되어 있습니까? 자주 액세스하는 데이터를 보관할 수 있을 만큼 충분히 커야 하지만, 물리적 메모리를 과부하시켜 페이징을 유발할 정도로 크지는 않아야 합니다. 구성해야 할 주요 메모리 영역은 InnoDB 버퍼 풀과 MyISAM 키 캐시입니다.

하드웨어 레벨에서의 최적화

데이터베이스가 바빠지면 바쁠수록 모든 데이터베이스 애플리케이션은 결국 하드웨어의 한계에 도달하게 됩니다. DBA는 애플리케이션을 조정하거나 서버를 재구성하여 이러한 병목 현상을 피할 수 있는지 또는 추가 하드웨어 리소스가 필요한지 여부를 평가해야 합니다. 시스템 병목 현상은 일반적으로 다음과 같은 원인으로 인해 발생합니다:

  • 디스크 탐색. 디스크가 데이터를 검색하는 데 시간이 걸립니다. 최신 디스크의 경우, 이 평균 시간은 일반적으로 10ms 미만이므로 이론적으로 1초당 약 100회 검색을 실행할 수 있습니다. 이 시간은 신형 디스크에서 서서히 개선되고 있지만, 하나의 테이블에 대해 최적화하는 것은 매우 어렵습니다. 탐색 시간을 최적화하는 방법은 데이터를 여러 개의 디스크에 분산시키는 것입니다.
  • 디스크 읽기 및 쓰기. 디스크가 올바른 위치에 있다면, 이제 데이터를 읽거나 써야 합니다. 최신 디스크는 하나의 디스크에서 최소 10~20 MB/s의 처리량을 제공합니다. 여러 디스크에서 병렬로 읽을 수 있기 때문에 디스크 탐색보다는 더 쉽게 최적화할 수 있습니다.
  • CPU 사이클. 데이터가 메인 메모리에 있는 경우, 결과를 얻기 위해 데이터를 처리해야 합니다. 메모리 용량에 비해 더 큰 테이블을 사용하는 것이 가장 일반적인 제한 요인이 됩니다. 그러나 작은 테이블의 경우 일반적으로 속도는 문제가 되지 않습니다.
  • 메모리 대역폭. CPU가 CPU 캐시에 담을 수 있는 것보다 더 많은 데이터를 필요로 하는 경우, 메인 메모리 대역폭이 병목 지점이 될 수 있습니다. 이는 대부분의 시스템에서 흔치 않은 병목 현상이지만, 알아두어야 할 사항입니다.

Optimizing이식성과 at성능 the사이의 Hardware Level

Any database application eventually hits hardware limits as the database becomes more and more busy. A DBA must evaluate whether it is possible to tune the application or reconfigure the server to avoid these bottlenecks, or whether more hardware resources are required. System bottlenecks typically arise from these sources:

  • Disk seeks. It takes time for the disk to find a piece of data. With modern disks, the mean time for this is usually lower than 10ms, so we can in theory do about 100 seeks a second. This time improves slowly with new disks and is very hard to optimize for a single table. The way to optimize seek time is to distribute the data onto more than one disk.

  • Disk reading and writing. When the disk is at the correct position, we need to read or write the data. With modern disks, one disk delivers at least 10–20MB/s throughput. This is easier to optimize than seeks because you can read in parallel from multiple disks.

  • CPU cycles. When the data is in main memory, we must process it to get our result. Having large tables compared to the amount of memory is the most common limiting factor. But with small tables, speed is usually not the problem.

  • Memory bandwidth. When the CPU needs more data than can fit in the CPU cache, main memory bandwidth becomes a bottleneck. This is an uncommon bottleneck for most systems, but one to be aware of.

Balancing Portability and Performance균형화

이식

가능한 MySQL 프로그램에서 성능 지향적인 SQL 확장 기능을 사용하려면, SQL문 내에 MySQL 전용의 키워드들을 /*!      */ 주석 구분 기호로 감쌉니다. 다른 SQL 서버는 주석으로 처리된 키워드를 무시합니다. 주석 작성에 대한 자세한 내용은 9.7절 '주석'을 참고합니다.

To use performance-oriented SQL extensions in a portable MySQL program, you can wrap MySQL-specific keywords in a statement within /*! */ comment delimiters. Other SQL servers ignore the commented keywords. For information about writing comments, see Section 9.7, “Comments”.