我正在使用PL SQL过程将数据从4台服务器聚合到一个位置,并且它在其中一台服务器上的性能明显较低。 我有一个相对简单的查询,可以汇总审核日志中的数据:
索引还可以,第四台服务器上的行量更大,但不会造成这种差异,相同的硬件,相同的linux,相同的oracle版本(Oracle 11.2.0.4.0),表和索引的相同结构。索引可用,相同的分区。
INSERT INTO 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_collection
和last_event
变量在此过程之前进行了初始化。
该代码在4台服务器中的3台服务器上运行一两分钟,在第四台服务器上运行半小时。
经过长期调查,我发现我使用的变量是TIMESTAMPS,而event_datetime列是date。如果我使用日期,它就像一种魅力。我的问题是-是什么导致此方法与众不同?