每次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之后,它会改变吗? –