MySQL のメモリ使用量と CPU 使用率が高い場合のテストと解決策

MySQL のメモリ使用量と CPU 使用率が高い場合のテストと解決策

変更後:

innodb_buffer_pool_size=576M ->256M InnoDBエンジンバッファはメモリの大部分を占めるので、まずはそれを削減する必要があります。
query_cache_size=100M ->16M クエリ キャッシュ
tmp_table_size=102M ->64M 一時テーブルサイズ
キーバッファサイズ = 256m -> 32M

mysql サービスを再起動すると、仮想メモリが 200 未満に低下しました。

また、MySQL インストール ディレクトリには、my-huge.ini、my-large.ini、my-medium.ini などのファイルがいくつかあります。これらはメモリ サイズに基づいた推奨構成であり、初心者がセットアップ時に参照することもできます。
2G メモリ MYSQL データベース サーバー my.ini 最適化 (my.ini)
2G メモリ、ステーション数が少ない、高品質設定、テスト機能:
table_cache=1024 物理メモリが大きいほど、設定が大きくなります。デフォルトは2402ですが、512~1024に調整するのが最適です。
innodb_additional_mem_pool_size=8M デフォルトは2M
innodb_flush_log_at_trx_commit=0 innodb_log_buffer_size キューが一杯になるまで待ってから均一に保存します。デフォルト値は 1 です。
innodb_log_buffer_size=4M デフォルトは1M
innodb_thread_concurrency=8 サーバーのCPU数を設定します。デフォルトは8です。
key_buffer_size=256M デフォルトは218ですが、128に調整するのが最適です。
tmp_table_size=64M デフォルトは16M、最大値は64~256に調整してください
read_buffer_size=4M デフォルトは64K
read_rnd_buffer_size=16M デフォルトは256K
sort_buffer_size=32M デフォルトは256K
max_connections=1024 デフォルトは1210

テスト1:
table_cache=512 または 1024
innodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=1M
innodb_thread_concurrency=8 サーバーのCPU数を設定します。デフォルトは8です。
キーバッファサイズ=128M
tmp_table_size=128M
read_buffer_size=64K または 128K
読み取りバッファサイズ=256K
ソートバッファサイズ=512K
最大接続数=1024

テスト2:
table_cache=512 または 1024
innodb_additional_mem_pool_size=8M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=4M
innodb_thread_concurrency=8
キーバッファサイズ=128M
tmp_table_size=128M
読み取りバッファサイズ=4M
読み取りバッファサイズ=16M
ソートバッファサイズ=32M
最大接続数=1024

一般的に:
テーブルキャッシュ=512
innodb_additional_mem_pool_size=8M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=4M
innodb_thread_concurrency=8
キーバッファサイズ=128M
tmp_table_size=128M
読み取りバッファサイズ=4M
読み取りバッファサイズ=16M
ソートバッファサイズ=32M
最大接続数=1024

テスト後、特別な状況がない場合は、デフォルトを使用するのが最適です。
2Gメモリ、複数ステーション用、ストレス耐性設定、最適:
table_cache=1024 物理メモリが大きいほど、設定が大きくなります。デフォルトは2402ですが、512~1024に調整するのが最適です。
innodb_additional_mem_pool_size=4M デフォルトは2M
innodb_flush_log_at_trx_commit=1
(0 に設定すると、innodb_log_buffer_size キューがいっぱいになるまで待ってから均一に保存されます。デフォルト値は 1 です)
innodb_log_buffer_size=2M デフォルトは1M
innodb_thread_concurrency=8 サーバーの CPU の数に設定します。デフォルト値は通常 8 です。
key_buffer_size=256M デフォルトは218ですが、128に調整するのが最適です。
tmp_table_size=64M デフォルトは16M、最大値は64~256に調整してください
read_buffer_size=4M デフォルトは64K
read_rnd_buffer_size=16M デフォルトは256K
sort_buffer_size=32M デフォルトは256K
max_connections=1024 デフォルトは1210
thread_cache_size=120 デフォルトは60
クエリキャッシュサイズ=64M

MySQL データベースのパフォーマンスを最適化する 10 個のパラメータ
(1)最大接続数:
許可される同時クライアントの数。この値を増やすと、mysqld に必要なファイル記述子の数が増えます。この数を増やす必要があります。そうしないと、接続エラーが多すぎることがよくあります。 デフォルト値は 100 ですが、1024 に変更しました。
(2)レコードバッファ:
順次スキャンを実行する各スレッドは、スキャンするテーブルごとにこのサイズのバッファを割り当てます。連続スキャンを頻繁に行う場合は、この値を増やすことをお勧めします。デフォルト値は131072(128k)ですが、16773120(16m)に変更しました。
(3)キーバッファサイズ:
インデックス ブロックはバッファリングされ、すべてのスレッドで共有されます。 key_buffer_size はインデックス ブロックに使用されるバッファー サイズです。インデックスの処理 (すべての読み取りと複数の書き込み) を改善するには、このサイズを可能な限り大きくします。大きすぎると、システムがページングを開始し、速度が大幅に低下します。デフォルト値は 8388600 (8M) ですが、私の MySQL ホストには 2GB のメモリがあるため、402649088 (400MB) に変更しました。
4) バックログ:
mysql に許可される接続の数。これは、メインの MySQL スレッドが短時間に多数の接続要求を受け取り、その後メイン スレッドが接続を確認して新しいスレッドを開始するまでに少し時間がかかる (短い時間ではありますが) 場合に機能します。
back_log 値は、MySQL が一時的に新しいリクエストへの応答を停止するまでにスタックできるリクエストの数を示します。短期間に多数の接続が予想される場合にのみ、この値を増やす必要があります。つまり、この値は着信 TCP/IP 接続のリスニング キューのサイズを設定します。オペレーティング システムには、このキュー サイズに対する独自の制限があります。 back_log をオペレーティング システムの制限よりも高く設定しても効果はありません。
ホスト プロセス リストを観察し、接続を待機している 264084 | unauthenticated user | xxx.xxx.xxx.xxx | null | connect | null | login | null プロセスが多数ある場合は、back_log の値を増やす必要があります。デフォルト値は 50 ですが、500 に変更しました。
(5)インタラクティブタイムアウト:
サーバーが対話型接続を閉じる前にアクションを待機する秒数。対話型クライアントは、mysql_real_connect() の client_interactive オプションを使用するクライアントとして定義されます。 デフォルト値は 28800 ですが、7200 に変更しました。
(6)ソートバッファ:
ソートを実行する必要がある各スレッドには、このサイズのバッファが割り当てられます。この値を増やすと、順序付けまたはグループ化操作が高速化されます。デフォルト値は 2097144 (2m) ですが、16777208 (16m) に変更しました。
(7) テーブルキャッシュ:
すべてのスレッドの開いているテーブルの数。この値を増やすと、mysqld に必要なファイル記述子の数が増える可能性があります。 mysql では、一意に開かれたテーブルごとに 2 つのファイル記述子が必要です。デフォルト値は 64 ですが、512 に変更しました。
(8) スレッドキャッシュサイズ:
そこに保存され再利用できるスレッドの数。その場合、新しいスレッドはキャッシュから取得され、切断時にスペースがあれば、クライアントのスレッドがキャッシュに配置されます。新しいスレッドが多数ある場合は、この変数値を増やすとパフォーマンスが向上します。 connections と threads_created 状態変数を比較すると、この変数の役割がわかります。 80に設定しました。
(9) mysql検索機能 mysqlを使用して大文字と小文字を区別せずに検索し、中国語で検索します。mysqldを起動するときに--default-character-set=gb2312を指定するだけです。
(10) 待機タイムアウト:
サーバーが接続を閉じる前にアクションを待機する秒数。 デフォルト値は 28800 ですが、7200 に変更しました。

注: パラメータは、/etc/my.cnf ファイルを変更して mysql を再起動することで調整できます。これは比較的慎重な作業であり、上記の結果はあくまでも私の意見です。自分のホストのハードウェア条件(特にメモリサイズ)に基づいて、さらに変更を加えることができます。

以下もご興味があるかもしれません:
  • MySQL InnoDB ストレージエンジンのメモリ管理の詳細な説明
  • MySQL 8.0 のメモリ消費の詳細な分析
  • MySQL メモリテーブルと一時テーブルの使用方法の詳細な説明
  • MySQL OOM (メモリオーバーフロー) の解決策
  • MySQLのメモリ使用量を表示する方法の詳細な説明
  • MySQLの一般的なメモリ不足による起動失敗に対する完璧な解決策
  • MySQL 5.6 の起動時にメモリ使用量が高くなる問題の解決方法
  • MySQL本番データベースの異常なメモリ増加のトラブルシューティングのプロセスを共有する

<<:  Vue3 を使用してアップロード コンポーネントを実装するためのサンプル コード

>>:  Kubernetes の応用分野の概要

ブログ    

推薦する

仕事の効率を上げるJS略語スキル20選

目次複数の変数を同時に宣言する場合は、1 行に短縮できます。分割代入は複数の変数に同時に値を割り当て...

スタイルを書く際の背景色宣言の重要性

タイトルの通り、ページを修正すると以下のような状況が発生する可能性があります。現在、古いページを改修...

TypeScript マッピング型の詳細

目次1. マップされた型2. マッピング修飾子3. キーの再マッピング4. さらなる探究序文: Ty...

Vue カプセル化に基づくプルダウン更新およびプルアップ読み込みコンポーネント

VueとネイティブJavaScriptカプセル化に基づいて、プルダウンリフレッシュとプルアップロード...

CSS3 フレックスボックス自動記入の書き方を詳しく解説

この記事では、主に CSS3 フレックス エラスティック ボックスの自動塗りつぶしの書き方について詳...

MySQL シリーズ: MySQL リレーショナル データベースの基本概念

目次1. 基本概念2. データベース管理技術の開発3. リレーショナルデータベース(RDBMS)の概...

CSS でより美しいリンクプロンプト効果をカスタマイズする方法

提案: コードをできるだけ手書きすると、学習の効率と深さを効果的に向上できます。デフォルトでは、&l...

Dockerイメージを構築する2つの方法

目次既存のイメージからイメージを更新します。イメージを最初から構築する: Docker イメージ リ...

IE6/7 における a.getAttribute(href,2) 問題の分析と解決

簡単な説明<br />IE6および7では、一般的なaタグ(HTMLで記述され、DOM操作...

HTML ページでコンテンツの選択、コピー、右クリックを防止する方法の詳細な説明

時には、Web ページに掲載されているコンテンツが悪意のある人物に盗用されるのを望まないため、Web...

JS でタブ効果を書く

この記事の例では、タブ効果を記述するためのJSの具体的なコードを参考までに共有しています。具体的な内...

JavaScript タイマーの詳細

目次1. 簡単な紹介2. 間隔を設定する2.1 説明2.2 パラメータ2.3 戻り値2.4 使用法3...

特殊効果メッセージボックスを実現するネイティブJS

この記事では、ネイティブ JS で実装された特殊効果メッセージ ボックスを紹介します。効果は次のとお...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

ウェブ開発者はIE7とIE8の共存を懸念している

今日、IE8 をインストールしました。ダウンロードするために Microsoft の Web サイト...