MySQLのメモリ使用量を表示する方法の詳細な説明

MySQLのメモリ使用量を表示する方法の詳細な説明

序文

この記事では主にMySQLのメモリ使用量に関する関連コンテンツを紹介し、皆さんの参考と学習のために共有します。詳しい紹介を見てみましょう。

使用バージョン: MySQL 5.7

公式ドキュメント

performance_schemaでは、次のテーブルにメモリ使用量が記録されます。

mysql> '%memory%summary%' のようなテーブルを表示します。
+-------------------------------------------------+
| パフォーマンス スキーマ内のテーブル (%memory%summary%) |
+-------------------------------------------------+
| アカウント別イベント名別メモリ要約 |
| ホスト別イベント名別メモリ要約 |
| スレッド別イベント名別メモリ要約 |
| ユーザー別イベント名別メモリサマリー |
| イベント名によるグローバル メモリ サマリー |
+-------------------------------------------------+

各メモリ統計テーブルには、次の統計列があります。

* COUNT_ALLOC、COUNT_FREE: メモリ割り当て関数とメモリ解放関数の呼び出し回数の合計

* SUM_NUMBER_OF_BYTES_ALLOC、SUM_NUMBER_OF_BYTES_FREE: 割り当てられたメモリブロックと解放されたメモリブロックの合計サイズ(バイト単位)

* CURRENT_COUNT_USED: これは便利な列で、COUNT_ALLOC - COUNT_FREEに等しい

* CURRENT_NUMBER_OF_BYTES_USED: 現在割り当てられているが解放されていないメモリ ブロックの統計サイズ。これは、SUM_NUMBER_OF_BYTES_ALLOC - SUM_NUMBER_OF_BYTES_FREE に等しい便利な列です。

* LOW_COUNT_USED、HIGH_COUNT_USED: CURRENT_COUNT_USED列の最低水準点と最高水準点に対応

* LOW_NUMBER_OF_BYTES_USED、HIGH_NUMBER_OF_BYTES_USED: CURRENT_NUMBER_OF_BYTES_USED列の最低水準点と最高水準点に対応します。

TRUNCATE TABLE ステートメントは、メモリ統計テーブルに対して許可されます。 truncate ステートメントを使用すると、次の動作が発生します。

* 通常、切り捨て操作では、統計情報のベースライン データがリセットされます (つまり、以前のデータがクリアされます) が、現在のサーバーのメモリ割り当て状態は変更されません。言い換えれば、メモリ統計を切り捨てても割り当てられたメモリは解放されない。

* COUNT_ALLOC 列と COUNT_FREE 列をリセットし、カウントを再開します (これは、リセットされた値をメモリ統計のベースライン データとして使用することと同じです)

* SUM_NUMBER_OF_BYTES_ALLOC および SUM_NUMBER_OF_BYTES_FREE 列は、COUNT_ALLOC および COUNT_FREE 列と同様にリセットされます。

* LOW_COUNT_USEDとHIGH_COUNT_USEDはCURRENT_COUNT_USED列の値にリセットされます

* LOW_NUMBER_OF_BYTES_USEDとHIGH_NUMBER_OF_BYTES_USEDはCURRENT_NUMBER_OF_BYTES_USED列の値にリセットされます

* さらに、アカウント、ホスト、ユーザー、またはスレッドによって分類される依存アカウント、ホスト、ユーザー テーブル、または memory_summary_global_by_event_name テーブルで truncate を実行すると、これらのメモリ統計テーブルで truncate ステートメントが暗黙的に実行されます。

簡単に言えば、ユーザー、ホスト、スレッド、アカウント、およびグローバルディメンションに基づいてメモリを監視できます。同時に、ライブラリ sys はこれらのテーブルをさらにフォーマットし、ユーザーが各オブジェクトのメモリ オーバーヘッドを簡単に確認できるようにします。

mysql> sys.memory_global_by_current_bytes から event_name、current_alloc を選択し、制限 10 を設定します。
+-------------------------------------------------------------------------------+--------------+
| イベント名 | 現在の割り当て |
+-------------------------------------------------------------------------------+--------------+
| メモリ/パフォーマンス スキーマ/イベント ステートメント履歴 | 13.66 MiB |
| メモリ/パフォーマンス スキーマ/イベント ステートメント 履歴_long.sqltext | 9.77 MiB |
| メモリ/パフォーマンス スキーマ/イベント ステートメント ヒストリー ロング.トークン | 9.77 MiB |
| メモリ/パフォーマンス スキーマ/イベント ステートメント サマリー_by_digest.tokens | 9.77 MiB |
| メモリ/パフォーマンス スキーマ/テーブル ハンドル | 9.06 MiB |
| メモリ/パフォーマンス スキーマ/イベント ステートメント サマリー (スレッド別、イベント名別) | 8.67 MiB |
| メモリ/sql/String::value | 6.02 MiB |
| メモリ/パフォーマンス スキーマ/イベント名別のスレッドによるメモリ サマリー | 5.62 MiB |
| メモリ/パフォーマンス スキーマ/イベント ステートメント サマリー_by_digest | 4.88 MiB |
| メモリ/sql/TABLE | 4.35 MiB |
+-------------------------------------------------------------------------------+--------------+

デフォルトでは、performance_schema は performance_schema のメモリ オーバーヘッドのみをカウントします。 MySQL のインストールに応じて、コード領域には performance_schema、sql、client、innodb、myisam、csv、memory、blackhole、archive、partition などが含まれる場合があります。

Innodb 関連のメモリ監視が有効になっているかどうかを確認します。デフォルトでは有効になっていません。

mysql> SELECT * FROM performance_schema.setup_instruments
 -> WHERE NAME LIKE '%memory%';
+------------------------------------------------------------------------------------------------+---------+-------+
| 名前 | 有効 | 時間指定 |
+------------------------------------------------------------------------------------------------+---------+-------+
| メモリ/パフォーマンス スキーマ/ミューテックス インスタンス | はい | いいえ |
| メモリ/パフォーマンス スキーマ/rwlock_instances | はい | いいえ |
| メモリ/パフォーマンス スキーマ/条件インスタンス | はい | いいえ |
| メモリ/パフォーマンス スキーマ/ファイル インスタンス | はい | いいえ |
| メモリ/パフォーマンス スキーマ/ソケット インスタンス | はい | いいえ |
| メモリ/パフォーマンス スキーマ/メタデータ ロック | はい | いいえ |
| メモリ/パフォーマンス スキーマ/ファイル ハンドル | はい | いいえ |
| メモリ/パフォーマンス スキーマ/アカウント | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント待機サマリー (アカウント別イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント ステージ サマリー (アカウント別イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント ステートメント サマリー (アカウント別イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント トランザクション サマリー (アカウント別、イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント名別のアカウントによるメモリ サマリー | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント ステージ サマリー グローバル by イベント名 | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント ステートメント サマリー グローバル by イベント名 | はい | いいえ |
| メモリ/パフォーマンス スキーマ/メモリ サマリー グローバル_by_イベント名 | はい | いいえ |
| メモリ/パフォーマンス スキーマ/ホスト | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント待機サマリー (ホスト別イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント ステージ サマリー (ホスト別、イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント ステートメント サマリー (ホスト別、イベント名別) | はい | いいえ |
| メモリ/パフォーマンス スキーマ/イベント トランザクション サマリー_by_ホスト_by_イベント名 | はい | いいえ |

条件によって範囲を絞り込むことができます:

mysql> SELECT * FROM performance_schema.setup_instruments
 WHERE NAME LIKE '%memory/innodb%';
+------------------------------------------+---------+-------+
| 名前 | 有効 | 時間指定 |
+------------------------------------------+---------+-------+
| メモリ/InnoDB/アダプティブハッシュインデックス | いいえ | いいえ |
| メモリ/innodb/buf_buf_pool | いいえ | いいえ |
| メモリ/innodb/dict_stats_bg_recalc_pool_t | いいえ | いいえ |
| メモリ/innodb/dict_stats_index_map_t | いいえ | いいえ |
| メモリ/innodb/dict_stats_n_diff_on_level | いいえ | いいえ |
| メモリ/InnoDB/その他 | いいえ | いいえ |
| メモリ/innodb/row_log_buf | いいえ | いいえ |
| メモリ/innodb/行マージソート | いいえ | いいえ |
| メモリ/innodb/std | いいえ | いいえ |
| メモリ/innodb/trx_sys_t::rw_trx_ids | いいえ | いいえ |

すべての可能なオブジェクトに対してメモリ監視を実行します。そのため、以下の設定が必要です。

mysql> update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%';
クエリは正常、306 行が影響を受けました (0.00 秒)
一致した行: 376 変更された行: 306 警告: 0

ただし、メモリ統計をオンラインで開くこの方法は、新しく追加されたメモリ オブジェクトに対してのみ有効であり、データベースを再起動すると設定が復元されます。

グローバルライフサイクル内のオブジェクトのメモリ統計を実行する場合は、構成ファイルで設定してから再起動する必要があります。

[mysqld]
パフォーマンス スキーマ インストルメント = 'メモリ/% = カウント'

同じ基礎データは、sys ライブラリの memory_global_by_current_bytes テーブルを使用して照会できます。このテーブルには、割り当てタイプ別に分類されたグローバル サーバー内の現在のメモリ使用量が表示されます。

mysql> SELECT * FROM sys.memory_global_by_current_bytes
 WHERE イベント名 LIKE 'memory/innodb/buf_buf_pool'\G
************************** 1. 行 ****************************
 イベント名: メモリ/innodb/buf_buf_pool
 現在のカウント: 1
 現在の割り当て: 131.06 MiB
現在の平均割り当て: 131.06 MiB
 最高数: 1
 上限割り当て: 131.06 MiB
 高い平均割り当て: 131.06 MiB

この sys スキーマ クエリは、current_alloc() コード領域によって現在割り当てられているメモリを集計します。

mysql> SELECT SUBSTRING_INDEX(イベント名,'/',2) AS
 コード領域、sys.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 バイト |
+---------------------------+---------------+

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

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

<<:  Linux のパスワードを紛失した場合にリセットする方法

>>:  Vue コンポーネント ライブラリ ElementUI はテーブル読み込みツリー データのチュートリアルを実装します

推薦する

Dockerでのpython3.8イメージのインストールについて

Docker Hub公式サイト1. Pythonミラーを検索するdocker 検索 python 2...

MySQLデータ損失のトラブルシューティング事例

目次序文現地調査ケースの再現要約する序文最近、友人が突然WeChatで連絡してきて、MySQLでデー...

Windows10 mysql 8.0.12 非インストール版 設定 起動方法

この記事では、MySQL 8.0.12のインストールされていないバージョンを設定して起動するための具...

Vue + Axios リクエストインターフェース方式とパラメータ渡し方式の詳しい説明

目次1. リクエストを取得する: 2. 投稿リクエスト: 3. 拡張と補足Vue スキャフォールディ...

Linux で Squid プロキシ サーバーを構築するための完全な手順

序文この記事では、Linux で Squid プロキシ サーバーを設定することに関する関連コンテンツ...

Docker ファイルの保存パス、コンテナの起動コマンド操作の取得

コンテナはすでに作成されていますが、その起動パラメータ(データがマウントされる場所)を知る方法 #コ...

Dockerイメージ解析ツールのダイブ原理解析

今日は、Docker イメージ、各レイヤーの内容を調べ、Docker/OCI イメージのサイズを縮小...

vue-admin-template 動的ルーティング実装例

ログインを提供し、ユーザー情報データインターフェースを取得するapi/user.js内 '@...

MySQL の current_timestamp の落とし穴とその解決策を共有する

目次MySQL の current_timestamp の落とし穴エラーを報告する私の解決策mysq...

MySQLの場合の使用例分析

まず、データベース テーブルを作成します。 テーブル `t_demo` を作成します ( `id` ...

Vue で Google サードパーティ ログインを実装するためのサンプル コード

目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...

「さらに表示」ボタンによる複数行テキストの切り捨てに関する考察

最近、たまたまこの小さな要件に遭遇しました。昔、JS を使用してこれを処理したことを覚えていますが、...

広告を閉じる効果を実現するJavascript

参考までに、Javascript を使用して広告を閉じる方法に関するケース スタディを示します。詳細...

React useEffect の理解と使用

目次繰り返しレンダリングループを避ける副作用の除去についてReact16.8 の新しい useEff...

CSSにおけるマージン値と垂直マージンの重なりについて

平行ボックスの余白 (二重余白の重なり) に関する面接の質問: 1 つのボックスに上余白があり、もう...