1.首先
2022 年 9 月 14 日“Amazon RDS for Oracle 为 M5d/R5d 实例的临时表空间添加了实例存储和数据库智能闪存缓存支持”被宣布。
在 RDS for Oracle 中,它是一个功能,允许您将无法从 Oracle 正常引用的实例存储区域用作临时数据库表空间或智能闪存缓存。
这一次,我尝试将其用作临时表空间。
实例存储
一种直接附加的块设备存储形式,称为实例存储。
实例存储卷基本上是一个非持久化区域,但速度很快,因为它是 NVMe SSD 驱动器。
临时表空间
在对内存中放不下的数据进行排序时,会使用 Oracle 的临时表空间。
智能闪存缓存
Oracle 的智能闪存缓存是 11gR2 中引入的一项功能,它允许将数据库缓冲区缓存从内存扩展到智能闪存缓存,从而实现高速数据访问。
请注意,它仅在 Oracle 企业版中可用。
2. 关于实例存储
实例存储大小
RDS for Oracle 中可用的实例类型有 m5d 和 r5d,实例存储的大小如下。
| 实例类型 | 内存大小 (GiB) | 实例存储大小 (GB) |
|---|---|---|
| m5d.大 | 8 | 75 |
| m5d.xlarge | 16 | 150 |
| m5d.2xlarge | 32 | 300 |
| m5d.4xlarge | 64 | 600 |
| m5d.8xlarge | 128 | 1200 |
| m5d.12xlarge | 192 | 1800 |
| m5d.16xlarge | 256 | 2400 |
| m5d.24xlarge | 384 | 3600 |
| r5d.large | 16 | 75 |
| r5d.xlarge | 32 | 150 |
| r5d.2xlarge | 64 | 300 |
| r5d.4xlarge | 128 | 600 |
| r5d.8xlarge | 256 | 1200 |
| r5d.12xlarge | 384 | 1800 |
| r5d.16xlarge | 512 | 2400 |
| r5d.24xlarge | 768 | 3600 |
可以使用实例存储的数据区
* 这一次,我们将验证用作临时表空间。
| 数据区 | 临时表空间 | 智能闪存缓存 |
|---|---|---|
| 用法 | 进行大规模数据排序、哈希聚合和连接操作 通常在内存中的 PGA 中执行 |
包含从磁盘读取的数据块 通常在内存缓冲区缓存(db_cache_size)中实现 |
| 可用的 版 |
标准版2、企业版 | 企业版 |
使用实例存储的优缺点
优点是可以如下进行高速访问。
- 减少读取延迟
- 更高的吞吐量
- 卸载 Amazon EBS 卷
- 降低存储和快照成本(实例存储成本包含在实例成本中)
缺点是在实例停止的时候不能保留内容,但是在RDS for Oracle或者智能闪存缓存的临时表空间中使用时,无论如何都不需要保留内容,我认为没有明显的缺点。
对于其他限制等。用户指南建议在使用前检查它,因为它在
3.使用instance store作为临时表空间
对于 m5d 和 r5d 实例类型,使用实例存储的先决条件已经到位。
3.1 在实例存储中新建一个临时表空间(temp01)
在实例存储中创建临时表空间是用户指南被描述。
下面的命令在实例存储中创建一个名为 temp01 的临时表空间。
SQL> EXEC rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspace(p_tablespace_name => 'temp01');
SQL> select tablespace_name, block_size, max_size, status, contents from dba_tablespaces where tablespace_name like 'TEMP%';
TABLESPACE_NAME BLOCK_SIZE MAX_SIZE STATUS CONTENTS
------------------------------ ---------- ---------- --------- ---------------------
TEMP 8192 2147483645 ONLINE TEMPORARY
TEMP01 8192 2147483645 ONLINE TEMPORARY
3.2 将用户使用的临时表空间改为实例存储临时表空间(temp01)
testusr 的临时表空间更改为 temp01。
SQL> alter user testusr temporary tablespace temp01;
SQL> select username, temporary_tablespace from dba_users where username='TESTUSR';
USERNAME TEMPORARY_TABLESPACE
---------------------- ------------------------------
TESTUSR TEMP01
上面为每个testusr设置了一个临时表空间进行验证。
全面使用临时表空间组创建或更改默认临时表空间设置也是可能的。
3.3 尝试使用实例存储临时表空间(temp01)
从 TESTUSR 执行导致 SORT 的 SQL 并检查 tempfile 前后的状态时,确认在执行 SORT 后,TEMP01 侧(FILE#2)的 BYTES 和 BLOCKS 增加了。
FILE# CREATION_CHANGE# BYTES BLOCKS NAME
---------- ---------------- ---------- ---------- ------------------------------------------------------------
2 1797607 5368709120 655360 /rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp
●SORTが発生するSQLの実行
FILE# CREATION_CHANGE# BYTES BLOCKS NAME
---------- ---------------- ---------- ---------- ------------------------------------------------------------
2 1797607 2.1475E+10 2621440 /rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp
顺便说一句,当我检查警报日志时,我能够确认它扩大了 5 GB。
此外,MAXSIZE 是67,123MB实例存储大小为 m5d.large75GB可以看出是按照
2022-10-04T18:56:33.163654+09:00
alter database /*rdsadmin_util*/ tempfile '/rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp' autoextend on next 5120M maxsize 67123M
Completed: alter database /*rdsadmin_util*/ tempfile '/rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp' autoextend on next 5120M maxsize 67123M
2022-10-04T19:00:14.208857+09:00
Resize operation completed for file# 202, fname /rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp, old size 5242880K, new size 10485760K
2022-10-04T19:01:37.453122+09:00
Resize operation completed for file# 202, fname /rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp, old size 10485760K, new size 15728640K
2022-10-04T19:03:00.699786+09:00
Resize operation completed for file# 202, fname /rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp, old size 15728640K, new size 20971520K
3.4 使用实例存储临时表空间(temp01)的效果
我能够确认以下两点的差异。
-
性能(Oracle的基准测试结果基本上不能公布,仅供参考。)
在多次执行大约 20 GB 的数据排序过程后,约 5%实例存储的执行时间更短。不是准确的数据,因为它包含了Fetch时间,并且客户端很差(使用t3.small),但基本上假设实例存储会提高性能。 -
存储负荷
对临时表空间的所有访问都加载到实例存储而不是 EBS 上,因此我们能够确认不会发生 EBS 上的排序加载。在RDS中,通常也会在EBS上创建一个临时表空间,作为临时表空间的存储容量也会被消耗。通过使用实例存储作为临时表空间,临时表空间不需要使用EBS,可以用于用户数据。● 使用 EBS 临时表空间:EBS 在 SORT 期间写入,在 FETCH 期间读取
● 使用instance store的临时表空间:SORT期间不会发生EBS写入(此时无法确认instance store的READ/WRITE)
概括
通过将实例存储用作临时表空间,我们能够确认性能改进和存储负载分离。
特别是,存储负载分离可能会根据工作负载产生很大的影响,因为它可以将负载分配给存储,而 RDS 只能使用一种存储类型。
我们承认没有特别的缺点,并且我们认为在使用 RDS for Oracle 时建议积极使用。此外,在 EE 中,实例存储是也可以用作智能闪存缓存能够。
我们也相信根据工作量使用它可以提高性能。
(也可以将实例存储区分开,在两者中使用)奖励:收缩实例存储临时表空间
如果你想收缩实例存储的临时表空间,你不能用 alter 命令改变它。
使用 alter 命令收缩SQL> alter tablespace temp01 shrink space keep 100M; alter tablespace temp01 shrink space keep 100M * ERROR at line 1: ORA-04088: error during execution of trigger 'RDSADMIN.RDS_DDL_TRIGGER2' ORA-00604: error occurred at recursive SQL level 1 ORA-20900: You cant use ALTER TABLESPACE on tablespaces that have tempfiles on the instance store. Use the RDSADMIN.RDSADMIN_UTIL procedures. ORA-06512: at "RDSADMIN.RDSADMIN_TRIGGER_UTIL", line 317 ORA-06512: at line 2被骂我可以用RDSADMIN_UTIL,所以我搜索了一下,但是有一个命令叫RESIZE_TEMP_TABLESPACE。
当我运行它时,我能够毫无问题地减少它。RESIZE_TEMP_TABLESPACESQL> exec rdsadmin.rdsadmin_util.RESIZE_TEMP_TABLESPACE('TEMP01','100M'); PL/SQL procedure successfully completed. FILE# CREATION_CHANGE# BYTES BLOCKS NAME ---------- ---------------- ---------- ---------- ------------------------------------------------------------ 2 1797607 104857600 12800 /rdslocalstorage/rds_inst_store_tempfile_TESTDB.tmp
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628226.html