我们有一个非常复杂的视图,它只在第一次执行时完成,但是当第二次从同一会话运行时就会隐藏起来。
complex视图-视图具有嵌套的视图、大量的内部和外部连接、多个联合等等。但没有锁定语句,只有纯读。
$ sqlplus sys/system as sysdba;
SQL> SELECT * FROM v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> alter session set current_schema = DB_2017_2018;
SQL> alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';
SQL> select 1 from complex_view where company_id = 1 and invoice_month = 1 and invoice_year = 2018;
-- runs in 33 sec
SQL> select 1 from complex_view where company_id = 1 and invoice_month = 1 and invoice_year = 2018;
-- hangs up.. Ctrl + C after 3 minutes
SQL> select * from complex_view where company_id = 1 and invoice_month = 1 and invoice_year = 2018;
-- runs in 1m 30 sec
SQL> select * from complex_view where company_id = 1 and invoice_month = 1 and invoice_year = 2018;
-- hangs up.. Ctrl + C after 5 - 10 minutes
-- ALL THESE COMMANDS / QUERIES RUN IN SAME SESSION
我认为第二次运行完全相同的查询是问题发生的时候。如果我只是更改了任何select列或where条件,那么它将第一次运行并从第二次挂断(请参阅上面的命令)。
Suspect 1
我怀疑其中一件事可能与甲骨文的缓存有关。因此,当我在每次执行查询之前运行以下命令时,我没有被任何查询挂起。
SQL> alter system flush shared_pool;
SQL> alter system flush buffer_cache;
Suspect 2(根本原因可能是怀疑1)
一旦任何查询挂断,即使我在另一个会话中运行相同的查询,它仍然挂起。因此,如果我关闭运行挂起查询的活动会话,那么我只能第一次成功地运行该查询,但在第二次运行时仍然会遇到相同的问题。
SQL> ALTER SYSTEM KILL SESSION '12,256' IMMEDIATE;
AFAIK,我唯一能确定的是,在我们的版本中,甲骨文的buffer_cache
和shared_pool
出现了严重问题。
这个问题并不发生在表或简单视图中,只发生在这个复杂视图中(没有测试其他复杂视图)。而且,在过去的2-3周里,我们还面临着这种奇怪的问题。它是托管在云(AWS EC2)的,所以它可能与亚马逊的幽灵/熔毁补丁有关,因为这是在过去的2到3周内发生的变化(不相关?!)或者可能是由于在此期间达到的某些db数据阈值级别。
准备好提供任何其他分析或指标。
发布于 2018-02-02 15:17:45
这在11.2上是很典型的,因为有一个叫做“基数反馈”的特性。检查慢速运行的执行计划,如果在执行计划的Notes部分看到“基数反馈”,请尝试设置以下参数:alter session set "_optimizer_use_feedback"=false;
,然后再次运行测试。
与此相关的一些bug:
Bug 12557401 -基数反馈导致的第二次执行的次优计划(Doc ID 12557401.8)
-基数反馈产生糟糕的后续计划16837274错误(医生ID 16837274.8)
https://dba.stackexchange.com/questions/196887
复制相似问题