
存储过程EXECUTE IMMEDIATE V_SQL执行很慢或出不来,如果把V_SQL语句拿出来单独执行很快,这是为什么?
存储过程EXECUTEIMMEDIATEV_SQL执行很慢或出不来,如果把V_SQL语句拿出来单独执行很快,这是为什么?高手帮忙看下,谢谢...
存储过程EXECUTE IMMEDIATE V_SQL执行很慢或出不来,如果把V_SQL语句拿出来单独执行很快,这是为什么?高手帮忙看下,谢谢
展开
1个回答
展开全部
这个可能的原因有很多;
首先,execute immediate v_sql语句需要硬解析,这是一个较为耗时的过程,而直接拿出来执行的语句,其查询分析树已经存在,所以只需要软解析。
另外,execute immediate语句由于是硬解析,所以每次出来的计划都有可能不同,这是最需要注意的,可以为两种执行方法设置10046跟踪,看一下每种方法的耗时点,以及执行计划的异同。
以下配置可以在plsql developer的命令窗口中执行,也可以在sqlplus中执行;
sql> alter session set events '10046 trace name context forever,level 8';
sql > execute immediate v_sql;
sql> v_sql;
sql> alter session set events '10046 trace name context off';
完成上述操作后登录到数据库服务器上,在cmd(windows)或者 shell(unix)环境下执行
$ tkprof tracefile.trc tracefile.txt sys=no
首先,execute immediate v_sql语句需要硬解析,这是一个较为耗时的过程,而直接拿出来执行的语句,其查询分析树已经存在,所以只需要软解析。
另外,execute immediate语句由于是硬解析,所以每次出来的计划都有可能不同,这是最需要注意的,可以为两种执行方法设置10046跟踪,看一下每种方法的耗时点,以及执行计划的异同。
以下配置可以在plsql developer的命令窗口中执行,也可以在sqlplus中执行;
sql> alter session set events '10046 trace name context forever,level 8';
sql > execute immediate v_sql;
sql> v_sql;
sql> alter session set events '10046 trace name context off';
完成上述操作后登录到数据库服务器上,在cmd(windows)或者 shell(unix)环境下执行
$ tkprof tracefile.trc tracefile.txt sys=no
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询