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デザイン: タイトルが完全に表示できない場合

推薦する

MySQLのグループカウントと範囲集計を実装する2つの方法

1つ目:通常動作 選択 SUM(ddd) AS count_days、 場合 aa.days >...

入力スクリプトなしでタイプ拡張を使用する方法

序文JS の型付けが弱く、記述基準が緩く、開発ツールのサポートが弱いため、前任者のコードをメンテナン...

CSS3 を使用して中心点の周りに要素を配置する方法の例

この記事では、CSS3 を使用して中心点を中心に要素をレイアウトする方法の例を紹介します。詳細は次の...

CocosCreator で物理エンジン ジョイントを使用する方法

目次マウスジョイント マウスジョイント距離ジョイント距離ジョイントモータージョイント直動ジョイント変...

CSSは左固定と右適応のレイアウト方法を実現します

1. フローティングレイアウト1. 最初に固定幅の div をフロートさせます。ドキュメントフローか...

MySQL 選択最適化ソリューションに関する簡単な説明

目次実生活からの例クエリが遅い最適化する方法カウント制限最大値と最小値 min&max実生活...

新しく作成された MySQL ユーザーの % には localhost が含まれていますか?

通常の説明%はどのクライアントでも接続できることを意味しますlocalhostはローカルコンピュータ...

データベース管理に役立つ 5 つの MySQL GUI ツール

MySQL には多くのデータベース管理ツールがあります。作業効率の向上に役立つ優れた GUI ツール...

nginxでイメージサーバーを構築する手順の詳しい説明(ルートとエイリアスの違い)

インストール手順は省略します( yum -y install nginx;を使用して直接インストール...

Mysql5.7.14 インストールと設定方法操作グラフィックチュートリアル(パスワード問題解決)

この記事は主に、以前のインストール方法を使用して MySQL 5.7.14 をインストールするときに...

MySQL 5.7.21 解凍バージョンのインストールと設定のグラフィックチュートリアル

この記事では、MySQL 5.7.21の解凍版をダウンロードしてインストールする詳細な手順を記録して...

ウェブページの読み込み速度を上げる25の方法とヒント

はじめに<br />誰もが高速インターネット接続にアクセスできるわけではありません。たと...

CSS スティッキー配置位置の詳細な説明: スティッキー問題の落とし穴

前書き: position:sticky は CSS ポジショニングの新しい属性です。相対ポジショニ...

MySQLでユーザー認証情報を表示する具体的な方法

具体的な方法: 1. コマンドプロンプトを開く2. mysql -u root -pコマンドを入力し...