一个sql优化的案例
2015-04-25 12:03
232 查看
在BI的测试过程中,同事在plsql developer中跑存储过程的时候,跑了一天没有结果,开发那边20多分钟就出结果,跟我说了后 ,帮他看了下,下面说下问题处理思路:
1是sql本身执行慢还是数据库服务器压力大,竞争太多导致了sql慢
2Plsql中的语句不断的循环调用,有很多的sql在执行,该怎么定位问题?
首先想到的是上面的2个问题,按照上面的2个问题思路去查找原因,首先看系统上的等待事件,都是空闲类的,所以应该不是系统争用导致慢的,
然后查看了下当前执行的sql,发现一个sql执行的时间有2,3分钟,查看这个sql的真实执行计划,发现小表的关联都走了hash join,感觉不对,开发的机器上跑的很快,可能是走的不同的执行计划,查看了下发现这个sql对应了2个游标,查看另一个游标对应的执行计划,发现走的是nest loop,这种的方式是正确的。
到这里找到可能引起效率差距很大的原因。接下来去查找是什么原因导致了产生了2个不同的游标,查看select * from v$sql_shared_cursor where sql_id='dzw4sta4a22av';后发现语言句柄是不同的,都是连接的同一个服务器,语言环境变量设置应该都是一样的,那么不同的就是客户端的设置了,
将同时的客户端NLS_LANGUAGE设置成与开发一致后,再次运行也只要20多分钟。
这个案例不是因为sql本身导致的,而是由于环境变量的问题导致了sql走了错误的执行计划。
1是sql本身执行慢还是数据库服务器压力大,竞争太多导致了sql慢
2Plsql中的语句不断的循环调用,有很多的sql在执行,该怎么定位问题?
首先想到的是上面的2个问题,按照上面的2个问题思路去查找原因,首先看系统上的等待事件,都是空闲类的,所以应该不是系统争用导致慢的,
然后查看了下当前执行的sql,发现一个sql执行的时间有2,3分钟,查看这个sql的真实执行计划,发现小表的关联都走了hash join,感觉不对,开发的机器上跑的很快,可能是走的不同的执行计划,查看了下发现这个sql对应了2个游标,查看另一个游标对应的执行计划,发现走的是nest loop,这种的方式是正确的。
到这里找到可能引起效率差距很大的原因。接下来去查找是什么原因导致了产生了2个不同的游标,查看select * from v$sql_shared_cursor where sql_id='dzw4sta4a22av';后发现语言句柄是不同的,都是连接的同一个服务器,语言环境变量设置应该都是一样的,那么不同的就是客户端的设置了,
将同时的客户端NLS_LANGUAGE设置成与开发一致后,再次运行也只要20多分钟。
这个案例不是因为sql本身导致的,而是由于环境变量的问题导致了sql走了错误的执行计划。
相关文章推荐
- 【SQL优化】四月份培训的一个sql优化案例3
- 一个跨库复杂查询的SQL优化的案例
- oracle sql优化一个案例
- 记一个SQL优化案例
- 【SQL优化】四月份培训的一个sql优化案例1
- 开发交流时给同事们讲解的一个sql优化案例
- 【SQL优化】四月份培训的一个sql优化案例2
- Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
- SQL优化案例(3)
- 数据库性能优化分析案例---解决SQL语句过度消耗CPU问题
- 一个 20 秒 SQL 慢查询优化的经历与处理方案
- SQL优化 · 经典案例 · 索引篇
- 一张表被同一个sql多次调用,使用with as 优化
- 优化案例 | CASE WHEN进行SQL改写优化
- 帮哥们优化一个数据仓库的烂SQL
- 一个执行计划异常变更的案例 - 外传之SQL Profile(下)
- 一个Oracle、DB2、MS SQL Server都有的优化选项
- 一个查询(报表)优化案例
- SQL性能优化案例分析
- SQL优化基础 使用索引(一个小例子)