此处讨论的表格按以下方式工作: 让我们考虑这里有问题的表是表 A,还有另外两个表 B 和 C。 表C接收首先接收来自外部系统的所有数据。 然后数据被传输到表 B,在那里它被处理,并且该数据的副本也在表 A 中创建。随着数据在表 B 中继续处理,数据的状态在 A 和 B 中都发生变化。一旦所有数据都在表 B 中处理,表从表 A 中删除。
所以基本上表A将要由表B处理的数据排队。
尽管表 A 在特定时间拥有数千条记录,但当表 A 为空时,统计信息以某种方式收集在表 A 中。 因此,该表的样本大小变为零。有什么办法可以在表中恢复原始统计信息。
在oracle网站上看到dbms_stats包的恢复过程有助于恢复原始统计信息。但是还有其他方法吗?恢复统计信息是否有助于恢复处理性能?
最佳答案
最简单的方法似乎就是在您需要新数据时重新计算统计数据。当然,这仅在统计计算时间不太长的情况下才有意义。
否则,RESTORE_TABLE_STATS
Procedure可能是最简单的方法:
This procedure restores statistics of a table as of a specified timestamp (as_of_timestamp). The procedure will restore statistics of associated indexes and columns as well.
考虑:
exec dbms_stats.restore_table_stats(
ownname => 'myschema',
tabname => 'mytable',
as_of_timestamp => 'mytimestamp'
);
最后,另一种选择是按照以下步骤手动导出/导入统计信息:
- 使用
CREATE_STAT_TABLE Procedure
创建表统计信息 - 导出相关时刻的统计数据,使用
EXPORT_TABLE_STATS
- 需要时,使用
IMPORT_TABLE_STATS
重新导入统计信息
This blog link提供了有关如何进行的详细示例。
关于sql - 如果oracle数据库中的某个表是空表统计的,那么如何恢复该表的原始统计信息呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938267/