【问题标题】:[Oracle]: A query hangs when is executed in a partition but not in others partitions for the same table[Oracle]:在一个分区中执行查询时挂起,但在同一张表的其他分区中不执行
【发布时间】:2018-04-15 10:04:22
【问题描述】:

我有一个按列 A 的分区表。分区 Z 的表有 800000 条记录,分区 V 有 5000000 条(更多)。我检查了所有索引并且处于活动状态。

表 ALL_TAB_PARTITIONS 中的分区看起来没问题。

我在分区 Z 中执行了一个查询,它挂起,当它执行 5 小时时我不得不终止它,但在分区 V 中运行非常快,1.2 秒。

我还观察到不同分区中的相同查询使用表的不同索引。

我不知道为什么。

有人知道为什么会发生这种情况吗?

提前谢谢你。

【问题讨论】:

  • 检查两个分区的查询执行计划。
  • 你看过你的执行计划了吗?您最近是否对表格进行过统计?
  • 是的,执行计划显示分区 V 中查询的成本为 11258、基数 1 和字节 315,分区 Z 中的成本为 3、基数 1 和 2368 字节。统计数据有最近在桌子上运行。可能是为了统计?
  • @JaviHernandez 执行计划中有很多细节,而且计划可能出错的方式有很多。运行 explain plan for select ...; 然后运行 ​​select * from table(dbms_xplan.display); 并将整个结果包含在问题中会有所帮助。
  • @BrianLeach 对不起,我可以问你一个问题吗?对表运行统计信息后是否需要从分区更新索引?

标签: sql oracle performance indexing partitioning


【解决方案1】:

谢谢大家的回复,我知道我没有提供太多信息。

通过重建分区Z的所有索引来解决问题。

显然问题是由统计数据引起的,我不得不重建索引。

索引是这样重建的:

alter index TABLE_IDX0 rebuild partition Z  ONLINE COMPUTE STATISTICS;
alter index TABLE_IDX1 rebuild partition Z  ONLINE COMPUTE STATISTICS;
alter index TABLE_IDX2 rebuild partition Z  ONLINE COMPUTE STATISTICS;
alter index TABLE_IDX3 rebuild partition Z  ONLINE COMPUTE STATISTICS;
alter index TABLE_IDX4 rebuild partition Z  ONLINE COMPUTE STATISTICS;
alter index TABLE_IDX5 rebuild partition Z  ONLINE COMPUTE STATISTICS;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多