gpt4 book ai didi

oracle - Oracle 如何预测表大小?

转载 作者:行者123 更新时间:2023-12-02 06:41:29 24 4
gpt4 key购买 nike

我正在尝试对我拥有的一些表进行增长预测,为此我必须对行大小、每天生成的行数以及数学进行一些计算。

我正在计算表中每行的平均大小作为每个字段的平均大小的总和。所以基本上:

SELECT 'COL1' , avg(vsize(COL1)) FROM TABLE union
SELECT 'COL2' , avg(vsize(COL2)) FROM TABLE

将其相加,乘以一天的条目数,然后进行预测。

事实证明,对于我查看过的其中一张表,结果大小比我想象的要小很多,这让我想知道我的方法是否正确。

此外,我的预测没有考虑索引大小 - 当然我应该考虑。

我的问题是:

  1. 我使用的这个方法可靠吗?

  2. 有关如何进行索引预测的提示?

我已经完成了谷歌搜索,但我找到的方法都是关于段和扩展或基于整个表的计算。我需要使用表的实际行进行预测(我必须分析表中的数据才能计算出每天有多少条记录)。

最后,这是一个近似值。我知道我到处都缺少一些字节,包括开销和其他东西。我只是想确保我只缺少字节而不是千兆:)

最佳答案

1)您的方法可以很好地计算行的平均大小。 (但请注意,如果您的列包含 null,则应该使用 avg(nvl(vsize(col1), 0)) 而不是 avg(vsize(COL1)) )。但是,它没有考虑行的物理排列。

首先,它没有考虑 header 信息(来自 block 和行):您无法将 8k 数据放入 8k block 中。请参阅 data block format 上的文档了解更多信息。

然后,行并不总是整齐地存储。 Oracle 在每个 block 中留出一些空间,以便行在更新时可以增长(由 pctfree 参数控制)。此外,当删除行时,不会立即回收空白空间(如果您没有将 ASSM 与本地管理的表空间一起使用,则 block 返回到可用 block 列表所需的可用空间量取决于 pctused ) .

如果您的表中已有一些代表性数据,则可以通过将实际使用的空间(收集统计数据后的 all_tables.blocks*block_size)与平均行长度进行比较来估计所需的额外空间量。

顺便说一句,Oracle 可以轻松地为您提供平均行长度的良好估计:收集表上的统计信息并查询 all_tables.avg_row_len .

2)大多数时候(阅读:除非有错误或者您陷入索引的非典型使用),索引将与行数成比例增长。

如果您有代表性数据,则可以通过将其实际大小乘以行数的相对增长来很好地估计其 future 的大小。

关于oracle - Oracle 如何预测表大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com