MySQL의 CPU 사용량은 MySQL 서버가 쿼리 처리, 데이터베이스 트랜잭션 관리, 데이터베이스 시스템 유지 관리 등의 작업을 실행하는 데 사용하는 컴퓨터 프로세서 리소스의 비율을 나타냅니다. 본질적으로 이는 특정 시간에 MySQL 작업을 실행하는 데 CPU의 계산 용량이 얼마나 할당되는지를 측정합니다.
MySQL CPU 사용량이 매우 높으면 데이터베이스가 많은 수의 요청이나 복잡한 쿼리를 적극적으로 처리하고 있음을 나타낼 수 있습니다. 반면, 지속적으로 낮은 CPU 사용량은 리소스 활용도가 낮다는 것을 의미할 수 있습니다. 이는 시스템의 다른 부분에서 비효율성이나 병목 현상이 있음을 의미할 수 있습니다.
top 명령은 Linux 및 기타 Unix 계열 운영 체제(예: CentOS)에서 사용할 수 있는 일반 도구입니다. 모든 프로세스의 CPU 사용량을 포함하여 시스템의 현재 상태에 대한 동적 실시간 보기를 제공합니다.
목록에서 mysql 프로세스를 찾아보세요. %CPU 열에는 MySQL 인스턴스의 현재 CPU 사용량이 표시됩니다.
MySQL의 SHOW STATUS 명령은 다양한 서버 상태 정보를 가져오는 강력한 도구입니다. CPU 사용량을 직접적으로 표시하지는 않지만 다양한 카운터와 상태 표시기를 통해 CPU 부하를 유추할 수 있습니다.
CLI 또는 MySQL 클라이언트를 통해 MySQL 서버에 액세스하세요.
SHOW STATUS: like 'Threads_%' 명령을 실행하세요.
서버 상태 및 변수 목록에서 thread_running 및 thread_connected는 CPU 사용량을 측정하는 데 가장 중요한 두 가지 지표입니다.
SHOW PROCESSLIST 명령은 MySQL 서버 내 모든 활성 스레드의 실시간 스냅샷을 제공합니다.
출력에는 각 스레드에 대한 여러 데이터 열이 포함됩니다. 다음 사항에 주의하세요:
보다 심층적인 분석을 위해 MySQL의 성능 스키마를 사용할 수 있습니다. 서버 이벤트에 대한 자세한 정보를 제공하며 쿼리를 통해 스레드별 또는 쿼리별 CPU 사용량을 분석할 수 있습니다.
성능 스키마를 활성화하려면(아직 활성화되지 않은 경우):
performance_schema.threads 테이블을 performance_schema.events_statements_summary_by_thread_by_event_name 테이블과 조인하는 쿼리를 실행합니다. 이 쿼리는 서버에서 실행되는 다양한 스레드 및 쿼리와 관련된 CPU 사용량에 대한 자세한 통찰력을 제공합니다.
PMM(Percona Monitoring and Management) 및 Releem을 포함한 다양한 외부 모니터링 솔루션은 CPU 사용률과 같은 MySQL의 성능 지표에 대한 심층 분석을 제공합니다.
이러한 도구는 직관적인 인터페이스를 통해 CPU 및 관련 지표에 대한 포괄적인 개요를 제공하므로 추세와 문제를 훨씬 쉽게 파악할 수 있습니다.
MySQL 데이터베이스 내의 높은 CPU 사용량은 종속 애플리케이션의 성능과 신뢰성에 영향을 미칩니다. 이 문제를 효과적으로 진단하려면 MySQL의 운영 메커니즘, 쿼리 실행 프로세스 및 광범위한 시스템 환경을 철저히 조사하는 것이 중요합니다.
CPU 사용량이 높아지는 가장 일반적인 원인 중 하나는 비효율적이거나 복잡한 SQL 쿼리입니다. 적절한 인덱싱이 부족하거나 전체 테이블 검색이 포함된 쿼리로 인해 데이터베이스 엔진이 과도한 CPU 주기를 소비할 수 있습니다. 이러한 비효율성은 데이터베이스가 필요 이상으로 많은 데이터를 읽어야 하고, 각 행을 개별적으로 처리해야 하며, 인덱스의 도움 없이 복잡한 계산을 수행해야 하기 때문에 발생합니다.
느린 쿼리 로그를 구성하거나(원하는 긴 쿼리 임계값을 활성화한 후 설정) Releem 쿼리 분석을 사용하여 실행을 완료하는 데 너무 오래 걸리는 특정 쿼리를 식별할 수 있습니다. 주의가 필요한 쿼리입니다.
MySQL은 여러 연결과 트랜잭션을 동시에 처리하도록 설계되었습니다. 그러나 동시성 수준이 증가함에 따라 이러한 동시 연결을 관리하는 복잡성도 증가합니다. 별도의 스레드가 각 활성 연결을 처리합니다. 많은 수의 스레드를 관리하려면 쿼리 실행뿐만 아니라 스레드 간 컨텍스트 전환 오버헤드 때문에 더 많은 CPU 리소스가 필요합니다.
잠금 경합은 여러 트랜잭션이 동시에 동일한 데이터에 액세스하려고 시도할 때 발생하며, 진행하기 전에 서로 잠금이 해제될 때까지 기다려야 하는 시나리오로 이어집니다. 트랜잭션이 행이나 테이블에 대한 잠금을 놓고 경쟁하면 데이터베이스 엔진은 이러한 잠금을 관리하는 데 추가 CPU 주기를 소비합니다.
information_schema.innodb_lock_waits 테이블을 보면 잠금 경합이 발생하고 있는지 확인할 수 있습니다. 잠긴 거래를 식별하려면 다음 쿼리를 사용하십시오.
SELECT t.trx_id, t.trx_state, t.trx_started, COUNT(distinct w.requesting_trx_id) AS blocked_trxs FROM information_schema.innodb_lock_waits w INNER JOIN information_schema.innodb_trx t ON t.trx_id = w.blocking_trx_id GROUP BY t.trx_id,t.trx_state, t.trx_started ORDER BY t.trx_id;
장기 실행 트랜잭션은 데이터베이스 내의 경합 수준에 대한 통찰력을 제공할 수도 있습니다. SHOW ENGINE INNODB STATUS 명령을 사용하면 모든 열려 있는 트랜잭션 목록을 최신 항목부터 오래된 항목까지 볼 수 있습니다. 가장 오래된 트랜잭션을 검사하여 실행 기간, 관련된 테이블과 행, 관련된 문에 대한 아이디어를 얻으세요.
MySQL의 성능은 구성에 따라 크게 달라집니다. 워크로드나 하드웨어에 최적화되지 않은 매개변수는 CPU 사용량을 비효율적으로 만들 수 있습니다. 일부 주요 매개변수는 다음과 같습니다.
테이블 구조와 데이터 유형을 포함한 데이터베이스의 물리적 설계도 CPU 효율성에 영향을 미칠 수 있습니다. 필요한 것보다 큰 데이터 유형(예: INT보다 BIGINT)을 사용하는 경우 MySQL은 필요한 것보다 더 많은 데이터를 처리하여 더 많은 CPU 리소스를 소비합니다.
정규화는 데이터 중복을 줄이고 데이터 무결성을 향상시키는 방식으로 테이블을 구성하는 데 사용되는 데이터베이스 설계 기술입니다. 이 프로세스에는 데이터베이스를 두 개 이상의 테이블로 나누고 테이블 간의 관계를 정의하는 작업이 포함됩니다. 과도하게 정규화하면 조인이 복잡해질 수 있지만, 과소 정규화하면 중복된 데이터 처리와 더 큰 스캔이 발생하여 CPU 사용량이 증가할 수 있습니다.
Releem は、CPU 使用率の監視と管理に役立つさまざまな機能を提供します。
これらの機能を確認したい場合は、無料でサインアップして開始できます!
위 내용은 MySQL CPU 사용량 이해: 도구 및 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!