发布网友 发布时间:2022-04-11 23:49
共4个回答
懂视网 时间:2022-04-12 04:10
临近年底,事情特别多,用户都把平时的问题积累到年底解决,导致了本人没到年底都是焦头烂额。前几天,一个用户现场着急打电话找到,说一个过程跑了好久也不跑不完。。。我问:手工执行呢?他说:手工执行也不出结果。有点纳闷儿,但因为不能连接他们的库,
临近年底,事情特别多,用户都把平时的问题积累到年底解决,导致了本人没到年底都是焦头烂额。前几天,一个用户现场着急打电话找到,说一个过程跑了好久也不跑不完。。。我问:手工执行呢?他说:手工执行也不出结果。有点纳闷儿,但因为不能连接他们的库,所以,也是不知道具体怎么回事儿。于是就让他们通过系统视图v$session和v$sql等,获取了该过程被卡住的语句,大概如下:
又了解了这些表的数据量情况,除了T1仅有几千条数据,其他都是分区表,每张表数据量都上亿条记录。于是,让他们获取了执行计划,如下:
看了下该计划,没发现明显的问题。难道因为变量的传入导致了执行计划的改变?带着疑问,让他们又通过v$sql_plan视图获取了该SQL的执行计划,大概如下:
哈哈,看到上面的计划,真相大白,现在的数据库真是的,也学会了瞒天过海的招数,锁定原因就好办,原语句修改如下:
这下应该没问题了,测试一下,不到1s出结果,修改过程后,运行过程,2s跑完,问题成功解决。
热心网友 时间:2022-04-12 01:18
sql是高级语言,数据库系统执行sql之前要将sql语句进行解析(相当于编译),这个过程叫硬解析;数据库系统每次执行sql之前都会检查共享池中是不是存在已经解析过的语句,如果有就拿来直接用,这叫软结息。软解析比硬解析效率高,这是影响因素之一;热心网友 时间:2022-04-12 02:36
因为第二次有缓存了。追问有缓存这个我知道的,但是有缓存速度会提升这么多吗?因为速度直接提升了10倍有点夸张吧?
热心网友 时间:2022-04-12 04:11
不会呀,时间差距这么大应该不是procere的缓存问题,应该是SQL的问题吧。。。追问我也觉得不是缓存问题,可是SQL没有变啊,我把执行了一次以后修改的内容改回去,重新执行也还是这么快,循环的查询也是每次都应该执行的,没有加什么额外条件 会使后面几次执行就不进行全表扫描追答把SQL提出来执行看看就知道了