2024.3.1
某模块excel批量导入数据进行处理,没有限制行数,导致生成的 select 有1万多个绑定变量,Oracle 解析该 select 一直没完成,阻塞了该表其他 SQL 的解析(当时生产被阻塞的是一个高频 insert)。
该SQL大致如下,in 列表是根据导入数据动态生成的:
select count(*) from t_table t where (t.col1, t.col2, t.col3) in (
(:1, :2, :3),
(:4, :5, :6)
)
DBA提示:
1、Oracle 19C in 列表超过1000会报错,11G不会报错(我们用的是 11G)。
2、太长的 SQL 解析时可能会遇到一些内存争用。
3、DBA还提示,该 sql 效率不高,in 列表每增加一个值,执行计划就相当于多一次范围扫描,执行计划会很长。