首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle表空间不使用100%可用空间

Oracle表空间不使用100%可用空间
EN

Database Administration用户
提问于 2019-11-11 17:52:54
回答 1查看 519关注 0票数 0

大约一年前,我们在我们的Oracle 11g RAC数据库中添加了一个新的表空间,我们现在正在使用所有的空间,偶尔也会耗尽空间。我检查这个查询的可用空间:

代码语言:javascript
运行
复制
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;

它报告说:

代码语言:javascript
运行
复制
TABLESPACE_NAME                   USED_MB    FREE_MB   TOTAL_MB   PCT_FREE   PCT_ROOM
------------------------------ ---------- ---------- ---------- ---------- ----------
MOB_BIGDATA3                     47486837    1543307   49030144          3          6

当我们第一次向这个表空间添加数据时,总MB在爬升,而空闲的百分比正在下降,但我们现在只能停留在6%。免费MB可以降到零,房间百分比保持在6%。

我应该补充说,其他表空间的空间为零。

有人能建议怎么利用这最后一点空间吗?

更新:在我的例子中,没有必要对值进行求和,因为每个表空间只有一个。使用此查询:

代码语言:javascript
运行
复制
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%';

我刚得到:

代码语言:javascript
运行
复制
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
EN

回答 1

Database Administration用户

发布于 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。这部分根本没有说明这一点:

代码语言:javascript
运行
复制
ROUND(SUM(maxbytes) /(1024*1024)) MaxMegBytes

它应该是:

代码语言:javascript
运行
复制
ROUND(SUM(decode(maxbytes, 0, bytes, maxbytes)) /(1024*1024)) MaxMegBytes

对于不可自动扩展的数据文件,上面的查询返回不准确的结果,甚至可能返回负值.

如果自动扩展数据文件的概念令人困惑,只需将所有数据文件预先分配到最大大小即可。这样,PCT_ROOM将为0,而PCT_FREE将表示实际的空闲空间百分比。您甚至可以在完成此操作后禁用数据文件上的自动扩展,但为此,您需要修复我前面指出的查询。

或者简单地抛出所有这些并使用DBA_TABLESPACE_用法_度量标准。此外,应用最新的补丁程序,因为如果没有这些补丁,此视图将无法100%正确地工作。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/252999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档