

# Amazon RDS 上的 MariaDB 的缓存预热
<a name="MariaDB.Concepts.XtraDBCacheWarming"></a>

InnoDB 高速缓存预热可为您的 MariaDB 实例提供性能收益，方式是在数据库实例关闭时保存缓冲池的当前状态，然后在数据库实例启动时从保存的信息重新加载缓冲池。此方法将不再需要缓冲池使用常规数据库进行“预热”，而是预加载具有已知常见查询的页的缓冲池。有关缓存预热的更多信息，请参阅 MariaDB 文档中的[转储和还原缓冲池](http://mariadb.com/kb/en/mariadb/xtradbinnodb-buffer-pool/#dumping-and-restoring-the-buffer-pool)。

默认情况下，在 MariaDB 10.3 和更高版本的数据库实例上启用缓存预热。要启用该功能，请将数据库实例的参数组中的 `innodb_buffer_pool_dump_at_shutdown` 和 `innodb_buffer_pool_load_at_startup` 参数设置为 1。更改参数组中的这些参数值将影响使用该参数组的所有 MariaDB 数据库实例。要为特定 MariaDB 数据库实例启用缓存预热，您可能需要为这些数据库实例创建新的参数组。有关参数组的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

缓存预热主要为使用标准存储的数据库实例提高性能。如果您使用 PIOPS 存储，则通常看不到显著的性能收益。

**重要**  
如果您的 MariaDB 数据库实例未正常关闭 (例如，在故障转移期间)，则缓冲池状态将不会保存到磁盘。在此情况下，MariaDB 将在重新启动数据库实例时加载任何可用的缓冲池文件。这不会造成任何损害，但还原后的缓冲池可能不会反映缓冲池在重新启动前的最新状态。要确保您拥有启动时可用于预热 缓存的缓冲池的最新状态，建议您定期“按需”转储缓冲池。您可以按需转储或加载缓冲池。  
您可创建事件来定期自动转储缓冲池。例如，以下语句创建一个名为 `periodic_buffer_pool_dump` 的事件，该事件每小时转储一次缓冲池。  

```
1. CREATE EVENT periodic_buffer_pool_dump 
2.    ON SCHEDULE EVERY 1 HOUR 
3.    DO CALL mysql.rds_innodb_buffer_pool_dump_now();
```
有关更多信息，请参阅 MariaDB 文档中的[事件](http://mariadb.com/kb/en/mariadb/stored-programs-and-views-events/)。

## 按需转储和加载缓冲池
<a name="MariaDB.Concepts.XtraDBCacheWarming.OnDemand"></a>

您可以使用以下存储过程按需保存和加载 缓存：
+ 要将缓冲池的当前状态转储到磁盘，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_dump_now) 存储过程。
+ 要从磁盘加载缓冲池的已保存状态，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_now) 存储过程。
+ 要取消正在进行的加载操作，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_abort) 存储过程。