进一步定位,发现都有千丝万缕的关键,那就是其中一个存储过程调用,会调用里面的一些SQL语句。 最终发现SQL语句是这样的形式 SQL_FULLTEXT ---------------------------------------------------------------------------------------------------- UPDATE TESTINFO A SET A.MAX_LEVEL = NVL((SELECT USER_CLASS FROM ROLE_CLASS_INFO B WHERE A.GROUPID = B.GROUP_ID AND B.CN_GUID = A.ROLE_GUID), A.MAX_LEVEL) WHERE DRAWED = "Y"
按照过滤条件,数据量2亿,过滤得到4千万,都不是小数目,所以全表看来也是一种方案。 SQL> select DRAWED,count(*)from test.testinfo group by DRAWED; D COUNT(*) - ---------- Y 43807108 N 216762221 Elapsed: 00:00:36.17 但是显然这里还是存在一些需要确认的地方,这个语句本该不需运行,至少不应该在统计层面来保证数据的业务逻辑一致性,应该在OLTP系统中就应该保证,所以我的努力方向就是取消这个JOB,这种优化才是最有效的。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址