每次ETL作業完成後,我必須收集每個表(包括其索引空間)的實際使用空間以及行數。Oracle計算實際使用大小和統計信息收集
user_segments和user_extents中的字節列僅指示分配的空間。所以我使用以下來獲得每個表的大小:
Dbms_Space.object_space_usage (
object_owner => v_owner,
object_name => c.name,
object_type => c.typ,
sample_control => NULL,
space_used => v_space_used_out,
space_allocated => v_space_allocated_out,
chain_pcent => v_chain_pcent_out);
v_space_used := v_space_used+v_space_used_out;
v_space_allocated := v_space_allocated+v_space_allocated_out;
循環遍歷每個索引和表本身。
我的問題是在我運行上面的代碼之前是否需要運行?
EXEC DBMS_STATS.GATHER_TABLE_STATS(v_owner,v_table_name);
爲什麼和/或爲什麼不?
感謝,
看起來這將是很容易測試。創建一個表,插入行,運行Dbms_Space.object_space_usage,看看它告訴你什麼。在運行gather_table_stats之後,它會改變嗎? –