我试图使用以下步骤估计表空间的大小:模式对象的空间估计
我对其中的一些步骤有点困惑。在计算行大小的步骤3中,我首先需要计算列大小,然后计算表中所有列大小的总和,我想知道如何在没有实际创建表的情况下得到列大小值,但是是否必须创建示例数据,然后使用vsize()?还是我不知道列的大小..。
此外,链接中的这些步骤也用于估计表(?)的大小。所以,如果我想估计表空间的大小,我会只取所有估计表大小的总和吗?
发布于 2015-08-26 13:02:00
你在使用Oracle 7吗?如果没有,请确保始终使用当前版本的文档。Oracle已经在12C上了,虽然一些概念仍然相同,但大部分特性已经改变了。
你实际上不会得到列的大小。这就是为什么它只是一个“估计”。您需要了解需要什么,然后可以使用包dbms_space和create_table_cost过程来获得所需空间的概念。
例如:
我需要创建一个包含3个列(val1、val2、val3)的表,并且我知道每个列都将占用4个字节(3个文本,比如abc,以及varchar2获取的主导字节)。我还估计这个表将有大约1000行。现在想想笛卡儿图:
row_count
^
|
|
|
|-----------> avg_row_len并使用以下方法估计大小:
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 (也可以查询索引和其他对象大小)。
示例:
SQL> SELECT bytes/1024/1024 "Size in MB" FROM dba_segments WHERE segment_name = 'TABLE_NAME_HERE' AND segment_type = 'TABLE';https://dba.stackexchange.com/questions/112197
复制相似问题