我在 Amazon RDS 上运行的 Oracle 实例在大约 20 分钟内填满了 20GB 的存储空间。我检查了所有使用此数据库的应用程序,没有任何异常 - 我不明白为什么会发生这种情况。
查看 CloudWatch 中的图表:
正如您所见,我将存储空间增加到 25GB,希望能“有所收获” - 但显然,它所做的只是增加了 5GB 的可用空间。
此实例运行一个流量非常低的 Web 应用程序,您可以看到可用空间的使用情况非常稳定。20GB 对这个系统来说应该足够了。发生了什么?
有什么技巧可以帮助我找出占用所有空间的东西吗?
编辑:我从数据库中获取了一些统计数据:
SELECT
( SELECT SUM(BYTES)/1024/1024/1024 DATA_SIZE FROM DBA_DATA_FILES ) +
( SELECT NVL(SUM(BYTES),0)/1024/1024/1024 TEMP_SIZE FROM DBA_TEMP_FILES ) +
( SELECT SUM(BYTES)/1024/1024/1024 REDO_SIZE FROM SYS.V_$LOG ) +
( SELECT SUM(BLOCK_SIZE*FILE_SIZE_BLKS)/1024/1024/1024 CONTROLFILE_SIZE FROM V$CONTROLFILE) "Size in GB"
FROM
DUAL;
生成:
Size in GB
------------------
19.360321044921875
通过排除法,我发现它DBA_TEMP_FILES
占用了 19 GB 中的 18 GB。
DBA_TEMP_FILES 中有什么?如何清除它们?
答案1
好的,我调整了 TEMP 表空间的大小,这似乎解决了我的问题。
这是我运行的命令:
ALTER TABLESPACE TEMP SHRINK SPACE KEEP 512M;
似乎已经解决了这个问题(数据库大小从 19GB 变为 2GB),但我仍然不明白为什么在如此小的环境中会发生这种情况。
添加了一些 CloudWatch 警报,以便我下次可以提前跳转(如果有下一次的话)。