今天开发告诉我,有个DELETE操作运行了12个小时以后还没结果
一看正在遭遇LATCH等待,98 cache buffers chains
很郁闷,把DELETE换成SELECT,为秒级别的相应
分析后,没有热块(整个数据库只有该SESSION在等待latch free),没有大量的逻辑读(通过SELECT语句)
这个SQL大概为
delete FROM A
WHERE A.COL1 < XXXXX
AND A.COL1 > XXXXX
AND EXISTS (
SELECT 1 FROM B,C
WHERE B.COL1 = C.COL1
AND B.COL2 = A.COL2
)
如果去除C表条件,秒级相应。
比对DELETE和SELECT的执行计划,发现DELETE语句的执行计划有问题,在一个根本不相关的索引上做全扫描
查了下索引,在B表的COL2上尽然没索引。加了个索引,执行计划变了,查询变为秒级
状况很奇怪,感觉是BUG,今天比较忙,明天继续研究下
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-588744/ ,如需转载,请注明出处,否则将追究法律责任。