MySQL 8.0 のメモリ消費の詳細な分析

MySQL 8.0 のメモリ消費の詳細な分析

MySQL 8.0 を起動すると、データベースのパフォーマンスを向上させるためにさまざまなバッファとキャッシュが構成されます。サーバー上で MySQL 8.0 サービスを構成すると、このサーバーのメモリは、オペレーティング システム、MySQL 8.0 サービス、およびその他のアプリケーションによって同時に共有されます。

実稼働環境では、メモリ アラームが頻繁に発生します。これらのアラームを処理する前に、MySQL 自体が最も多くのメモリを消費している場所を把握する必要があります。これにより、MySQL サービスが占有するメモリの量をより直感的に判断し、MySQL 自体のメモリ消費量を削減する方法を判断できます。

MySQL 構成ファイルで最もよく使用される 2 つのメモリ関連のパラメータは、innodb_buffer_pool_size と innodb_log_buffer_size です。これら 2 つのパラメータについて見てみましょう。

1. innodb_buffer_pool_size

このパラメータは、皆さんもよくご存知のバッファプールのサイズを定義します。バッファプールの内容には、InnoDB テーブル、インデックス、その他の補助バッファが含まれます。バッファプールのサイズは、MySQL システムのパフォーマンスに大きな影響を与えます。デフォルトでは、MySQL 8.0 で設定されているバッファプールのサイズは 128 MB です。通常、他の用途のない単一のマシンと単一のインスタンスである場合、MySQL の公式推奨事項では、システムメモリの 50% から 75% の間でサイズを設定します。もちろん、サーバーに他のアプリケーションを展開している場合は、メモリを解放するためにこの比率を適切に減らす必要があります。

オペレーティング システムに十分なメモリがある場合は、複数の InnoDB バッファ プール インスタンスを設定できます。次のパラメータを使用してインスタンスの数を調整できます。

mysql> '%innodb_buffer_pool_instances%' のような変数を表示します。
+------------------------------+-------+
| 変数名 | 値 |
+------------------------------+-------+
| innodb_buffer_pool_instances | 1 |
+------------------------------+-------+
セット内の 1 行 (0.00 秒)

2. innodb_log_buffer_size

このパラメータは、InnoDB ストレージ エンジンが REDO ログをディスクに書き込む前にメモリにキャッシュされるデータの最大サイズを定義します。デフォルトは 16 MB です。この値を増やすと、大規模なトランザクションでは、トランザクションがコミットされる前に REDO ログをディスクに書き込む必要がなくなります。更新、削除、挿入操作が多数の行に影響する場合は、この値を増やすことを検討する必要があります。

ここでポイントは次のようになります:

オペレーティングシステムでは、MySQL が占有するメモリは、上記の 2 つのメモリ構成パラメータだけに関連するわけではありません。通常、MySQL が占有するメモリを計算するときは、次の 4 つの値を合計します。

1. innodb_buffer_pool_size

2. key_buffer_size (このパラメータは通常、myisam テーブルが占有するメモリのキーパラメータです)

3. max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size) (これら 3 つは接続レベルのバッファです)

4. 最大接続数*2MB

したがって、top コマンドを使用して、MySQL が占有するメモリが innodb_buffer_pool_size をはるかに超えていることを確認する場合、考慮する必要があるもう 1 つの重要な要素は、接続数が制限を超えているかどうかです。接続数が多すぎると、上記の 2 つの部分 3 と 4 によって消費されるメモリが非常に大きくなります。

もちろん、上記は MySQL メモリを占有する主な要因です。また、その他のメモリ消費については、公式ドキュメントで確認できます。

メモリ使用率

上記のドキュメントでは、performance_schema を使用して MySQL のメモリ使用量を監視する方法も紹介しています。ここではプロセス全体について説明します。詳細な内容とパラメータの紹介については、公式ドキュメントを参照してください。

1. 表示

パフォーマンススキーマ.セットアップ_インストルメンツ

この表で、関心のあるメモリ変数の名前を見つけます (直接検索すると、490 件を超える結果がいくつかの主要カテゴリに分かれて表示されます。関心のあるパラメータを必ずフィルタリングしてください)。たとえば、InnoDB ストレージ エンジンによって占有されているメモリを表すメモリ/InnoDB 関連のパラメータを検索します。結果は次のようになります。

mysql> SELECT * FROM performance_schema.setup_instruments WHERE NAME LIKE '%memory/innodb%';
+------------------------------------------+---------+-------+-------------------+------------+---------------+
| 名前 | 有効 | 時間指定 | プロパティ | 揮発性 | ドキュメント |
+------------------------------------------+---------+-------+-------------------+------------+---------------+
| メモリ/InnoDB/アダプティブハッシュインデックス | はい | NULL | | 0 | NULL |
| メモリ/innodb/ログおよびページ アーカイバ | はい | NULL | | 0 | NULL |
| メモリ/innodb/buf_buf_pool | はい | NULL | グローバル統計 | 0 | NULL |
| メモリ/innodb/buf_stat_per_index_t | はい | NULL | | 0 | NULL |
| メモリ/innodb/クローン | はい | NULL | | 0 | NULL |
| メモリ/innodb/dict_stats_bg_recalc_pool_t | はい | NULL | | 0 | NULL |
| メモリ/innodb/dict_stats_index_map_t | はい | NULL | | 0 | NULL |
| メモリ/innodb/dict_stats_n_diff_on_level | はい | NULL | | 0 | NULL |
| メモリ/InnoDB/その他 | はい | NULL | | 0 | NULL |
| メモリ/innodb/パーティショニング | はい | NULL | | 0 | NULL |
| メモリ/innodb/row_log_buf | はい | NULL | | 0 | NULL |
| メモリ/innodb/行マージソート | はい | NULL | | 0 | NULL |
| メモリ/innodb/std | はい | NULL | | 0 | NULL |
| メモリ/innodb/trx_sys_t::rw_trx_ids | はい | NULL | | 0 | NULL |
| メモリ/innodb/undo::テーブルスペース | はい | NULL | | 0 | NULL |
| メモリ/innodb/ut_lock_free_hash_t | はい | NULL | | 0 | NULL |
| メモリ/innodb/api0api | はい | NULL | | 0 | NULL |
| メモリ/innodb/api0misc | はい | NULL | | 0 | NULL |
| メモリ/innodb/btr0btr | はい | NULL | | 0 | NULL |

2. 構成ファイルに関連するパラメータを記述し、統計を有効にします。memory/innodb/row_log_buf を例にとると、構成ファイルは次のように変更されます。

パフォーマンス スキーマ インストルメント = 'memory/innodb/row_log_buf=COUNTED'

3. インスタンスを起動し、performance_schema データベースの memory_summary_global_by_event_name テーブルでメモリ統計を表示します。

SELECT * FROM performance_schema.memory_summary_global_by_event_name WHERE EVENT_NAME LIKE 'memory/innodb/row_log_buf'\G

もちろん、次のように sys テーブルの結果に基づいて各カテゴリの集計結果を表示することもできます。

mysql> SELECT SUBSTRING_INDEX(イベント名,'/',2) AS
  コード領域、FORMAT_BYTES(SUM(current_alloc))
  AS 現在の割り当て
  sys.x$memory_global_by_current_bytes から
  GROUP BY SUBSTRING_INDEX(イベント名,'/',2)
  ORDER BY SUM(current_alloc) DESC;
+---------------------------+---------------+
| コード領域 | 現在の割り当て |
+---------------------------+---------------+
| メモリ/innodb | 843.24 MiB |
| メモリ/パフォーマンス スキーマ | 81.29 MiB |
| メモリ/mysys | 8.20 MiB |
| メモリ/sql | 2.47 MiB |
| メモリ/メモリ | 174.01 KiB |
| メモリ/myisam | 46.53 KiB |
| メモリ/ブラックホール | 512 バイト |
| メモリ/フェデレーション | 512 バイト |
| メモリ/csv | 512 バイト |
| メモリ/vio | 496 バイト |
+---------------------------+---------------+

詳しい情報については、公式ドキュメントを参照してください。

上記はMySQL 8.0のメモリ消費の詳細な分析です。MySQL 8.0のメモリ消費の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

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

<<:  Windows10のマウスを模倣して境界線を光らせる効果を実現するCSSの詳細解説

>>:  Webデザイン: タイトルが完全に表示できない場合

推薦する

ウェブサイト開発におけるフロントエンド開発者とアーティストの知識の違い

概要: 多くの企業、特にインターネット Web サイトを主な事業とする企業のほとんどが、「アーティス...

ログインと登録を実現するSpringboot+VUE

この記事の例では、ログインと登録を実装するためのspringboot+VUEの具体的なコードを参考ま...

HTML と CSS の基礎 (必読)

(1) HTML: ハイパーテキストマークアップ言語。主に「ヘッダー」と「ボディ」の2つの部分で構...

テーブル適応とオーバーフローのいくつかの設定の詳細な説明

1. テーブル リセットの 2 つのプロパティ: ①border-collapse: collaps...

レスポンシブWebデザイン学習(2) — 動画をレスポンシブにすることはできるのか?

前回のエピソードレビュー:昨日は、ページがさまざまなデバイス サイズにどのように対応するかについて説...

Windows での Tomcat サーバーのインストールに関するチュートリアル

1 ダウンロードして準備するまず、公式ウェブサイトからTomcatをダウンロードする必要があります。...

Xshellの一般的な問題と関連する設定の詳細な説明

この記事では、Xshell と関連する構成の一般的な問題について説明します。この記事の構成は、主に ...

impress.js プレゼンテーション層フレームワーク (デモツール) - 初めての体験

半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...

MySQL InnoDB ロックの概要

目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...

史上最も便利な Zookeeper サーバーの構築方法 (推奨)

ZooKeeperとはZooKeeper は、分散アプリケーションに効率的で可用性の高い分散調整サ...

MySQL 5.7 でブロックポジショニング DDL の問題を解決する

前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...

MySQL 5.7.29 + Win64 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

公式サイトをダウンロード自分に合ったバージョンを選択してダウンロードしてください。 ダウンロードをク...

Docker 経由で CentOS コンテナを作成する手順

目次序文コンテナ間の通信を容易にするためのブリッジネットワークを作成するCentOS7イメージを使用...

HTML リスト ボックス、テキスト フィールド、ファイル フィールドのサンプル コード

ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...

Windows 10 に TomCat をインストールするチュートリアル図

WindowsにTomCatをインストールするこの記事では、WindowsプラットフォームにTomC...