首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >估计表空间大小

估计表空间大小
EN

Database Administration用户
提问于 2015-08-26 04:50:46
回答 1查看 2.7K关注 0票数 2

我试图使用以下步骤估计表空间的大小:模式对象的空间估计

我对其中的一些步骤有点困惑。在计算行大小的步骤3中,我首先需要计算列大小,然后计算表中所有列大小的总和,我想知道如何在没有实际创建表的情况下得到列大小值,但是是否必须创建示例数据,然后使用vsize()?还是我不知道列的大小..。

此外,链接中的这些步骤也用于估计表(?)的大小。所以,如果我想估计表空间的大小,我会只取所有估计表大小的总和吗?

EN

回答 1

Database Administration用户

发布于 2015-08-26 13:02:00

你在使用Oracle 7吗?如果没有,请确保始终使用当前版本的文档。Oracle已经在12C上了,虽然一些概念仍然相同,但大部分特性已经改变了。

你实际上不会得到列的大小。这就是为什么它只是一个“估计”。您需要了解需要什么,然后可以使用包dbms_space和create_table_cost过程来获得所需空间的概念。

例如:

我需要创建一个包含3个列(val1、val2、val3)的表,并且我知道每个列都将占用4个字节(3个文本,比如abc,以及varchar2获取的主导字节)。我还估计这个表将有大约1000行。现在想想笛卡儿图:

代码语言:javascript
复制
row_count
^
|
|
|
|-----------> avg_row_len

并使用以下方法估计大小:

代码语言:javascript
复制
 set serveroutputon
    DECLARE
      estimated_used_size   NUMBER;
      allocated  NUMBER;
    BEGIN
        DBMS_SPACE.create_table_cost (
        tablespace_name => 'USERS',
        avg_row_size    => 12,
        row_count       => 1000,
        pct_free        => 10,
        used_bytes      => estimated_used_size,
        alloc_bytes     => allocated);

      DBMS_OUTPUT.put_line ('the table (TS=USERS): will use =' || estimated_used_size ||' bytes  to be allocated =' ||  allocated);
end;
/

关于最后一个问题,要估计现有表的大小,可以检查视图dba_segments (也可以查询索引和其他对象大小)。

示例:

代码语言:javascript
复制
SQL> SELECT bytes/1024/1024 "Size in MB" FROM dba_segments WHERE segment_name = 'TABLE_NAME_HERE' AND segment_type = 'TABLE';
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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