暂无图片
分享
你好我是李白
2019-10-11
一条SQL在测试库执行很快在生产库执行时间超过30分钟疑问
暂无图片 5M
  1. 问题描述

    (1)在业务之前,在测试库进行测试,同样sql,跑完整个批量任务大约几十分钟,而在上线前跑批,发现有一条SQL跑的时间特别长,最后整个业务下来用了七个多小时。

    (2)通过对操作系统(CentOS 6.5)以及对数据库性能分析并没有发现CPU高,内存不够情况,IO慢一点,是因为设备不太给力,这个可以接受,但是下面SQL逻辑读超高。

  2. 疑问

    下面有执行计划以及awr部分统计,平均负载较低数据库。

    由于不是很擅长SQL,所以对此SQL执行计划并不是很理解,为什么cost很低,执行时间在生产库会这么长?逻辑读会这么高呢

  3. 下面为执行时间特别长sql在特别慢期间执行计划,来源于awr

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------
SQL_ID dm9z6htt1w2pk
--------------------
update zggrzhye y set y.zggrzhye_fzjgbh = (select g.zggrjh_fzjgbh from
zggrjh g where y.zggrzhye_grjhbh = g.zggrjh_grjhbh) where exists
(select 'x' from TMP_ZGSGJY q where y.zggrzhye_grjhbh =
q.ZGSGJY_GRJHBH) and y.zggrzhye_fzjgbh is null and y.zggrzhye_qyjhbh
like 'P10004%'

Plan hash value: 2684736286

--------------------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name                         | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT              |                              |       |       |     6 (100)|          |
|   1 |  UPDATE                       | ZGGRZHYE                     |       |       |            |          |
|   2 |   NESTED LOOPS                |                              |     1 |    72 |     3  (34)| 00:00:01 |
|   3 |    NESTED LOOPS               |                              |     1 |    72 |     3  (34)| 00:00:01 |
|   4 |     SORT UNIQUE               |                              |     1 |    18 |     0   (0)|          |
|   5 |      INDEX FULL SCAN          | PK_TMPZGSGJY                 |     1 |    18 |     0   (0)|          |
|   6 |     INDEX RANGE SCAN          | INDEX_ZGGRZHYE_QYJHBH_TZZHBH |     1 |       |     1   (0)| 00:00:01 |
|   7 |    TABLE ACCESS BY INDEX ROWID| ZGGRZHYE                     |     1 |    54 |     2   (0)| 00:00:01 |
|   8 |   TABLE ACCESS BY INDEX ROWID | ZGGRJH                       |     1 |    26 |     2   (0)| 00:00:01 |
|   9 |    INDEX UNIQUE SCAN          | PK_ZGGRJH                    |     1 |       |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------------------

3. awr该SQL情况


4.AWR中逻辑读


收藏
分享
8条回答
默认
最新
你好我是李白
暂无图片 评论
暂无图片 有用 0
杨德龙

更新的数据太多,可能再更新的过程中,有锁出现。 

暂无图片 评论
暂无图片 有用 0
章芋文

cost低的原因应该是统计信息未收集,可以手工收集下统计信息。

另外,生产环境和测试环境的数据大概差多少?

暂无图片 评论
暂无图片 有用 0
你好我是李白

谢谢啦,这个倒是有可能。

暂无图片 评论
暂无图片 有用 0
你好我是李白

生产这个用户下所有的数据导出也就700M,测试导出大概有400M左右,单表具体数值由于目前没法连库,没法具体确认,但是单表总数据量都不是特别大。

暂无图片 评论
暂无图片 有用 0
章芋文

从AWR看,锁倒是没出现。只有几个日志切换等待,可以观察考虑加大下日志大小和个数。

暂无图片 评论
暂无图片 有用 0
你好我是李白

其实在执行过程中,会话有间断出现过latch: cache buffer chains

暂无图片 评论
暂无图片 有用 0
你好我是李白
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏