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 はテーブル読み込みツリー データのチュートリアルを実装します

推薦する

HTML ウェブページにおけるさまざまなフォント形式の詳細

このセクションでは、テキストの変更の詳細から始めます。これにより、読者はさまざまな HTML フォン...

MySQL で explain ステートメントを使用する基本的なチュートリアル

目次1. 概要1. 説明文テスト2. 結果の各列の説明2. ID列の説明1. 環境整備2. expl...

VMwareがモジュールディスクを早期に開けない場合の解決策の詳細な説明

VMWare (Virtual Machine ware) は、「仮想 PC」ソフトウェア会社です。...

MySQL の非主キー自己増分使用例の分析

この記事では、例を使用して、MySQL の非主キーの自己増分の使用方法を説明します。ご参考までに、詳...

CSS を使用して要素のスクロールバーを非表示にするサンプルコード

どの要素でもスクロールできるようにしながら、スクロールバーを非表示にするにはどうすればよいでしょうか...

MySql のクラッシュとサービスの起動失敗の解決策

私は長い間PHPに触れてきましたが、インストール環境は非常に不慣れです。多くの問題に遭遇しました。B...

CSSでできるならJavaScriptは使わない

序文JavaScript で記述できるアプリケーションは、最終的には JavaScript で記述さ...

jQueryは、マウスをドラッグしてdivの位置とサイズを変更する方法を実装しています。

Windows フォームと同様の効果を得るには、中央をドラッグして div の位置を変更し、端をド...

ノードの対応するバージョンに関する簡単な説明 node-sass sass-loader

目次ノードのバージョンが一致しない、ノードをアップグレードまたはダウングレードするnvm を使用して...

ウェブデザインにおける階層化インターフェースの設計経験

多くのネットユーザーは、なぜ自分のウェブサイトはいつも色の問題を抱えていて、いつも地味に見え、注目を...

MySQLのユーザーアカウント管理と権限管理の詳細な説明

序文MySQL の権限テーブルは、データベースの起動時にメモリにロードされます。ユーザーが ID 認...

ubuntu20.04 上の CLion2020.1.3 での ROS のインストールと設定の詳細な説明

1. CLionをダウンロード、インストール、アクティベートするオンラインで提供されるチュートリアル...

MySQL 集計関数のネストされた使用操作

目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...

Vueでブラウザタイトルを動的に設定する方法の詳細な説明

目次ナンセンス文章最初ルーター/index.js 2番目1. プラグインをインストールする2.mai...