巡检发现用户临时表空间在08:30左右,上涨50%
1、查看临时表空间变化趋势图
2、找到造成这一问题的sql语句
通过捕获同一时间段的sql语句 ,发现是sql_id为8yquvdakbcjqz 导致的
3、查看执行计划
发现存在笛卡尔积MERGE JOIN CARTESIAN
4、原因分析
笛卡尔积的出现会严重影响执行效率,出现此问题的原因是:
1)两个表的不对等(不属于本次问题)
2)CBO优化器选择错误,统计信息收集不准确
(1)只返回一行数据的表,查看是否需要收集统计信息
select table_name,stale_stats from dba_tab_statistics where table_name
in (‘xx’,‘xx’,‘xx’)
(2)查看USER_GROUP_ID是否为最优选择,发现唯一值并不多,考虑添加hint
生成执行计划较优的sqlprofile,并进行绑定
3)清理shared_pool,重新生成执行计划
(1)查询共享池中的执行计划
select PLAN_HASH_VALUE,sql_profile,sql_id,address,hash_value from gv$sqlarea where sql_id=‘8yquvdakbcjqz’;
PLAN_HASH_VALUE SQL_PROFILE SQL_ID ADDRESS HASH_VALUE
3622554210 8yquvdakbcjqz 00000000DEDA0CE0 2763409119
2)执行命令,将需要清除的执行计划进行清理。
exec sys.dbms_shared_pool.purge(‘00000000DEDA0CE0,2763409119’,‘c’);
3)检查数据库服务器的cpu使用率,并且执行相关脚本跟踪sql执行情况。
5、解决方案
最终采用清理shared_pool,重新生成执行计划的方案优化SQL
查看执行效率发现MERGE JOIN CARTESIAN已经不存在了