0

我必须根据下表的块计算存储要求:

Bill(billno number(7),billdate date,ccode varchar2(20),amount number(9,2))

表存储属性为:

PCTFREE=20,INITRANS=4,PCTUSED=60,BLOCKSIZE=8K,行数=100000

我在互联网上搜索了很多,参考了很多书,但没有得到任何东西。

4

1 回答 1

1

首先,您需要弄清楚varchar2列的典型值是什么。总大小将取决于此。我从你的桌子上创建了 2 张BILL桌子。BILLMAXwhereccode总是需要 20 Char('12345678901234567890')并且BILLMIN总是NULLccode. 结果是:

TABLE_NAME  NUM_ROWS    AVG_ROW_LEN BLOCKS
BILLMAX     3938        37          28
BILLMIN     3938        16          13

select table_name, num_rows, avg_row_len, blocks  from user_tables 
where table_name in ( 'BILLMIN', 'BILLMAX')

如您所见,块的数量取决于此。用于exec dbms_stats.GATHER_TABLE_STATS('YourSchema','BILL')刷新 user_tables 中的值。

您需要考虑的另一件事是您的范围有多大。例如 :

STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           )

将生成 8 个块大小的前 16 个扩展区。之后,它将开始创建大小为 1 MB(128 个块)的范围。

因此,BILLMAX它将生成 768 个块BILLMIN并将占用 384 个块。如您所见,差异很大。

对于BILLMAX:16 * 8 + 128 * 5 = 768

对于BILLMIN:16 * 8 + 128 * 2 = 384

于 2016-04-27T07:13:51.273 回答