mysqlのメモリ割り当ての問題

MySQLのクラウドデータベースメモリは、重要な性能パラメータである増加したメモリの使用率が得られたSQLクエリとデータベースを最適化する異常な事態が頻繁に発生し、インスタンスがOOMリードHAスイッチので、そこに発生することになる、ビジネスの安定性と深刻な影響を与えます可用性。

MySQLのメモリレベルは、共有メモリのインスタンスを作成し、グローバル共有メモリとプライベートメモリレベル2のセッションの部分に分割することができる割り当てられ、すべての接続で共有されるメモリ空間です。MySQLサーバ、SQLまたはいくつかの特別なフィールド型への各接続はシングルスレッドにつながるキャッシュの各プライベートメモリの割り当ては、複数のバッファを割り当てることができるので、例外がOOMを発生したときに、プライベートメモリによって接続された各が引き起こされます。以下、各部の詳細な構成について説明します。

MySQLの>を示してグローバルのような変数' %innodb_buffer%を' ;
+ ------------------------------------- + ----------- ----- + 
| 変数名| バリュー| 
+ ------------------------------------- + ----------- ----- + 
| innodb_buffer_pool_dump_at_shutdown | OFF | 
| innodb_buffer_pool_dump_now | OFF | 
| innodb_buffer_pool_filename | ib_buffer_pool | 
| innodb_buffer_pool_instances | 8 | 
| innodb_buffer_pool_load_abort | OFF | 
| innodb_buffer_pool_load_at_startup | OFF | 
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 16777216000 | #单位:字节
+ ------------------------------------- + ----------- ----- +

共有メモリ

共有メモリ割り当ての例を照会するには、次のコマンドを実行します。

show variables where variable_name in ('innodb_buffer_pool_size','innodb_log_buffer_size','innodb_additional_mem_pool_size','key_buffer_size','query_cache_size');

説明:

バージョン5.7は、innodb_additional_mem_pool_sizeをサポートしていません。

以下のパラメータは、共有メモリ千メガバイトインスタンスの割り当ての結果のためのメモリの仕様(以下は、例えばテスト構成である)です。

1.  +---------------------------------+-----------+
2.  | Variable_name                   | Value     |
3.  +---------------------------------+-----------+
4.  | innodb_additional_mem_pool_size | 8388608 | 5. | innodb_buffer_pool_size | 524288000 | 6. | innodb_log_buffer_size | 67108864 | 7. | key_buffer_size | 16777216 | 9. | query_cache_size | 0 | 10. +---------------------------------+-----------+ 11. 5 rows in set (0.01 sec)

パラメータ:

  • innodb_buffer_pool_size
    部分キャッシュInnoDBエンジンは、最も重要なバッファ領域が雲に、メモリを介して、物理ファイル・データを補償するための重要な手段であるだろう50%のMySQLデータベースインスタンスのサイズ-部分のサイズとして80%(上のグラフ千メガバイト* 0.5 = 500メガバイト)。メインページには、データ、インデックス・ページ、ページアンドゥを使用を含み、バッファ、適応ハッシュインデックス、およびロックデータ・ディクショナリ情報やその他の情報を挿入します。SQLの動作中の読み取りおよび書き込みではなく、主に物理的なデータのファイル操作に、しかしBUFFER_POOL動作の第1、その後、チェックポイントのメカニズムによって、データファイルを書き戻します。このスペースの利点は、SQLは、欠点が遅い回復で、スピードを加速し、データベースのパフォーマンスを向上させることができるということです。

  • innodb_log_buffer_size
    64メガバイトのサイズを設定しますクラウドデータベースのMySQLに保存されたREDOログ情報の主要部分を。InnoDB REDOログは、最初にここに書き込まれ、特定の周波数に応じてREDOログ・ファイルに戻ってリフレッシュし。通常の状況下ではキャッシュのこの部分は、REDOログ・速い頻度で更新されます(毎秒マスタースレッドの更新を、トランザクションが更新されますコミットし、それはまた1/2以下のスペースをリフレッシュします)のでスペースは、あまりにも多くを必要としません。

  • innodb_additional_mem_pool_size
    均一8メガバイトクラウドデータベースのMySQLに設定いくつかのInnoDBを格納するためのデータ構造の主要部を。アプリケーションメモリがBUFFER_POOLに通常あるときにも、あなたは追加のメモリ内のオブジェクトの構成情報を格納するスペースを適用する必要があります。メインテーブルのサイズと数に関係は、テーブルの数が多いほど、より多くのスペースを必要としていました。

  • key_buffer_sizeは
    これは、キャッシュ領域MyISAMテーブルの重要な一部で、統一された16Mのすべてのインスタンスです。主記憶キーMyISAMテーブルの部分。key_bufferのキャッシュインデックスにキャッシュされるMyISAMテーブルのInnoDBテーブルとは異なり、データは、オペレーティングシステムのキャッシュメモリに格納されています。MySQLのクラウド・データベース・システムは、MyISAMのエンジンであるので、空間の一定量の一部を与えられる必要があります。

  • query_cache_size
    この部分はSQLを削減し、オーバーヘッドの解析SQLを実行するためのクエリ結果のキャッシュをやっている、クラウドデータベースのMySQLでのキャッシュの一部を閉鎖しました。主にそれは時にテーブルデータの変更が失敗した後、SQL文のハッシュ値に応じてキャッシュされているので、少しシナリオを読み、書くため。

プライベートメモリ

次のコマンドは、クエリセッションのプライベートメモリ割り当ての例を実行します。

show variables where variable_name in ('read_buffer_size','read_rnd_buffer_size','sort_buffer_size','join_buffer_size','binlog_cache_size','tmp_table_size');

(以下、試験例の構成)を次のようにクエリの結果は次のとおりです。

    1.  +----------------------+-----------+
    2.  | Variable_name        | Value     |
    3. +----------------------+-----------+
    4.  | binlog_cache_size    | 32768 | 5. | join_buffer_size | 262144 | 6. | read_buffer_size | 262144 | 7. | read_rnd_buffer_size | 524288 | 8. | sort_buffer_size | 524288 | 9. | tmp_table_size | 209715200 | 10. +----------------------+-----------+ 11. 6 rows in set (0.00 sec)

パラメータ:

    • read_buffer_size
      スレッドデータが順次複数の物理空間のリードを回避するために、第1のバッファをスキャンするスキャンされる場合、順次走査するためのキャッシュに格納されています。

    • read_rnd_buffer_sizeは、
      スレッドのデータが最初のより多くの物理的な読み取りを避けるために、バッファ領域をスキャンしているときにキャッシュランダムスキャン、ランダムスキャンを保存しました。

    • sort_buffer_size
      あなたはSQLがでとソートの中間結果を格納するためのグループで順番sort_buffer割り当てられている実行する必要があります。メモリはsort_buffer_sizeよりも大きければソート処理では、一時テーブルは、操作を完了するために、ディスクに作成されます。

    • join_buffer_size
      MySQLは唯一のアルゴリズムネストループへの参加をサポートし、処理ロジックは、駆動と非駆動行テーブルのルックアップテーブルは、あなたがjoin_bufferへの非駆動表にすることができ、参加している、あなたは同時保護メカニズムBUFFER_POOLアクセス権を持っている必要はありません。

    • binlog_cache_size
      binlogのログは、トランザクションがbinlog_cacheログイン中に第1号店をコミットすることはできません前に、トランザクションが持続するために、ディスク上のbinlogのブラシバックビンログファイルをコミットします後まで待って、スレッド領域をキャッシュするために使用されます。

    • tmp_table_size
      バッファ上記各セッションレベルとは異なる、このパラメータは、コンソール上で変更することができます。一時テーブルは、それがディスク上のMyISAM一時テーブルのセットに変換されます一時テーブルを作成するために、スレッドのサイズを超えた場合は、このパラメータは、ユーザーメモリの一時テーブルのサイズです。

おすすめ

転載: www.cnblogs.com/chenjw-note/p/10942990.html