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の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Windows10のマウスを模倣して境界線を光らせる効果を実現するCSSの詳細解説
概要: 多くの企業、特にインターネット Web サイトを主な事業とする企業のほとんどが、「アーティス...
この記事の例では、ログインと登録を実装するためのspringboot+VUEの具体的なコードを参考ま...
(1) HTML: ハイパーテキストマークアップ言語。主に「ヘッダー」と「ボディ」の2つの部分で構...
1. テーブル リセットの 2 つのプロパティ: ①border-collapse: collaps...
前回のエピソードレビュー:昨日は、ページがさまざまなデバイス サイズにどのように対応するかについて説...
1 ダウンロードして準備するまず、公式ウェブサイトからTomcatをダウンロードする必要があります。...
この記事では、Xshell と関連する構成の一般的な問題について説明します。この記事の構成は、主に ...
半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...
目次1. 共有ロックと排他ロック2. 意図ロック3. レコードロック4. ギャップロック5. ネクス...
ZooKeeperとはZooKeeper は、分散アプリケーションに効率的で可用性の高い分散調整サ...
前回の記事「MySQL テーブル構造の変更、メタデータ ロックを知っておく必要があります」では、MD...
公式サイトをダウンロード自分に合ったバージョンを選択してダウンロードしてください。 ダウンロードをク...
目次序文コンテナ間の通信を容易にするためのブリッジネットワークを作成するCentOS7イメージを使用...
ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...
WindowsにTomCatをインストールするこの記事では、WindowsプラットフォームにTomC...