sql - 什么会导致 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_collection
。last_event
此代码在 4 台服务器中的 3 台上运行一两分钟,在第四台服务器上运行半小时。
经过长时间的调查,我发现我使用的变量是 TIMESTAMPS,而 event_datetime 列是日期。如果我使用日期,它就像一个魅力。我的问题是 - 是什么导致它的工作方式不同?
解决方案
推荐阅读
- python - Python Sudoku - 二维数组评分函数
- c# - 遍历列表
> - javascript - 如何像我们有一个 devtool 一样在 iframe 中进行网络限制
- windows - 使用 ETW 的 Windows 系统调用跟踪 - DesiredAccess 的值
- node.js - 类型错误:socket.listen 不是函数
- flutter - Flutter 中的通用 CRUD Http 函数
- javascript - angualr 10 中的 iframe-resizer 实现(使用 loader.js 动态添加 iframe)
- javascript - 在没有 fs 的情况下保存到 JSON?
- angular - Angular mat-form-field 在标签之间添加空格
- python - 从 OrderedDict 中移除 {}