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

ApsaraDB RDS:MySQL メモリ割り当て

最終更新日:Mar 29, 2026

RDS インスタンスのメモリは、共有メモリセッション固有のプライベートメモリ の 2 種類に分類されます。共有メモリはインスタンス起動時に一度だけ割り当てられ、すべての接続で共有されます。一方、セッション固有のプライベートメモリは、接続ごとに必要に応じて割り当てられます。ソート、結合、またはデータ読み取りを必要とする各アクティブなクエリは、そのバッファーサイズ全体を即座に確保します。高い同時実行性の状況下では、この接続単位のメモリ割り当てが、メモリ不足 (OOM) エラーおよびプライマリ/セカンダリ スイッチオーバーの主な原因となります。

メモリ計算方法

次の数式は、合計メモリ使用量の推定方法を示しています。

Total memory ≈ Shared memory
             + max_connections × per-session memory per connection
コンポーネントパラメーター
共有メモリinnodb_buffer_pool_size + innodb_log_buffer_size + innodb_additional_mem_pool_size + key_buffer_size + query_cache_size
セッション単位のメモリsort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + binlog_cache_size + tmp_table_size

共有メモリ

共有メモリの割り当てを確認するには、次のクエリを実行します。

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 インスタンスからのものです。

+---------------------------------+-----------------+
| 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               |
+---------------------------------+-----------------+

パラメーター

パラメーターRDS のデフォルト説明
innodb_buffer_pool_size64 MB (240 MB インスタンス)InnoDB バッファープールです。データページ、インデックスページ、アンドゥページ、挿入バッファー、適応型ハッシュインデックス、ロック、およびデータディクショナリを格納します。すべての SQL 読み取りおよび書き込み操作は物理データファイルではなくバッファープール上で実行され、データは後でチェックポイントを通じてディスクに書き込まれます。バッファープールを大きくすると読み取り/書き込みパフォーマンスが向上しますが、障害復旧時間が長くなります。
innodb_log_buffer_size1 MBInnoDB ログバッファーです。ディスクへのフラッシュ前にリドゥログを格納します。マスタースレッドによる 1 秒ごとのトリガー、各トランザクションコミット時、および利用可能なバッファー容量が総容量の半分を下回った際にフラッシュが実行されます。ほとんどのワークロードでは 1 MB で十分です。
innodb_additional_mem_pool_size2 MBInnoDB 内部データ構造を格納します。インスタンスに多数のテーブルがある場合は、この値を増やしてください。
key_buffer_size16 MBMyISAM テーブルのインデックスをキャッシュします。MyISAM テーブルの場合、インデックスキャッシュは key_buffer に格納され、データキャッシュはオペレーティングシステムのメモリに格納されます。すべての RDS インスタンスで 16 MB に設定されています。
query_cache_size0 (無効)SQL ステートメントのハッシュに基づいてクエリ結果をキャッシュします。RDS インスタンスでは無効になっています。テーブルが変更されるとキャッシュが無効になるため、書き込み負荷の高いワークロードには不向きです。

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

共有メモリとは異なり、セッションバッファーは起動時に事前に割り当てられません。各パラメーターの値は、クエリが必要とした瞬間にフルサイズで割り当てられます。多くの同時接続がある場合、累積的なメモリ割り当てが使用可能なメモリを超えて 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'
);

出力例:

+-------------------------+-----------------+
| 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          |
+-------------------------+-----------------+

パラメーター

パラメーターRDSにおけるデフォルトコンソールで変更可能説明
read_buffer_size256 KBいいえシーケンシャルスキャン用バッファーです。物理読み込み前にスキャンして I/O を削減します。
read_rnd_buffer_size256 KBいいえランダムスキャン用バッファーです。インデックススキャン後にソートされた順序で行を読み取る際に使用されます。
sort_buffer_size256 KBいいえORDER BY および GROUP BY 操作のためのソートバッファーです。ソート対象データがこのサイズを超える場合、MySQL は一時テーブルをディスクに書き込みます。Linux では、この値を 2 MB を超えて設定すると、メモリ割り当てが malloc() から mmap() に切り替わり、効率が低下します。
join_buffer_size256 KBいいえ結合操作用バッファーです。ApsaraDB RDS for MySQL はネステッドループ結合アルゴリズムのみをサポートしています。非ドライビングテーブルはこのバッファーに格納され、バッファープールの競合を回避します。
binlog_cache_size256 KBいいえバイナリログキャッシュです。コミット前にトランザクションログを格納し、コミット後にディスク上のバイナリログファイルにフラッシュします。
tmp_table_size256 KBはいインメモリーの一時テーブルの最大サイズです。クエリによって作成される一時テーブルがこの制限を超える場合、MySQL はそれをディスク上の MyISAM テーブルに変換します。次のエラーが表示された場合は、この値を増やしてください。[Err] 1114 - The table '/home/mysql/data3081/tmp/#sql_6197_2' is full
注: RDS コンソールで変更できるのは tmp_table_size のみです。他のセッションバッファーパラメーターはコンソールから変更できません。