首页 > 解决方案 > Oracle 中第一次执行查询很慢

问题描述

Oracle 18c中数据仓库DB中查询的第一次执行时间为两分钟,但如果在第一次执行几秒后取消查询并重新运行查询,执行查询只需3秒,所以我想知道当我第一次取消查询导致第二次执行非常快时会发生什么。

查询的第一次和第二次执行的执行计划完全一样,所有的统计都是最新的,没有任何过时的统计,下面是执行计划。

在此处输入图像描述

以下是优化器参数

memoptimize_pool_size   0
inmemory_optimized_arithmetic   DISABLE
plsql_optimize_level        2
optimizer_features_enable   12.1.0.2
optimizer_mode              ALL_ROWS
optimizer_index_cost_adj    100
optimizer_index_caching     0
optimizer_dynamic_sampling  0
optimizer_ignore_hints      FALSE
optimizer_secure_view_merging       TRUE
optimizer_use_pending_statistics    FALSE
optimizer_capture_sql_plan_baselines    FALSE
optimizer_use_sql_plan_baselines    TRUE
optimizer_use_invisible_indexes     FALSE
optimizer_adaptive_reporting_only   FALSE
optimizer_adaptive_plans            TRUE
optimizer_inmemory_aware            TRUE
optimizer_adaptive_statistics       FALSE

我应该更改上面列表中任何参数的值来解决首次执行时间的性能问题吗?例如增加 optimizer_dynamic_sampling

标签: oracleoracle-sqldeveloperquery-optimization

解决方案


Oracle 数据库使用缓存内存来存储查询结果,取消查询执行与它无关。

Oracle 数据库使用缓冲区缓存来存储从磁盘读取的数据块。另一方面,结果缓存是 Oracle 11g 中的一个新特性,它正如其名称所暗示的那样,它缓存查询结果并将它们放入共享池的一个切片中。

第一次执行查询时,如果没有缓存数据,Oracle DB 会从磁盘中获取块,然后将它们缓存在缓冲池中,下次执行相同查询时,只需从缓冲池中获取块。


推荐阅读