Ao reiniciar um nó primário do PolarDB for MySQL, o buffer pool do InnoDB inicia vazio. O banco de dados recarrega páginas do armazenamento sob demanda, degradando o desempenho até o repovoamento do pool. Esse processo pode levar minutos em cenários com alta carga de escrita ou grandes volumes de transações. O Warm Buffer Pool elimina esse período de inicialização a frio ao armazenar o buffer pool na memória compartilhada do Linux, independentemente do processo de banco de dados. O buffer pool persiste entre reinicializações e fica disponível imediatamente quando o nó volta a operar.
Pré-requisitos
Antes de ativar o Warm Buffer Pool, certifique-se de que:
O cluster PolarDB executa o MySQL 8.0.2 com versão de revisão 8.0.2.1.0 ou posterior. Para verificar a versão, consulte a seção "Query the engine version" em Versões do mecanismo.
O recurso de compactação de tabelas está desativado.
Como funciona
O Warm Buffer Pool armazena o buffer pool do InnoDB na memória compartilhada do Linux, em vez da memória do processo. Como o buffer pool é independente do processo do PolarDB, ele sobrevive a reinicializações.

Comportamentos principais:
Persistência entre reinicializações: A memória compartilhada armazena os dados de controle do buffer pool, os metadados das páginas e os dados das páginas. Ao iniciar, o PolarDB se conecta ao buffer pool existente na memória compartilhada, em vez de alocar um novo.
Recuperação de falhas: Após uma falha no nó, o PolarDB detecta e corrige inconsistências no buffer pool da memória compartilhada antes de se conectar a ele.
Desligamento limpo mais rápido: Em uma reinicialização manual, o PolarDB salva o estado principal da transação antes de desligar. Isso ignora tanto a reversão durante o desligamento quanto a restauração na inicialização, reduzindo significativamente o tempo de reinicialização.
Operações de O&M: A ferramenta
mysqlshmpermite consultar configurações e liberar buffer pools da memória compartilhada pela linha de comando.
Benefícios
Reinicializações mais rápidas
O Warm Buffer Pool reduz o tempo de reinicialização do nó primário de minutos para segundos. A melhoria é mais evidente quando o nó primário possui um buffer pool grande e lida com cargas intensas de escrita ou transações volumosas.
Desempenho consistente após reinicialização
Como o buffer pool permanece na memória compartilhada, as páginas acessadas recentemente continuam disponíveis após a reinicialização. Não há período de aquecimento nem queda de desempenho.
A figura a seguir mostra o throughput durante uma reinicialização com um buffer pool de 50 GB, utilizando cargas de trabalho Sysbench OLTP somente leitura.

Sem o Warm Buffer Pool (linha laranja): o throughput cai para 2% do normal logo após a reinicialização e leva cerca de 200 segundos para se recuperar.
Com o Warm Buffer Pool (linha azul): o throughput não é afetado durante a reinicialização.
Ative o Warm Buffer Pool
Para uma reinicialização manual
Defina
innodb_buf_shm_keycom um valor diferente de zero emmy.cnfe inicie o cluster PolarDB.-
Verifique se o recurso está ativo:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';O valor deve ser
Allocate from shared memory. -
Defina
innodb_fast_shutdowncomo3:SET GLOBAL innodb_fast_shutdown = 3; Reinicie o nó primário.
-
Após a reinicialização, verifique o status novamente:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';O valor deve ser
Attach to clean shutdown shared memory, indicando que o nó se conectou a um buffer pool desligado corretamente.
Para uma reinicialização por exceção
Defina
innodb_buf_shm_keycom um valor diferente de zero emmy.cnfe inicie o cluster PolarDB.-
Verifique se o recurso está ativo:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';O valor deve ser
Allocate from shared memory. Encerre o processo mysqld para simular uma falha no nó.
Aguarde o nó reiniciar.
-
Após a reinicialização, verifique o status novamente:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';O valor deve ser
Attach to abnormal shutdown shared memory, indicando que o PolarDB detectou e recuperou o buffer pool da memória compartilhada de um estado de falha.
Referência
Parâmetros
|
Parâmetro |
Tipo |
Nível |
Descrição |
|
|
Inteiro |
Global |
Identificador exclusivo para o buffer pool da memória compartilhada. Defina um valor diferente de zero para ativar o Warm Buffer Pool. Valores válidos: 0 a 2^64-1. Padrão: |
|
|
Inteiro |
Global |
Deslocamento base do endereço de memória virtual para o buffer pool compartilhado. Valores válidos: |
|
|
Inteiro |
Global |
Número de páginas reservadas para descritores de páginas compactadas. Valores válidos: 8–128. Padrão: |
|
|
Inteiro |
Global |
Defina como tratar páginas compactadas na reinicialização. Valores válidos: |
|
|
Inteiro |
Global |
Quantidade de threads para varredura paralela do buffer pool. Valores válidos: 0–512. Padrão: |
|
|
Booliano |
Global |
Indica se devem ser usadas páginas grandes ao alocar memória compartilhada. Valores válidos: |
|
|
Inteiro |
Global |
Modo de desligamento do InnoDB. Valores válidos: |
Valores de status
Consulte o estado atual do Warm Buffer Pool:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';
|
Valor |
Significado |
|
|
O Warm Buffer Pool está desativado. O nó utiliza memória privada padrão do processo. |
|
|
O Warm Buffer Pool está ativo. O buffer pool foi alocado na memória compartilhada. |
|
|
O nó se conectou a um buffer pool desligado corretamente. A aceleração total de reinicialização se aplica. |
|
|
O nó se conectou a um buffer pool que sobreviveu a uma falha. O PolarDB corrigiu todas as inconsistências. |
mysqlshm
A ferramenta mysqlshm gerencia o buffer pool da memória compartilhada via linha de comando. Utilize-a para inspecionar ou liberar um buffer pool sem precisar reiniciar o banco de dados.
Usage: mysqlshm -k key [options]
-h, Display this help and exit.
-k, The shared memory key [REQUIRED]
-i, Prinf the basic info of shared memory
-f, Free the shared memory