Oracle 12c中的查询响应速度慢且执行计划成本高昂

时间:2019-11-12 06:35:12

标签: oracle

在我们的Oracle 12c数据库(在Oracle Supercluster上作为可插拔数据库运行)中极其缓慢(耗时数小时)的查询中需要帮助

select * from (
select userQuery.*,rowNum offset from(
SELECT 
ELEMENT.element_ID
ELEMENT.element_creation_date
ELEMENT.element_identifier, 
ELEMENT.element_status, 
ELEMENT.system_code, 
ea.timestamp_value as TimeLimit, 
ELEMENT.first_ticket 
FROM ELEMENT 
LEFT JOIN element_attribute ea ON ELEMENT.element_ID = ea.entity_instance_id1 AND ea.attribute_id = 72
WHERE 1 = 1 AND ELEMENT.PURGE_DATE > SYSDATE  ORDER BY ELEMENT.element_creation_date DESC) userQuery
 where ROWNUM <=50) where offset >=1;

一些注意事项-

  1. 表ELEMENT和ELEMENT_ATTRIBUTE均基于“ PURGE_DATE”列进行了分区
  2. 两个表的统计信息都是最新的
  3. 两个表的大约30个分区。
  4. 我在'ea.entity_instance_id1','ea.attribute_id'和'element.element_creation_date desc'列上有本地索引
  5. 尽管在'element.element_creation_date desc'上存在索引,Oracle仍希望根据此查询的计划对该表进行全面扫描。

我可以进一步检查的任何内容。我不理解查询本身可以编写得更好(更简单)以获得相同的结果,但是查询是供应商应用程序的一部分,我们无法更改它。在我们的测试环境中,同一个查询具有与生产相同的近似表大小,相同的分区和相同的索引,其工作速度要快得多。测试环境中唯一的不同是ELEMENT和ELEMENT_ATTRIBUTE表上的DML(更新/插入)的数量与生产相比要少得多。谢谢。

0 个答案:

没有答案