首页 > 解决方案 > 什么会导致 SQL equery 在相同的软件和硬件的不同 Oracle 机器上运行显着更长的时间

问题描述

我正在使用 PL SQL 过程将数据从 4 台服务器聚合到一个地方,并且它在其中一台服务器上的性能显着降低。

我有这个相对简单的查询来汇总审计日志中的数据:

索引没问题,第四台服务器上的行量有点大,但不会造成这种差异,相同的硬件,相同的 linux,相同的 oracle 版本(Oracle 11.2.0.4.0),表和索引的结构相同。索引是可用的,相同的分区。

插入 app_stats_agg_hourly (SHIPMENTS,event_datetime,COUNTRY,data_type,event_type,collection_time,INSTANCE)

    SELECT COUNT(*) as SHIPMENTS, TRUNC(event_datetime,'HH24') as event_datetime,COUNTRY,data_type,event_type,load_run_start,v_region
    FROM APP_AUDIT
    WHERE   
            event_type in ('FromApp','ToError','ToApp','Generate','FromCorr')
        and  event_datetime > last_collection
        and  event_datetime <=  last_event

    GROUP BY TRUNC(event_datetime,'HH24'),COUNTRY,data_type,event_type;

它运行良好,完全符合预期。和变量在程序之前被初始化last_collectionlast_event此代码在 4 台服务器中的 3 台上运行一两分钟,在第四台服务器上运行半小时。

经过长时间的调查,我发现我使用的变量是 TIMESTAMPS,而 event_datetime 列是日期。如果我使用日期,它就像一个魅力。我的问题是 - 是什么导致它的工作方式不同?

标签: sqloracleoracle11gconfiguration

解决方案


推荐阅读