【问题标题】:Oracle 11g: For the same table different query perfomance, seems like indexes destroyed for some dataOracle 11g:对于同一张表不同的查询性能,似乎索引为某些数据被破坏
【发布时间】:2017-02-07 15:29:16
【问题描述】:

我的数据查询(选择)性能有问题。

在应收账款表中,我们有已编入索引的 account_id。 当我在脚本下面运行时,Account_ID=2003975183 没问题,但是 Account_ID=900025281 进程很慢。这是在 oracle 服务器意外停止后发生的。 两个帐户的行数几乎相同。

帐户的 SQL 脚本:

SELECT nvl(sum(invoice_amt),0) inv_amt
FROM ardb.receivables
WHERE
   acct_id = 2003975183
  AND  entry_date >= trunc(SYSDATE)
  AND  entry_date < trunc(SYSDATE) + 1;

根据跟踪数据,Index 似乎无法正常工作,是吗?

附加了快速和慢速查询的两个跟踪:

FAST_QUERY_RESULT_TRACE

SLOWLY_QUERY_TRACE_RESULT

请检查并帮助解决问题。 谢谢!

【问题讨论】:

  • 你为什么不gather stats 的表应收账款,然后再次运行查询并查看。
  • 我忘了说:1) 表数据已分区,2) 已经收集了统计信息。没有效果。顺便说一下,之前的gather stat num rows stats和partition是一样的。

标签: sql performance indexing oracle11g sql-tuning


【解决方案1】:

我解决了这个问题。 运行此脚本并增加共享池大小查询工作正常并且在跟踪中我可以看到索引扫描(之前不是):

ANALYZE INDEX IDX_RECEIVABLES_ACCTID VALIDATE STRUCTURE online;

【讨论】:

  • 你使用 dbms_stats 包来收集表/索引统计信息。
  • BobC,你是什么意思?
  • 奥普斯。我的意思是你应该使用 DBMS_STATS 包来收集统计数据,而不是 ANALYZE。不推荐使用 ANALYZE 命令进行统计数据收集
  • 我使用了 DBMS_STATS 包,但它没有帮助,所以之后使用了 Analyzed。
猜你喜欢
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 2015-07-19
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多