MySQL の CPU 使用率を理解する: ツールとテクニック

WBOY
リリース: 2024-09-09 22:34:02
オリジナル
355 人が閲覧しました

Understanding MySQL CPU Usage: Tools and Techniques

MySQL の CPU 使用率とは何ですか?

MySQL の CPU 使用率とは、クエリの処理、データベース トランザクションの管理、データベース システムの維持などの操作を実行するために MySQL サーバーが利用するコンピューターのプロセッサ リソースの割合を指します。本質的には、CPU の計算能力のどれだけが、特定の時点で MySQL タスクの実行に割り当てられているかを測定します。

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_%' コマンドを実行します。

サーバーのステータスと変数のリストのうち、threads_running と thread_connected は、CPU 使用率を測定するための 2 つの最も重要な指標です。

  • 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 使用率に関する詳細な洞察を提供します。

外部監視ツールを使用する

Percona Monitoring and Management (PMM) や Releem などのさまざまな外部監視ソリューションは、CPU 使用率などの MySQL のパフォーマンス メトリクスの詳細な分析を提供します。

これらのツールは、直感的なインターフェイスを通じて CPU と関連するメトリクスの包括的な概要を提供し、傾向や問題を特定するのがはるかに簡単になります。

MySQL での高い CPU 使用率の診断

MySQL データベース内の CPU 使用率が高いと、依存するアプリケーションのパフォーマンスと信頼性に影響します。この問題を効果的に診断するには、MySQL の運用メカニズム、クエリ実行プロセス、およびより広範なシステム環境を徹底的に調査することが重要です。

1. 非効率なクエリ

CPU 使用率が高くなる最も一般的な原因の 1 つは、非効率または複雑な SQL クエリです。適切なインデックスが作成されていないクエリや、テーブル全体のスキャンが含まれるクエリでは、データベース エンジンが過剰な CPU サイクルを消費する可能性があります。この非効率性は、データベースが必要以上に多くのデータを読み取り、各行を個別に処理し、インデックスの助けを借りずに複雑な計算を実行する必要があるために発生します。

  • 次善のインデックス使用法 – インデックスがないと、MySQL はテーブル全体のスキャンを実行する必要があり、これは CPU の負荷が非常に高くなります。インデックスは、クエリ パターンと頻繁にアクセスされる列に基づいて戦略的に作成する必要があります。
  • 複雑な結合 – 複数の結合を含むクエリ、特に大きなテーブルや適切なインデックスがないテーブルでは、CPU 使用率が高くなる可能性があります。各結合操作により、処理されるデータ量が飛躍的に増加する可能性があります。
  • 集計関数 – 大規模なデータセットに対する SUM()、COUNT()、AVG()) を適切にインデックス付けしないと、MySQL は大量のデータのスキャンと処理を強制されます。

スロー クエリ ログを構成したり (有効にして、適切な長いクエリのしきい値を設定したり)、Releem Query Analytics を使用して、実行が完了するまでに時間がかかりすぎている特定のクエリを特定できます。これらは注意が必要なクエリです。

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 リソースを消費します。

正規化は、データの冗長性を減らし、データの整合性を向上させる方法でテーブルを編成するために使用されるデータベース設計手法です。このプロセスには、データベースを 2 つ以上のテーブルに分割し、テーブル間の関係を定義することが含まれます。過剰な正規化は複雑な結合を引き起こす可能性がありますが、過小な正規化は冗長なデータ処理や大規模なスキャンを引き起こす可能性があり、どちらも CPU 使用率を増加させます。

11 Petua untuk Mengurangkan Penggunaan CPU MySQL yang Tinggi

  1. Ciri kawalan sumber MySQL boleh membantu menghalang mana-mana pengguna tunggal daripada menggunakan terlalu banyak masa CPU, memastikan beban seimbang merentas aplikasi. Percona menerbitkan artikel mengenainya.
  2. Analisis corak pertanyaan dan buat indeks pada lajur yang kerap digunakan dalam klausa WHERE, syarat JOIN dan sebagai sebahagian daripada pernyataan ORDER BY dan GROUP BY. Berhati-hati terhadap pengindeksan berlebihan, kerana ia boleh menyebabkan peningkatan overhed semasa operasi tulis.
  3. Arahan ini menunjukkan kepada anda cara pangkalan data melaksanakan pertanyaan tertentu, termasuk indeks yang digunakan. Pelan pelaksanaan boleh mendedahkan jika pertanyaan menghasilkan imbasan jadual penuh atau jika pertanyaan menggunakan indeks secara tidak cekap atau tidak sama sekali. Keputusan ini akan menjadi sasaran untuk pengoptimuman pertanyaan.
  4. Kurangkan kerumitan cantuman, terutamanya yang melibatkan berbilang jadual atau set data yang besar. Semua jadual yang digabungkan harus mempunyai indeks yang sesuai pada lajur gabungan. Pertimbangkan untuk menyahnormalkan skema anda jika gabungan tertentu memberi kesan besar kepada penggunaan CPU.
  5. Pecahkan pertanyaan kompleks kepada pertanyaan yang lebih ringkas untuk mengelakkan imbasan jadual penuh dan mengurangkan penggunaan jadual sementara, terutamanya yang dibuat pada cakera. Gunakan subkueri dan jadual terbitan dengan berhati-hati.
  6. Laraskan saiz kumpulan penimbal InnoDB untuk memuatkan sebanyak mungkin set data yang berfungsi ke dalam ingatan, mengurangkan penggunaan I/O cakera dan CPU untuk bacaan cakera. Saiz kolam penimbal sebaiknya ditetapkan kepada kira-kira 70-80% daripada memori sistem yang tersedia.
  7. Nilai lalai untuk saiz cache benang mungkin terlalu rendah untuk sistem di bawah beban berat atau dengan pusing ganti sambungan yang kerap. Konfigurasikan saiz cache benang untuk mengurangkan overhed mencipta dan memusnahkan benang untuk sambungan. Titik permulaan adalah untuk menetapkan saiz cache benang kepada bilangan sambungan serentak yang biasanya dikendalikan oleh sistem anda pada masa puncak.
  8. Laksanakan pengumpulan sambungan dalam lapisan aplikasi untuk mengurangkan overhed sambungan yang kerap dan terputus sambungan ke pangkalan data. Pengumpulan sambungan membolehkan satu set sambungan digunakan semula dalam kalangan berbilang pelanggan, mengurangkan beban CPU yang dikaitkan dengan pengurusan sambungan.
  9. MySQL harus dijalankan pada pelayan dengan sumber khusus. Berkongsi sumber dengan aplikasi intensif CPU lain boleh menyebabkan perbalahan dan penggunaan CPU yang tinggi.
  10. Gunakan perkakasan yang sepadan dengan keperluan beban kerja anda. Dalam senario terikat CPU, memilih pemproses dengan kiraan teras yang lebih tinggi dan kelajuan jam yang lebih pantas boleh meningkatkan prestasi. Pertimbangkan SSD berbanding HDD untuk storan bagi mengurangkan beban CPU yang dikaitkan dengan operasi I/O cakera.
  11. Skema Prestasi MySQL dan log pertanyaan perlahan boleh digunakan untuk memantau operasi pangkalan data dan mengenal pasti corak penggunaan CPU yang tinggi. Alat ini boleh membantu menentukan pertanyaan yang tidak cekap dan konfigurasi suboptimum yang menyumbang kepada penggunaan CPU yang tinggi.

Keupayaan Releem untuk Pengoptimuman CPU MySQL

Releem menawarkan pelbagai keupayaan untuk membantu anda memantau dan mengurus penggunaan CPU anda:

  • Antara Muka Intuitif: Antara muka mesra pengguna mempersembahkan trend penggunaan CPU dari semasa ke semasa dalam format yang boleh diakses secara visual. Ia memudahkan proses pengoptimuman, membolehkan anda membuat keputusan termaklum dengan mudah. Tidak perlu mentafsir penggunaan CPU secara manual daripada pembolehubah lain atau menggunakan CLI.
  • Pemantauan: Releem memantau pelayan anda, menangkap parameter penting dan metrik utama seperti penggunaan CPU, saiz kumpulan penimbal InnoDB, saiz cache benang dan banyak lagi. Pengumpulan data masa nyata ini memberikan pandangan yang tidak ternilai tentang dinamik prestasi pelayan anda. Analisis Prestasi Automatik Dengan mengecilkan nombor yang dikumpul semasa pemantauan, tentukan kawasan di mana kecekapan CPU boleh dipertingkatkan.
  • Syor Konfigurasi: Releem kemudian mencadangkan syor konfigurasi yang mudah digunakan untuk mengoptimumkan penggunaan CPU MySQL anda. Pengesyoran ini disesuaikan dengan ciri khusus pelayan anda dan corak beban kerja.
  • Analitis Pertanyaan: Menggali log pertanyaan perlahan untuk mengenal pasti dan menganalisis pertanyaan yang mungkin memonopoli sumber CPU. Berbekalkan pengetahuan ini, anda boleh memperhalusi pertanyaan, menggunakan pengindeksan yang betul dan mengambil tindakan pembetulan lain.

Jika anda ingin melihat keupayaan ini, anda boleh mendaftar secara percuma untuk bermula!

以上がMySQL の CPU 使用率を理解する: ツールとテクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!