通过Partition Exchange(Oracle 10g)加载表

时间:2020-03-06 15:05:13  来源:igfitidea点击:

关于优化这种类型的负载,我有几个问题。

可以建立一个要加载到分区表中的新数据表,然后在该新表上建立索引。

  • 我们应该使用COMPUTE STATISTICS选项构建索引还是使用DBMS_Stats的Cascade选项?
  • 我们应该在交换之前在表上收集统计信息,还是在交换之后在分区上收集统计信息?
  • 如果在交换之后执行此操作,并且在参数列表中指定了分区名称,那么粒度参数有什么相互作用?例如,如果我指定一个分区名称,然后将粒度设置为" GLOBAL AND PARTITION",那是否完全是Global?它只是做一个分区吗?

解决方案

  • DBMS_STATS被认为是计算该版本统计信息的正确方法。使用" COMPUTE STATISTICS"构建索引是可行的,但是通常我们希望一次计算所有统计信息并拍摄快照。
  • 我们想在交换后收集统计信息。这样,优化器将对使用该分区的数据执行查询做出最佳猜测。
  • 你为什么要把两者都放?

Should you build the index with the COMPUTE STATISTICS option or use the Cascade option of the DBMS_Stats?

如果这是一个数据仓库,则首先考虑完全不收集统计信息,而使用动态采样。其次,如果我们确实收集统计信息,则一定要对索引使用计算统计信息。

Should you gather stats on the table before the swap or on the partition after the swap?

交换之前收集新数据表上的统计信息以获取新数据上的分区统计信息-收集分区表上的统计信息后再收集表统计信息

If you do it after the swap and you specify the partition name in the parameter list, what interplay does the granularity parameter have? For instance, if I specify a partition name and then set granularity to 'GLOBAL AND PARTITION' does that do Global at all? Does it do just that one partition?

看上面。

认真地说,不要提供任何统计信息和动态采样的机会。