读书人

Oracle数据库的SQL性能有关问题分析

发布时间: 2013-01-05 15:20:40 作者: rapoo

Oracle数据库的SQL性能问题分析

在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢,超过数分钟无结果,等待事件又是空闲的SQL*Net message事件,最后只好强行中断。
这个SQL是一个普通的UPDATE语句,where子句中多张表关联,关联的表都是临时表。

Rows     Row Source Operation-------  ---------------------------------------------------      0  UPDATE  T_FUND_PRODUCT_INFO (cr=207 pr=0 pw=0 time=10225 us)      0   HASH JOIN ANTI (cr=207 pr=0 pw=0 time=10223 us)    875    TABLE ACCESS FULL T_FUND_PRODUCT_INFO (cr=16 pr=0 pw=0 time=7102 us)    912    VIEW  VW_NSO_1 (cr=191 pr=0 pw=0 time=7175 us)    912     HASH JOIN  (cr=191 pr=0 pw=0 time=6260 us)   1351      HASH JOIN  (cr=130 pr=0 pw=0 time=4500 us)   1595       TABLE ACCESS FULL TMP_CRM_DX_PRDT_FOR_INFO (cr=107 pr=0 pw=0 time=28 us)   2149       TABLE ACCESS FULL TMP_CRM_PRDT_CATA_FOR_INFO (cr=23 pr=0 pw=0 time=21 us)   1032      TABLE ACCESS FULL TMP_CRM_PRDT_CHANNEL (cr=61 pr=0 pw=0 time=30 us)

?
在分析前和分析后,无主键和有主键情况下,执行计划其实是一致的。但是没有主键,没有分析的情况下就是慢,慢到执行不出结果。

虽然问题解决了,但是我还是有疑问。
为什么在没有分析没有主键时,怎么执行都是很慢?
为什么在没有分析但有主键,执行就很快,执行计划采用了哈希反连接?
为什么在各个表分析以后,不管有没有主键,执行能成功了?
难道是在没有分析情况下,SQL生成执行计划很消耗时间?可是等待事件却又是空闲?
我怀疑,这会不会是网络异常中断导致的?因为这个网络设置是这样,在一定时间内,客户端和数据库服务器没有交互,它们之间的网络连接就会中断。

?

读书人网 >其他数据库

热点推荐