すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for MySQLインスタンスのメモリ容量の割り当てを確認するにはどうすればよいですか。

最終更新日:Oct 14, 2024

メモリ容量は、ApsaraDB RDS for MySQLインスタンスのパフォーマンスを測定するための重要な指標です。 RDSインスタンスで異常なSQLリクエストが検出され、RDSインスタンスの一部のデータベースを最適化する必要がある場合、RDSインスタンスのメモリ使用量が増加します。 極端なケースでは、メモリ不足 (OOM) エラーが原因でプライマリ /セカンダリの切り替えがトリガーされます。 RDSインスタンスのメモリは、共有メモリとセッション固有のプライベートメモリで構成されます。 このトピックでは、共有メモリとセッション固有のプライベートメモリについて説明します。

共有メモリ

次のステートメントを実行して、RDSインスタンスの共有メモリの割り当てを照会します。

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'
);
        

次のコードは、240 MBのメモリ容量を提供するRDSインスタンスの共有メモリの割り当ての例を示しています。

+---------------------------------+-----------------+
| Variable_name                   | Value           |
+---------------------------------+-----------------+
| innodb_additional_mem_pool_size | 2097152         |
| innodb_buffer_pool_size         | 67108864        |
| innodb_log_buffer_size          | 1048576         |
| key_buffer_size                 | 16777216        |
| query_cache_size                | 0               |
+---------------------------------+-----------------+
A total of five data records are returned in 342.74 milliseconds.
        

パラメーター:

  • innodb_buffer_pool

    InnoDBバッファプール。InnoDBがデータを格納する領域です。 InnoDBバッファプールは、メモリリソースを効率的に使用し、データの読み取りおよび変更操作を高速化します。 これにより、RDSインスタンスのパフォーマンスが包括的に向上します。 InnoDBバッファプールは、データページ、インデックスページ、アンドゥページ、挿入バッファ、適応ハッシュインデックス、ロック、およびデータ辞書に関する情報を格納します。 SQL文を実行してデータを読み書きする場合、操作は物理データファイルではなくInnoDBバッファプールで実行されます。 そして、生成されたデータは、チェックポイントなどの機構を用いて物理データファイルに書き込まれる。 InnoDBバッファプールは、RDSインスタンスのパフォーマンスを向上させ、SQL文の実行を高速化するのに役立ちます。 ただし、InnoDBバッファプールを使用すると、RDSインスタンスが障害から回復するまでに時間がかかります。

  • innodb_log_buffer

    redoログを保存するために使用されるInnoDBログバッファ。 InnoDBストレージエンジンは、redoログをInnoDBログバッファに書き込み、特定の頻度でredoログをフラッシュしてredoログファイルにします。 InnoDBログバッファのサイズは、RDSインスタンスごとに1 MBに設定されています。 InnoDBログバッファのサイズを大きな値に設定する必要はありません。 ほとんどの場合、InnoDBログバッファに格納された特定のデータは、高頻度でログファイルを再実行するためにフラッシュされます。 マスタースレッドは1秒ごとにフラッシュされ、トランザクションはコミット時にフラッシュされ、InnoDBログバッファの使用可能なサイズが合計サイズの半分未満の場合、格納されたデータはフラッシュされます。

  • innodb_additional_mem_pool

    特定のInnoDBデータ構造を格納するために使用される追加のメモリバッファプール。 RDSインスタンスでは、このパラメーターを2 MBに設定する必要があります。 ほとんどの場合、InnoDBデータ構造を格納するために2 MBのメモリを申請し、データ構造に関する情報を格納するために追加のメモリを申請します。 追加のメモリバッファプールのサイズは、テーブルの数によって異なります。 RDSインスタンスに多数のテーブルが作成されている場合は、このパラメーターを大きな値に設定する必要があります。

  • key_buffer

    重要な領域。MyISAMテーブルのキャッシュに使用されます。 すべてのRDSインスタンスに対して、このパラメーターを16 MBに設定する必要があります。 バッファは、MyISAMテーブルのキーを格納する。 MyISAMテーブルはInnoDBテーブルとは異なります。 MyISAMテーブルのインデックスキャッシュはkey_bufferに格納され、データキャッシュはオペレーティングシステムのメモリに格納されます。 RDSインスタンスがMyISAMエンジンを使用する場合、MyISAMテーブル用に特定のメモリ量を予約する必要があります。

  • query_cache

    SQL文の解析と実行のオーバーヘッドを減らすために、クエリ結果を格納するために使用されるクエリキャッシュ。 このパラメーターはRDSインスタンスでは無効になっています。 このパラメータは、多数の読み取り要求を処理する必要があるが少数の書き込み要求を処理する必要があるシナリオに適しています。 クエリキャッシュは、SQL文のハッシュ値に基づいてクエリ結果を格納します。 RDSインスタンスのテーブルを変更すると、テーブルのストアドクエリ結果がすべて無効になります。

セッション固有のプライベートメモリ

共有メモリは、RDSインスタンスが作成され、RDSインスタンスへのすべての接続で共有されるときに割り当てられるメモリです。 RDSインスタンスでOOMエラーが発生した場合、OOMエラーは各接続のプライベートメモリが原因です。

次のステートメントを実行して、セッション固有のプライベートメモリ割り当てを照会します。

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'
);
            

次の情報は、テストRDSインスタンスのクエリ結果を示しています。

+-------------------------+-----------------+
| Variable_name           | Value           |
+-------------------------+-----------------+
| binlog_cache_size       | 262144          |
| join_buffer_size        | 262144          |
| read_buffer_size        | 262144          |
| read_rnd_buffer_size    | 262144          |
| sort_buffer_size        | 262144          |
| tmp_table_size          | 262144          |
+-------------------------+-----------------+
A total of six data records are returned in 356.54 milliseconds.
            

パラメーター:

  • read_buffer&read_rnd_buffer

    バッファは、シーケンシャルスキャンとランダムスキャンのキャッシュを別々に格納するために使用されます。 これらのパラメーターをRDSインスタンスの256 KBに設定する必要があります。 スレッドがシーケンシャルまたはランダムな方法でデータをスキャンする場合、物理的な読み取りを減らすためにバッファが優先的にスキャンされます。

  • sort_buffer

    ORDER BYおよびGROUP BY句を使用してデータをソートするときに割り当てられる、中間ソート結果を格納するために使用されるメモリ。 このパラメーターをRDSインスタンスの256 KBに設定する必要があります。 ソートプロセス中に、格納されたデータの量がsort_buffer_sizeパラメータの値よりも大きい場合、ソートが完了するための一時テーブルがディスク上に生成されます。 Linuxオペレーティングシステムでは、このパラメーターの値が2 MBを超える場合、メモリはmalloc() の代わりにmmap() を使用して割り当てられます。 これは効率を低下させる。

  • join_buffer

    結合操作中に使用されるメモリ。 ApsaraDB RDS for MySQLは、ネストループ結合アルゴリズムのみをサポートしています。 駆動テーブルの行と非駆動テーブルの間で結合操作を実行すると、非駆動テーブルを結合バッファに格納できます。 この場合、同時実行保護メカニズムを持つバッファプールにアクセスする必要はありません。 RDSインスタンスのこのパラメーターを256 KBに設定します。

  • binlog_cache

    バイナリログキャッシュ。スレッドのバイナリログを格納するために使用されます。 このパラメーターをRDSインスタンスの256 KBに設定する必要があります。 トランザクションがコミットされる前に、システムはトランザクションのログをバイナリログキャッシュに格納します。 トランザクションがコミットされた後、システムはログをディスク上のバイナリログファイルにフラッシュバックして、ログを永続的に保存します。

  • tmp_table

    メモリ一时テーブルのサイズ。 このパラメーターはコンソールで変更できます。 ただし、上記のパラメーターはコンソールで変更できません。 必要なスレッドを使用して作成されたメモリ一時テーブルのサイズがこのパラメーターの値を超えると、一時テーブルはディスク上のMyISAM一時テーブルに変換されます。 トランザクションの実行時に次のようなエラーが発生した場合は、tmp_tableパラメーターの値を増やすことができます。

    [Err] 1114 - The table '/home/mysql/data3081/tmp/#sql_6197_2' is full