

# 在 RDS for Oracle 实例存储中存储临时数据
<a name="CHAP_Oracle.advanced-features.instance-store"></a>

在支持的 RDS for Oracle 数据库实例上，为临时表空间和数据库智能闪存缓存（闪存缓存）使用实例存储。

**Topics**
+ [RDS for Oracle 实例存储的概述](#CHAP_Oracle.advanced-features.instance-store.overview)
+ [开启 RDS for Oracle 实例存储](#CHAP_Oracle.advanced-features.instance-store.Enable)
+ [配置 RDS for Oracle 实例存储](CHAP_Oracle.advanced-features.instance-store.configuring.md)
+ [在 Oracle 只读副本上使用实例存储](CHAP_Oracle.advanced-features.instance-store.replicas.md)
+ [在实例存储和 Amazon EBS 上配置临时表空间组](CHAP_Oracle.advanced-features.instance-store.temp-ebs.md)
+ [删除 RDS for Oracle 实例存储](#CHAP_Oracle.advanced-features.instance-store.Disable)

## RDS for Oracle 实例存储的概述
<a name="CHAP_Oracle.advanced-features.instance-store.overview"></a>

*实例存储*为 RDS for Oracle 数据库实例提供临时性块级存储。您可以使用实例存储来临时存储经常变化的信息。

实例存储基于物理附加到主机的非易失性存储规范（NVMe）设备。此存储针对低延迟、随机 I/O 性能和连续读取吞吐量进行了优化。

实例存储的大小因数据库实例类型而异。有关实例存储的更多信息，请参阅《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》**中的 [Amazon EC2 实例存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)。

**Topics**
+ [RDS for Oracle 实例存储中的数据类型](#CHAP_Oracle.advanced-features.instance-store.overview.uses)
+ [RDS for Oracle 实例存储的优点](#CHAP_Oracle.advanced-features.instance-store.overview.benefits)
+ [RDS for Oracle 实例存储支持的实例类](#CHAP_Oracle.advanced-features.instance-store.overview.instance-classes)
+ [RDS for Oracle 实例存储支持的引擎版本](#CHAP_Oracle.advanced-features.instance-store.overview.db-versions)
+ [RDS for Oracle 实例存储支持的 AWS 区域](#CHAP_Oracle.advanced-features.instance-store.overview.regions)
+ [RDS for Oracle 实例存储的成本](#CHAP_Oracle.advanced-features.instance-store.overview.cost)

### RDS for Oracle 实例存储中的数据类型
<a name="CHAP_Oracle.advanced-features.instance-store.overview.uses"></a>

您可以将以下类型的 RDS for Oracle 临时数据放入实例存储中：

临时表空间  
Oracle 数据库使用临时表空间来存储不适合放入内存中的中间查询结果。较大的查询会生成大量的中间数据，这些数据需要进行临时缓存，但不需要持久保留。尤其是，临时表空间可用于排序、哈希聚合和联接。如果您的 RDS for Oracle 数据库实例使用企业版或标准版 2，则可以将临时表空间放在实例存储中。

闪存缓存  
闪存缓存可提高传统路径中单块随机读取的性能。最佳做法是调整缓存的大小以容纳大部分活动的数据集。如果 RDS for Oracle 数据库实例使用企业版，则可以将闪存缓存放在实例存储中。

原定设置情况下，将实例存储配置用于临时表空间而非闪存缓存。您无法将 Oracle 数据文件和数据库日志文件放在实例存储中。

### RDS for Oracle 实例存储的优点
<a name="CHAP_Oracle.advanced-features.instance-store.overview.benefits"></a>

您可以考虑使用实例存储来存储可以承受丢失的临时文件和缓存。如果您想提高数据库性能，或者，如果增加的工作负载导致 Amazon EBS 存储出现性能问题，请考虑扩展到支持实例存储的实例类。

通过将临时表空间和闪存缓存放在实例存储上，您可以获得以下优势：
+ 降低读取延迟
+ 提高吞吐量
+ 减少了 Amazon EBS 卷上的负载
+ 由于减少了 Amazon EBS 负载，因此降低了存储和快照成本
+ 减少了预调配高 IOPS 的需要，可能会降低您的总体成本

 通过将临时表空间放在实例存储上，您可以立即提高使用临时空间的查询的性能。当您将闪存缓存放在实例存储上时，缓存块读取的延迟通常比 Amazon EBS 读取的延迟要低得多。闪存缓存需要“预热”，然后才能提供性能优势。缓存会自行预热，因为当块从数据库缓冲区缓存中过期时，数据库会将块写入闪存缓存。

**注意**  
在某些情况下，闪存缓存会因为缓存管理而导致性能开销。在生产环境中启用闪存缓存之前，我们建议您分析工作负载并在测试环境中测试缓存。

### RDS for Oracle 实例存储支持的实例类
<a name="CHAP_Oracle.advanced-features.instance-store.overview.instance-classes"></a>

Amazon RDS 对于以下数据库实例类支持实例存储：
+ db.m5d
+ db.m6id
+ db.r5d
+ db.r6id
+ db.x2idn
+ db.x2iedn

RDS for Oracle 仅对于 BYOL 许可模式支持上述数据库实例类。有关更多信息，请参阅[支持的 RDS for Oracle 数据库实例类](Oracle.Concepts.InstanceClasses.md#Oracle.Concepts.InstanceClasses.Supported)和[EE 和 SE2 自带许可（BYOL）](Oracle.Concepts.Licensing.md#Oracle.Concepts.Licensing.BYOL)。

要查看受支持的数据库实例类型的总实例存储量，请在 AWS CLI 中运行以下命令。

**Example**  

```
aws ec2 describe-instance-types \
  --filters "Name=instance-type,Values=*5d.*large*,*6id.*large*" \
  --query "InstanceTypes[?contains(InstanceType,'m5d')||contains(InstanceType,'r5d')||contains(InstanceType,'m6id')||contains(InstanceType,'r6id')][InstanceType, InstanceStorageInfo.TotalSizeInGB]" \
  --output table
```

前面的命令返回实例存储的原始设备大小。RDS for Oracle 使用此空间的一小部分进行配置。实例存储中可用于临时表空间或闪存缓存的空间稍小。

### RDS for Oracle 实例存储支持的引擎版本
<a name="CHAP_Oracle.advanced-features.instance-store.overview.db-versions"></a>

以下 RDS for Oracle 数据库引擎版本支持实例存储：
+ 21.0.0.0.ru-2022-01.rur-2022-01.r1 或更高的 Oracle Database 21c 版本
+ 19.0.0.0.ru-2021-10.rur-2021-10.r1 或更高的 Oracle Database 19c 版本

### RDS for Oracle 实例存储支持的 AWS 区域
<a name="CHAP_Oracle.advanced-features.instance-store.overview.regions"></a>

在支持其中一种或多种实例类型的所有 AWS 区域中均可使用实例存储。有关 db.m5d 和 db.r5d 实例类的更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。有关 Amazon RDS for Oracle 支持的实例类的更多信息，请参阅 [RDS for Oracle 数据库实例类](Oracle.Concepts.InstanceClasses.md)。

### RDS for Oracle 实例存储的成本
<a name="CHAP_Oracle.advanced-features.instance-store.overview.cost"></a>

实例存储的成本计入已开启实例存储的实例的成本中。对 RDS for Oracle 数据库实例启用实例存储不会产生额外费用。有关已开启实例存储的实例的更多信息，请参阅 [RDS for Oracle 实例存储支持的实例类](#CHAP_Oracle.advanced-features.instance-store.overview.instance-classes)。

## 开启 RDS for Oracle 实例存储
<a name="CHAP_Oracle.advanced-features.instance-store.Enable"></a>

要为 RDS for Oracle 临时数据开启实例存储，请执行下列操作之一：
+ 使用支持的实例类创建 RDS for Oracle 数据库实例。有关更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。
+ 修改现有 RDS for Oracle 数据库实例以使用支持的实例类。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

# 配置 RDS for Oracle 实例存储
<a name="CHAP_Oracle.advanced-features.instance-store.configuring"></a>

原定设置情况下，100% 的实例存储空间分配给临时表空间。要将实例存储配置为向闪存缓存和临时表空间分配空间，请在实例的参数组中设置以下参数：

**db\$1flash\$1cache\$1size=\$1DBInstanceStore\$1\$10,2,4,6,8,10\$1/10\$1**  
此参数指定为闪存缓存分配的存储空间量。此参数仅对 Oracle Database 企业版有效。默认值为 `{DBInstanceStore*0/10}`。如果您为 `db_flash_cache_size` 设置非零值，则 RDS for Oracle 实例将在您重新启动实例后启用闪存缓存。

**rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$1\$10,2,4,6,8,10\$1/10\$1**  
此参数指定为临时表空间分配的存储空间量。默认值为 `{DBInstanceStore*10/10}`。对于 Oracle Database 企业版，此参数是可修改的，而对于标准版 2 为只读的。如果您为 `rds.instance_store_temp_size` 设置非零值，Amazon RDS 将在实例存储中为临时表空间分配空间。  
您可以为不使用实例存储的数据库实例设置 `db_flash_cache_size` 和 `rds.instance_store_temp_size` 参数。在这种情况下，这两个设置的计算结果均为 `0`，这会关闭该功能。在这种情况下，您可以为不同的实例大小和不使用实例存储的实例使用相同的参数组。如果您修改这些参数，则确保重启关联的实例，以使更改生效。  
如果您为临时表空间分配空间，Amazon RDS 不会自动创建临时表空间。要了解如何在实例存储上创建临时表空间，请参阅 [在实例存储上创建临时表空间](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md#Appendix.Oracle.CommonDBATasks.creating-tts-instance-store)。

上述参数的组合值不得超过 10/10 或 100%。下表说明了有效和无效的参数设置。


| db\$1flash\$1cache\$1size 设置 | rds.instance\$1store\$1temp\$1size 设置 | 说明 | 
| --- | --- | --- | 
|  db\$1flash\$1cache\$1size=\$1DBInstanceStore\$10/10\$1  |  rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$110/10\$1  |  这是适用于所有 Oracle Database 版本的有效配置。Amazon RDS 将 100% 的实例存储空间分配给临时表空间。这是默认模式。  | 
|  db\$1flash\$1cache\$1size=\$1DBInstanceStore\$110/10\$1  |  rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$10/10\$1  |  这是仅适用于 Oracle Database 企业版的有效配置。Amazon RDS 将 100% 的实例存储空间分配给闪存缓存。  | 
|  db\$1flash\$1cache\$1size=\$1DBInstanceStore\$12/10\$1  |  rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$18/10\$1  |  这是仅适用于 Oracle Database 企业版的有效配置。Amazon RDS 将 20% 的实例存储空间分配给闪存缓存，而将 80% 的实例存储空间分配给临时表空间。  | 
|  db\$1flash\$1cache\$1size=\$1DBInstanceStore\$16/10\$1  |  rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$14/10\$1  |  这是仅适用于 Oracle Database 企业版的有效配置。Amazon RDS 将 60% 的实例存储空间分配给闪存缓存，而将 40% 的实例存储空间分配给临时表空间。  | 
|  db\$1flash\$1cache\$1size=\$1DBInstanceStore\$12/10\$1  |  rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$14/10\$1  | 这是仅适用于 Oracle Database 企业版的有效配置。Amazon RDS 将 20% 的实例存储空间分配给闪存缓存，而将 40% 的实例存储空间分配给临时表空间。 | 
|  db\$1flash\$1cache\$1size=\$1DBInstanceStore\$18/10\$1  |  rds.instance\$1store\$1temp\$1size=\$1DBInstanceStore\$18/10\$1  |  这是无效的配置，因为实例存储空间的总百分比超过 100%。在这种情况下，Amazon RDS 会使此尝试失败。  | 

## 更改数据库实例类型时的注意事项
<a name="CHAP_Oracle.advanced-features.instance-store.configuring.modifying"></a>

如果您更改数据库实例类型，则这可能会影响实例存储上闪存缓存或临时表空间的配置。考虑以下修改及其影响：

**您可以纵向扩展或缩减支持实例存储的数据库实例。**  
以下各值根据实例存储的新大小成比例增加或减少：  
+ 闪存缓存的新大小。
+ 分配给驻留在实例存储中的临时表空间的空间。
例如，db.m5d.4xlarge 实例上的设置 `db_flash_cache_size={DBInstanceStore*6/10}` 提供了大约 340GB 的闪存缓存空间。如果您将实例类型纵向扩展到 db.m5d.8xlarge，则闪存缓存空间将增加到大约 680GB。

**您将不使用实例存储的数据库实例修改为确实使用实例存储的实例。**  
如果将 `db_flash_cache_size` 设置为大于 `0` 的值，则配置闪存缓存。如果将 `rds.instance_store_temp_size` 设置为大于 `0` 的值，则会分配实例存储空间供临时表空间使用。RDS for Oracle 不会自动将临时文件移动到实例存储。有关使用分配的空间的信息，请参阅 [在实例存储上创建临时表空间](Appendix.Oracle.CommonDBATasks.TablespacesAndDatafiles.md#Appendix.Oracle.CommonDBATasks.creating-tts-instance-store) 或 [在只读副本上向实例存储中添加临时文件](Appendix.Oracle.CommonDBATasks.using-tempfiles.md#Appendix.Oracle.CommonDBATasks.adding-tempfile-replica)。

**您将使用实例存储的数据库实例修改为不使用实例存储的实例。**  
在这种情况下，RDS for Oracle 会删除闪存缓存。RDS 在 Amazon EBS 卷上重新创建当前位于实例存储中的临时文件。新临时文件的最大大小是 `rds.instance_store_temp_size` 参数以前的大小。

# 在 Oracle 只读副本上使用实例存储
<a name="CHAP_Oracle.advanced-features.instance-store.replicas"></a>

只读副本在实例存储上支持闪存缓存和临时表空间。虽然闪存缓存的工作方式与在主数据库实例上的工作方式相同，但请注意对于临时表空间的以下区别：
+ 您无法在只读副本上创建临时表空间。如果您在主实例上创建新的临时表空间，则 RDS for Oracle 会在没有临时文件的情况下复制表空间信息。要添加新的临时文件，请使用下列任一方法：
  + 适用 Amazon RDS 过程 `rdsadmin.rdsadmin_util.add_inst_store_tempfile`。RDS for Oracle 在只读副本上的实例存储中创建一个临时文件，并将其添加到指定的临时表空间中。
  + 运行 `ALTER TABLESPACE … ADD TEMPFILE` 命令。RDS for Oracle 将临时文件放在 Amazon EBS 存储上。
**注意**  
主数据库实例和只读副本上的临时文件大小和存储类型可能不同。
+ 您只能在主数据库实例上管理原定设置临时表空间设置。RDS for Oracle 会将该设置复制到所有只读副本。
+ 您只能在主数据库实例上配置临时表空间组。RDS for Oracle 会将该设置复制到所有只读副本。

# 在实例存储和 Amazon EBS 上配置临时表空间组
<a name="CHAP_Oracle.advanced-features.instance-store.temp-ebs"></a>

您可以将临时表空间组配置为包括实例存储和 Amazon EBS 上的临时表空间。当您想要的临时存储空间超过 `rds.instance_store_temp_size` 的最大设置所允许的空间时，此方法很有用。

当您在实例存储和 Amazon EBS 上配置临时表空间组时，这两个表空间的性能特征显著不同。Oracle 数据库根据内部算法，选择表空间来处理查询。因此，类似查询的性能可能会有所不同。

通常，您在实例存储中创建临时表空间，如下所示：

1. 在实例存储中创建临时表空间。

1. 将新的表空间设置为数据库原定设置临时表空间。

如果实例存储中的表空间大小不足，则可以按如下方式创建额外的临时存储：

1. 将实例存储中的临时表空间分配给临时表空间组。

1. 如果临时表空间不存在，请在 Amazon EBS 中创建一个新的临时表空间。

1. 将 Amazon EBS 中的临时表空间分配给包含实例存储表空间的同一个表空间组。

1. 将表空间组设置为原定设置临时表空间。

以下示例假设实例存储中临时表空间的大小不符合您的应用程序要求。该示例在实例存储中创建临时表空间 `temp_in_inst_store`，将其分配给表空间组 `temp_group`，将名为 `temp_in_ebs` 的现有 Amazon EBS 表空间添加到该组中，并将该组设置为原定设置临时表空间。

```
SQL> EXEC rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspace('temp_in_inst_store');

PL/SQL procedure successfully completed.

SQL> ALTER TABLESPACE temp_in_inst_store TABLESPACE GROUP temp_group;

Tablespace altered.

SQL> ALTER TABLESPACE temp_in_ebs TABLESPACE GROUP temp_group;

Tablespace altered.

SQL> EXEC rdsadmin.rdsadmin_util.alter_default_temp_tablespace('temp_group');

PL/SQL procedure successfully completed.

SQL> SELECT * FROM DBA_TABLESPACE_GROUPS;

GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_GROUP                     TEMP_IN_EBS
TEMP_GROUP                     TEMP_IN_INST_STORE

SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
--------------
TEMP_GROUP
```

## 删除 RDS for Oracle 实例存储
<a name="CHAP_Oracle.advanced-features.instance-store.Disable"></a>

要删除实例存储，请修改 RDS for Oracle 数据库实例以使用不支持实例存储的实例类型，如 db.m5 或 db.r5。