收集截断和插入后所需的统计信息?
Gather Stats Required After Truncate and Insert?
我需要截断并重新加载 table。
我了解到 truncate 需要在 table 上收集统计信息作为其后继进程,以便数据库获得实际统计信息,否则 truncate 语句不会清除以前的统计信息。
完成这两个操作后(在空 table 上截断和收集统计信息),运行 插入...但是在 all_tab_statistics 中看不到新的统计信息 table 为我的 table。 Sample_size 仍然是 0。
这是为什么? Oracle 不应该在插入后自动收集统计信息吗?
我是否需要重新运行统计数据,或者考虑到围绕此 table 的性能是否很好(请注意每次都会截断并重新加载)?
考虑以下方法。它的优点是 table 始终存在。
- 像旧的一样创建一个空的新 table。
- 将数据加载到新 table。这是最慢的一步。
- 执行您可能需要的任何清理工作,例如刷新统计数据。
RENAME
tables 交换新的 table。这一步足够快,所以你不会注意到。
我知道我已经很久没有在上面发布问题了。但最近,我们再次遇到类似的情况,这一次,下面的步骤致力于在具有 8 亿行的 table 上实现更好的性能。
- 备份原始文件 table。
- 截断原来的table。
- 在截断的 table 上收集统计信息,以便统计信息在数据库中显示为 0。我们在命令中使用 CASCADE=>TRUE 以在进程中也包含索引。
- 删除截断 table 上的索引并从备份 table 插入所需数据。
- 重新创建索引并再次收集统计信息(当然,使用 CASCADE=>TRUE;但是理想情况下重新创建索引应该已经计算出适当的统计信息)。
- 如果不需要,请删除备份 table。
我需要截断并重新加载 table。
我了解到 truncate 需要在 table 上收集统计信息作为其后继进程,以便数据库获得实际统计信息,否则 truncate 语句不会清除以前的统计信息。
完成这两个操作后(在空 table 上截断和收集统计信息),运行 插入...但是在 all_tab_statistics 中看不到新的统计信息 table 为我的 table。 Sample_size 仍然是 0。
这是为什么? Oracle 不应该在插入后自动收集统计信息吗?
我是否需要重新运行统计数据,或者考虑到围绕此 table 的性能是否很好(请注意每次都会截断并重新加载)?
考虑以下方法。它的优点是 table 始终存在。
- 像旧的一样创建一个空的新 table。
- 将数据加载到新 table。这是最慢的一步。
- 执行您可能需要的任何清理工作,例如刷新统计数据。
RENAME
tables 交换新的 table。这一步足够快,所以你不会注意到。
我知道我已经很久没有在上面发布问题了。但最近,我们再次遇到类似的情况,这一次,下面的步骤致力于在具有 8 亿行的 table 上实现更好的性能。
- 备份原始文件 table。
- 截断原来的table。
- 在截断的 table 上收集统计信息,以便统计信息在数据库中显示为 0。我们在命令中使用 CASCADE=>TRUE 以在进程中也包含索引。
- 删除截断 table 上的索引并从备份 table 插入所需数据。
- 重新创建索引并再次收集统计信息(当然,使用 CASCADE=>TRUE;但是理想情况下重新创建索引应该已经计算出适当的统计信息)。
- 如果不需要,请删除备份 table。