一、问题发现:
发现一个数据库语句执行很慢,奇怪的是,仅仅是一个insert 语句。难道一个insert语句要执行3秒钟,这个提起了我的兴趣。把当时的出问题的时段的awr报告打印出来一看发现一条奇怪的sql语句,我至今从来没有遇到过如此长的sql语句。看看它长什么样子:
没有错,你没有看错,就是一条insert语句。这个我还没有截屏完整,好几个屏幕。绑定变量有28000个。第一次见这么长的sql语句,第一见绑定变量如此多的语句。
和开发了解下需求:根据2个表数据,按一定业务逻辑插入到一个临时表,于是,就有上面这个拼接sql。(其实这要在以前,拿我来设计的话,我会直接写成plsql处理,但是现在是互联网微服务,于是,很多都变成微服务了。)
二、问题分析:
insert语句很慢,索引很多是一个原因。分析了下awr,是cursor: pin S wait on X等待事件。这个事件什么意思呢?
A session waits for this event when it is requesting a shared mutex pin and another session is holding an exclusive mutex pin on the same cursor object.
Wait Time: Microseconds
Pa