大约一年前,我们在我们的Oracle 11g RAC数据库中添加了一个新的表空间,我们现在正在使用所有的空间,偶尔也会耗尽空间。我检查这个查询的可用空间:
SELECT
df.tablespace_name TABLESPACE_NAME,
totalusedspace USED_MB,
(df.totalspace - tu.totalusedspace) FREE_MB,
df.totalspace TOTAL_MB,
ROUND(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace)) PCT_FREE,
ROUND(100 * ( (df.MaxMegBytes-df.TotalSpace)/df.MaxMegBytes)) PCT_ROOM
FROM
(SELECT
tablespace_name,
ROUND(SUM(bytes) / 1048576) TotalSpace,
ROUND(SUM(maxbytes) /(1024*1024)) MaxMegBytes
FROM dba_data_files
WHERE tablespace_name like 'MY_TABLESPACES%'
GROUP BY tablespace_name) df,
(SELECT
ROUND(SUM(bytes)/(1024*1024)) totalusedspace, tablespace_name
FROM dba_segments
GROUP BY tablespace_name) tu
WHERE
df.tablespace_name = tu.tablespace_name and df.totalspace <>0
ORDER BY
df.tablespace_name;
它报告说:
TABLESPACE_NAME USED_MB FREE_MB TOTAL_MB PCT_FREE PCT_ROOM
------------------------------ ---------- ---------- ---------- ---------- ----------
MOB_BIGDATA3 47486837 1543307 49030144 3 6
当我们第一次向这个表空间添加数据时,总MB在爬升,而空闲的百分比正在下降,但我们现在只能停留在6%。免费MB可以降到零,房间百分比保持在6%。
我应该补充说,其他表空间的空间为零。
有人能建议怎么利用这最后一点空间吗?
更新:在我的例子中,没有必要对值进行求和,因为每个表空间只有一个。使用此查询:
SELECT
tablespace_name,
bytes TotalSpace,
maxbytes MaxBytes,
maxbytes -bytes room,
100*(maxbytes -bytes)/maxbytes percent_Room
FROM dba_data_files
WHERE tablespace_name like 'MY_TABL%';
我刚得到:
TABLESPACE_NAME TOTALSPACE MAXBYTES ROOM PERCENT_ROOM
------------------ -------------------- -------------------- ------------------- ------------
MY_TABLESPA3 51,411,832,274,944 54,975,581,388,800 3,563,749,113,856 6.48242
发布于 2019-11-11 18:47:57
除了使用不必要的、不正确的监视查询(而不是DBA_TABLESPACE_USAGE_METRICS
)和可能误解其输出之外,我没有看到任何其他问题。
PCT_FREE是自由空间与分配大小的比率。
PCT_ROOM是比较自由空间的比率。
当PCT_FREE达到0时,这意味着您的所有数据文件都充满了它们分配的大小范围内的数据。表空间中的自动可扩展数据文件到maxbytes
时仍然可以增长6%。此时,如果插入更多的数据,PCT_FREE将保持为0,而PCT_ROOM将开始减少。但是请记住,这里的1%是490 GB,所以PCT_ROOM从6到5可能需要一段时间。
查询不正确,因为不能自动扩展的数据文件的最大字节值为0。这部分根本没有说明这一点:
ROUND(SUM(maxbytes) /(1024*1024)) MaxMegBytes
它应该是:
ROUND(SUM(decode(maxbytes, 0, bytes, maxbytes)) /(1024*1024)) MaxMegBytes
对于不可自动扩展的数据文件,上面的查询返回不准确的结果,甚至可能返回负值.
如果自动扩展数据文件的概念令人困惑,只需将所有数据文件预先分配到最大大小即可。这样,PCT_ROOM将为0,而PCT_FREE将表示实际的空闲空间百分比。您甚至可以在完成此操作后禁用数据文件上的自动扩展,但为此,您需要修复我前面指出的查询。
或者简单地抛出所有这些并使用DBA_TABLESPACE_用法_度量标准。此外,应用最新的补丁程序,因为如果没有这些补丁,此视图将无法100%正确地工作。
https://dba.stackexchange.com/questions/252999
复制相似问题