Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Alocação de memória do MySQL

Última atualização: Jun 26, 2026

A memória da instância RDS divide-se em duas categorias: memória compartilhada e memória privada específica da sessão. A memória compartilhada é alocada uma única vez na inicialização da instância e usada por todas as conexões. Já a memória privada específica da sessão é alocada sob demanda para cada conexão — toda consulta ativa que exija ordenação, junção ou leitura de dados reserva imediatamente o tamanho total do buffer. Em cenários de alta concorrência, essa alocação por conexão é a principal causa de erros de falta de memória (OOM) e failover entre primário e secundário.

Cálculo da memória

A fórmula abaixo demonstra como estimar o uso total de memória:

Total memory ≈ Shared memory
             + max_connections × per-session memory per connection

Componente

Parâmetros

Memória compartilhada

innodb_buffer_pool_size + innodb_log_buffer_size + innodb_additional_mem_pool_size + key_buffer_size + query_cache_size

Memória por sessão

sort_buffer_size + read_buffer_size + read_rnd_buffer_size + join_buffer_size + binlog_cache_size + tmp_table_size

Memória compartilhada

Execute a consulta a seguir para verificar a alocação de memória compartilhada:

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

O exemplo abaixo mostra a saída de uma instância de 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               |
+---------------------------------+-----------------+

Parâmetros

Parâmetro

Padrão no RDS

Descrição

innodb_buffer_pool_size

64 MB (instância de 240 MB)

Buffer pool do InnoDB. Armazena páginas de dados, páginas de índice, páginas de undo, buffers de inserção, índices hash adaptativos, bloqueios e dicionários de dados. Todas as operações de leitura e escrita SQL atuam sobre o buffer pool em vez dos arquivos físicos de dados — a gravação em disco ocorre posteriormente, por meio de checkpoints. Um buffer pool maior melhora o desempenho de leitura e escrita, mas aumenta o tempo de recuperação após falhas.

innodb_log_buffer_size

1 MB

Buffer de log do InnoDB. Retém os redo logs antes da liberação para o disco. A liberação é acionada a cada segundo pela thread mestre, em cada commit de transação e sempre que o espaço disponível no buffer cai abaixo da metade do tamanho total. O valor de 1 MB atende à maioria das cargas de trabalho.

innodb_additional_mem_pool_size

2 MB

Reserva espaço para estruturas internas de dados do InnoDB. Aumente esse valor se sua instância possuir um grande número de tabelas.

key_buffer_size

16 MB

Faz cache de índices de tabelas MyISAM. Para tabelas MyISAM, os caches de índice ficam em key_buffer, enquanto os caches de dados residem na memória do sistema operacional. Mantenha o valor de 16 MB para todas as instâncias RDS.

query_cache_size

0 (desativado)

Armazena resultados de consultas com base no hash da instrução SQL. Este recurso vem desativado nas instâncias RDS. Como o cache é invalidado sempre que uma tabela sofre modificação, ele não é adequado para cargas de trabalho com muitas escritas.

Memória privada específica da sessão

Diferentemente da memória compartilhada, os buffers de sessão não são pré-alocados na inicialização. Cada parâmetro tem seu valor integralmente alocado no momento em que uma consulta o solicita. Quando há muitas conexões simultâneas, a soma dessas alocações pode ultrapassar a memória disponível e provocar erros OOM.

Para inspecionar a alocação de memória da sessão, execute esta consulta:

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

Saída de exemplo:

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

Parâmetros

Parâmetro

Padrão no RDS

Modificável no console

Descrição

read_buffer_size

256 KB

Não

Buffer para varredura sequencial. A leitura ocorre antes do acesso físico ao disco para reduzir I/O.

read_rnd_buffer_size

256 KB

Não

Buffer para varredura aleatória. Utilizado quando as linhas são lidas em ordem classificada após uma varredura de índice.

sort_buffer_size

256 KB

Não

Buffer de ordenação para operações ORDER BY e GROUP BY. Se os dados a serem ordenados excederem esse tamanho, o MySQL grava uma tabela temporária em disco. No Linux, defina esse valor acima de 2 MB altera o mecanismo de alocação de memória de malloc() para mmap(), o que reduz a eficiência.

join_buffer_size

256 KB

Não

Buffer para operações de junção. O ApsaraDB RDS for MySQL suporta apenas o algoritmo nested loop join. A tabela não condutora é armazenada neste buffer para evitar contenção no buffer pool.

binlog_cache_size

256 KB

Não

Cache do binary log. Retém logs de transações antes do commit e libera-os para o arquivo de binary log em disco após o commit.

tmp_table_size

256 KB

Sim

Tamanho máximo de uma tabela temporária em memória. Caso uma consulta crie uma tabela temporária que ultrapasse esse limite, o MySQL a converte em uma tabela MyISAM em disco. Ao encontrar o erro abaixo, aumente este valor: [Err] 1114 - The table '/home/mysql/data3081/tmp/#sql_6197_2' is full

Nota: Apenas o parâmetro tmp_table_size pode ser modificado no console RDS. Os demais parâmetros de buffer de sessão não são alteráveis por essa interface.