Oracle

如何估計新表的大小?

  • December 26, 2017

我們有包含大量數據的表(每個月有 5000 萬行新行,僅在一個表中)。

現在我想知道向這些表中添加新列或創建新表會產生什麼影響。類似於:表 X上的新列可以將使用的空間增加其目前大小的 12%。或者:假設新表將以 1000 行/天的速度增長,預期大小將在一個月內為Y。

我已經找到了一些關於這個DBMS_SPACE包的資訊,但它似乎沒用,因為create_table_cost_colinfo()它只返回有用的資訊VARCHAR2

您對“輕鬆”估計這些資訊有什麼建議嗎?

您可以從測量此表的大小和行數開始。如果你每小時/每天/每週都這樣做,那麼你就會對這張表的增長有所了解。

select   to_char(sum(bytes)/1024/1024, '999,999,999')||' Mb'
from     dba_segments
where    owner=upper('&TableOwner')
and      segment_name=upper('&Table')
/

select  count(*)
from    tableowner.table
/

考慮到您獲得的大小還包含分配給表的空白空間。當表剛剛擴展並且僅在此擴展中寫入 1 條新記錄時,則資訊不太正確。但鑑於您每天有近 2M 行,每行的空間將非常準確。

從維護的角度來看,2張桌子肯定更好。可以歸檔、刪除、截斷新表,而不會影響現有表。它可以物理儲存在單獨的表空間中。此外,與新表相比,添加新列將產生更大的整體影響

$$ s $$. 命中此表的查詢的執行計劃將失效,這可能會大大降低性能(假設目前一切都很好)。 另一件事是,例如,將人的名字儲存在一個表中,而將姓氏儲存在另一個表中看起來很奇怪。我寧願專注於邏輯結構…

引用自:https://dba.stackexchange.com/questions/147749