>데이터 베이스 >MySQL 튜토리얼 >MySQL CPU 사용량 이해: 도구 및 기술

MySQL CPU 사용량 이해: 도구 및 기술

WBOY
WBOY원래의
2024-09-09 22:34:02430검색

Understanding MySQL CPU Usage: Tools and Techniques

MySQL의 CPU 사용량은 무엇입니까?

MySQL의 CPU 사용량은 MySQL 서버가 쿼리 처리, 데이터베이스 트랜잭션 관리, 데이터베이스 시스템 유지 관리 등의 작업을 실행하는 데 사용하는 컴퓨터 프로세서 리소스의 비율을 나타냅니다. 본질적으로 이는 특정 시간에 MySQL 작업을 실행하는 데 CPU의 계산 용량이 얼마나 할당되는지를 측정합니다.

MySQL CPU 사용량이 매우 높으면 데이터베이스가 많은 수의 요청이나 복잡한 쿼리를 적극적으로 처리하고 있음을 나타낼 수 있습니다. 반면, 지속적으로 낮은 CPU 사용량은 리소스 활용도가 낮다는 것을 의미할 수 있습니다. 이는 시스템의 다른 부분에서 비효율성이나 병목 현상이 있음을 의미할 수 있습니다.

MySQL CPU 사용량을 확인하는 방법

top 명령 사용

top 명령은 Linux 및 기타 Unix 계열 운영 체제(예: CentOS)에서 사용할 수 있는 일반 도구입니다. 모든 프로세스의 CPU 사용량을 포함하여 시스템의 현재 상태에 대한 동적 실시간 보기를 제공합니다.

  1. 터미널을 엽니다.
  2. top 명령을 실행합니다.

목록에서 mysql 프로세스를 찾아보세요. %CPU 열에는 MySQL 인스턴스의 현재 CPU 사용량이 표시됩니다.

SHOW STATUS 명령 사용

MySQL의 SHOW STATUS 명령은 다양한 서버 상태 정보를 가져오는 강력한 도구입니다. CPU 사용량을 직접적으로 표시하지는 않지만 다양한 카운터와 상태 표시기를 통해 CPU 부하를 유추할 수 있습니다.
CLI 또는 MySQL 클라이언트를 통해 MySQL 서버에 액세스하세요.
SHOW STATUS: like 'Threads_%' 명령을 실행하세요.

서버 상태 및 변수 목록에서 thread_running 및 thread_connected는 CPU 사용량을 측정하는 데 가장 중요한 두 가지 지표입니다.

  • Threads_running – 휴면 상태가 아닌 스레드 수를 표시합니다. 여기서 숫자가 높다는 것은 CPU 부하가 높다는 의미일 수 있습니다.
  • Threads_connected – MySQL 서버에 열려 있는 총 연결 수를 표시합니다. 이 숫자가 threads_running보다 훨씬 높으면 많은 연결이 유휴 상태이거나 요청을 처리하기 위해 사용 가능한 CPU 리소스를 기다리고 있음을 의미할 수 있습니다.

SHOW PROCESSLIST 명령 사용

SHOW PROCESSLIST 명령은 MySQL 서버 내 모든 활성 스레드의 실시간 스냅샷을 제공합니다.

  1. CLI 또는 MySQL 클라이언트를 통해 MySQL 서버에 액세스하세요.
  2. SHOW PROCESSLIST를 실행합니다. 명령.

출력에는 각 스레드에 대한 여러 데이터 열이 포함됩니다. 다음 사항에 주의하세요:

  • 명령 열 – 형성되는 작업 유형을 나타냅니다. 장기 실행 쿼리, 특히 CPU 집약적 쿼리를 여기에서 식별할 수 있습니다.
  • 시간 열 – 명령이 실행된 시간(초)을 표시합니다. 시간 열의 값이 높은 스레드는 CPU 로드에 기여할 수 있습니다.

성능 스키마 사용

보다 심층적인 분석을 위해 MySQL의 성능 스키마를 사용할 수 있습니다. 서버 이벤트에 대한 자세한 정보를 제공하며 쿼리를 통해 스레드별 또는 쿼리별 CPU 사용량을 분석할 수 있습니다.

성능 스키마를 활성화하려면(아직 활성화되지 않은 경우):

  1. my.cnf 또는 my.ini라는 MySQL 구성 파일을 찾습니다.
  2. 다음 항목을 추가하거나 수정하세요performance_schema=ON.
  3. 이 변경 사항을 적용하려면 MySQL 서버를 다시 시작하세요.

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 사용량은 종속 애플리케이션의 성능과 신뢰성에 영향을 미칩니다. 이 문제를 효과적으로 진단하려면 MySQL의 운영 메커니즘, 쿼리 실행 프로세스 및 광범위한 시스템 환경을 철저히 조사하는 것이 중요합니다.

1. 비효율적인 쿼리

CPU 사용량이 높아지는 가장 일반적인 원인 중 하나는 비효율적이거나 복잡한 SQL 쿼리입니다. 적절한 인덱싱이 부족하거나 전체 테이블 검색이 포함된 쿼리로 인해 데이터베이스 엔진이 과도한 CPU 주기를 소비할 수 있습니다. 이러한 비효율성은 데이터베이스가 필요 이상으로 많은 데이터를 읽어야 하고, 각 행을 개별적으로 처리해야 하며, 인덱스의 도움 없이 복잡한 계산을 수행해야 하기 때문에 발생합니다.

  • 차선의 인덱스 사용 – 인덱스가 없으면 MySQL은 CPU 집약적인 전체 테이블 스캔을 수행해야 합니다. 인덱스는 쿼리 패턴과 자주 액세스되는 컬럼을 기반으로 전략적으로 생성되어야 합니다.
  • 복잡한 조인 – 특히 대규모 테이블이나 적절한 인덱스가 부족한 테이블에서 여러 조인이 포함된 쿼리는 CPU 사용률이 높아질 수 있습니다. 각 조인 작업은 처리되는 데이터 양을 기하급수적으로 늘릴 수 있습니다.
  • 집계 함수 – 대규모 데이터 세트에 대한 SUM(), COUNT(), AVG())는 적절한 인덱싱이 없으면 MySQL이 대량의 데이터를 스캔하고 처리하도록 합니다.

느린 쿼리 로그를 구성하거나(원하는 긴 쿼리 임계값을 활성화한 후 설정) Releem 쿼리 분석을 사용하여 실행을 완료하는 데 너무 오래 걸리는 특정 쿼리를 식별할 수 있습니다. 주의가 필요한 쿼리입니다.

2. 높은 동시성

MySQL은 여러 연결과 트랜잭션을 동시에 처리하도록 설계되었습니다. 그러나 동시성 수준이 증가함에 따라 이러한 동시 연결을 관리하는 복잡성도 증가합니다. 별도의 스레드가 각 활성 연결을 처리합니다. 많은 수의 스레드를 관리하려면 쿼리 실행뿐만 아니라 스레드 간 컨텍스트 전환 오버헤드 때문에 더 많은 CPU 리소스가 필요합니다.

3. 잠금 경합

잠금 경합은 여러 트랜잭션이 동시에 동일한 데이터에 액세스하려고 시도할 때 발생하며, 진행하기 전에 서로 잠금이 해제될 때까지 기다려야 하는 시나리오로 이어집니다. 트랜잭션이 행이나 테이블에 대한 잠금을 놓고 경쟁하면 데이터베이스 엔진은 이러한 잠금을 관리하는 데 추가 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 명령을 사용하면 모든 열려 있는 트랜잭션 목록을 최신 항목부터 오래된 항목까지 볼 수 있습니다. 가장 오래된 트랜잭션을 검사하여 실행 기간, 관련된 테이블과 행, 관련된 문에 대한 아이디어를 얻으세요.

4. 잘못 구성된 MySQL 서버

MySQL의 성능은 구성에 따라 크게 달라집니다. 워크로드나 하드웨어에 최적화되지 않은 매개변수는 CPU 사용량을 비효율적으로 만들 수 있습니다. 일부 주요 매개변수는 다음과 같습니다.

  • 부적절한 버퍼 풀 크기 – InnoDB 버퍼 풀은 메모리에 데이터와 인덱스를 캐싱하여 디스크 I/O를 줄입니다. 잘못된 크기의 버퍼 풀로 인해 디스크 읽기가 자주 발생할 수 있습니다. 시스템이 디스크 I/O 작업을 처리하기 때문에 MySQL CPU 사용량이 늘어납니다.
  • 스레드 캐시 크기 – 스레드 캐시가 너무 작으면 MySQL은 기존 스레드를 재사용하는 대신 새로운 연결마다 스레드를 생성하고 삭제하는 데 추가 CPU 주기를 소비할 수 있습니다.

5. 스키마 설계 문제

테이블 구조와 데이터 유형을 포함한 데이터베이스의 물리적 설계도 CPU 효율성에 영향을 미칠 수 있습니다. 필요한 것보다 큰 데이터 유형(예: INT보다 BIGINT)을 사용하는 경우 MySQL은 필요한 것보다 더 많은 데이터를 처리하여 더 많은 CPU 리소스를 소비합니다.

정규화는 데이터 중복을 줄이고 데이터 무결성을 향상시키는 방식으로 테이블을 구성하는 데 사용되는 데이터베이스 설계 기술입니다. 이 프로세스에는 데이터베이스를 두 개 이상의 테이블로 나누고 테이블 간의 관계를 정의하는 작업이 포함됩니다. 과도하게 정규화하면 조인이 복잡해질 수 있지만, 과소 정규화하면 중복된 데이터 처리와 더 큰 스캔이 발생하여 CPU 사용량이 증가할 수 있습니다.

MySQL の高い CPU 使用率を軽減するための 11 のヒント

  1. MySQL のリソース制御機能は、単一のユーザーが CPU 時間を過剰に消費することを防ぎ、アプリケーション間で負荷のバランスを確保します。 Percona はそれに関する記事を公開しました。
  2. クエリ パターンを分析し、WHERE 句、JOIN 条件、ORDER BY ステートメントや GROUP BY ステートメントの一部として頻繁に使用される列にインデックスを作成します。過剰なインデックス作成は、書き込み操作中のオーバーヘッドの増加につながる可能性があるため、注意してください。
  3. このコマンドは、使用されるインデックスなど、データベースが特定のクエリを実行する方法を示します。実行計画により、クエリの結果がテーブル全体のスキャンになるかどうか、またはクエリでインデックスが非効率的に使用されているか、まったく使用されていないかを明らかにできます。これらの結果はクエリ最適化の対象となります。
  4. 結合、特に複数のテーブルや大規模なデータセットが関与する結合の複雑さを軽減します。すべての結合テーブルには、結合列に適切なインデックスが必要です。特定の結合が CPU 使用率に大きな影響を与えている場合は、スキーマの非正規化を検討してください。
  5. 複雑なクエリをより単純なクエリに分割して、テーブル全体のスキャンを回避し、一時テーブルの使用量 (特にディスク上に作成されたテーブル) を削減します。サブクエリと派生テーブルは慎重に使用してください。
  6. InnoDB バッファー プール サイズを調整して、作業データセットをできるだけメモリに収まるように調整し、ディスク I/O とディスク読み取りの CPU 使用率を削減します。バッファ プール サイズは、利用可能なシステム メモリの約 70 ~ 80% に設定するのが理想的です。
  7. スレッド キャッシュ サイズのデフォルト値は、負荷が高いシステムや接続の切り替えが頻繁に行われるシステムには低すぎる可能性があります。スレッド キャッシュ サイズを構成して、接続用のスレッドの作成および破棄のオーバーヘッドを削減します。まず、システムがピーク時に通常処理する同時接続の数にスレッド キャッシュ サイズを設定します。
  8. アプリケーション層に接続プーリングを実装して、データベースへの頻繁な接続と切断のオーバーヘッドを削減します。接続プーリングを使用すると、一連の接続を複数のクライアント間で再利用できるため、接続管理に関連する CPU 負荷が軽減されます。
  9. MySQL は専用リソースを備えたサーバー上で実行する必要があります。他の CPU 負荷の高いアプリケーションとリソースを共有すると、競合が発生し、CPU 使用率が高くなる可能性があります。
  10. ワークロード要件に合ったハードウェアを使用してください。 CPU に制約のあるシナリオでは、コア数が多く、クロック速度が速いプロセッサを選択すると、パフォーマンスが向上します。ディスク I/O 操作に関連する CPU 負荷を軽減するには、ストレージとして HDD ではなく SSD を検討してください。
  11. MySQL のパフォーマンス スキーマとスロー クエリ ログを使用して、データベース操作を監視し、CPU 使用率の高いパターンを特定できます。これらのツールは、CPU 使用率の高さにつながる非効率なクエリや最適ではない構成を特定するのに役立ちます。

Releem の MySQL CPU 最適化機能

Releem は、CPU 使用率の監視と管理に役立つさまざまな機能を提供します。

  • 直感的なインターフェイス: ユーザーフレンドリーなインターフェイスは、時間の経過に伴う CPU 使用率の傾向を視覚的にアクセス可能な形式で表示します。最適化プロセスが簡素化され、情報に基づいた意思決定を簡単に行うことができます。他の変数から CPU 使用率を手動で解釈したり、CLI を使用したりする必要はありません。
  • モニタリング: Releem はサーバーを監視し、CPU 使用率、InnoDB バッファ プール サイズ、スレッド キャッシュ サイズなどの重要なパラメータと主要なメトリクスをキャプチャします。このリアルタイムのデータ収集により、サーバーのパフォーマンスのダイナミクスに関する貴重な洞察が得られます。 自動パフォーマンス分析 監視中に収集された数値を解析することで、CPU 効率を改善できる領域を特定します。
  • 構成の推奨事項: Releem は、MySQL CPU 使用率を最適化するために、適用しやすい構成の推奨事項を提案します。これらの推奨事項は、サーバー固有の特性とワークロード パターンに合わせてカスタマイズされます。
  • クエリ分析: 低速クエリ ログを詳細に調べて、CPU リソースを浪費している可能性のあるクエリを特定して分析します。この知識があれば、クエリを微調整したり、適切なインデックスを適用したり、その他の修正措置を講じたりすることができます。

これらの機能を確認したい場合は、無料でサインアップして開始できます!

위 내용은 MySQL CPU 사용량 이해: 도구 및 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.