利用DDL改变执行计划
来源:互联网 发布:北京海量数据 股东 编辑:程序博客网 时间:2024/06/05 14:15
系统和数据变更在凌晨4点升级完成,测试时发现应用中有一条SQL执行异常缓慢。
手工执行SQL后,利用select * from table(dbms_xplan.display)查看执行计划。
发现执行计划和升级前并没有区别。
怀疑是统计信息有问题,跟开发人员沟通了一下。发现有几张表插入了一批数据。
收集统计信息后,重新执行SQL发现执行计划有了改变。
EXEC dbms_stats.gather_table_stats('&owner','&tablename',cascade => TRUE);
但系统上SQL的执行计划依然没有改变,系统依然缓慢。
怎么让系统上的SQL重新解析,使用新的执行计划呢?
1、重启数据库,
2、刷新共享池。
3、重新分析SQL引用的表和索引。
4、在SQL引用的对象(表、视图等)上执行DDL操作。
5、对SQL引用的对象进行了权限更改
6、修改SQL
7、使用outline
生产环境重启数据库,刷新共享池,修改权限风险太大。修改SQL,使用OUTLINE时间太紧.
综合考虑以上几种方法,决定在SQL引用的对象上执行DDL操作,即添加在表的列上添加一个注释。
alter table test_SUPPLIER modify SUPPLIER_NAME default SUPPLIER NAME;
由于在SQL引用的对象上执行了DDL操作,会导致SQL重新解析。
重新执行系统中的查询发现能很快返回结果。
Select * from table(dbms_xplan.display_cursor('95n1023ybm3u8',0));
查看执行计划后,发现执行计划也已经改变。
- 利用DDL改变执行计划
- 利用outline固定执行计划
- 数据量增加导致mysql执行计划改变
- 修改统计信息改变执行计划(ORACLE)
- 几种改变执行计划的方法
- 数据库迁移导致sql 执行计划改变
- 利用AWR 查看SQL 执行计划
- python脚本利用windows计划定时执行
- 从Peeked Binds看DDL和DCL语句对执行计划的影响
- 如何改变oracle的执行计划(HINT)
- 如何使用ordered提示改变SQL执行计划
- Scrips:打印AWR中执行计划的改变awr_plan_change.sql
- where 函数问题引起执行计划改变(复杂视图)
- Oracle 11g 递归+ exists执行计划的改变
- 使用hint改变SQL执行计划的方法
- 执行计划SQL写法差异改变之with子句
- 执行计划SQL写法差异改变之insert all
- 改变计划
- vector 用法总结 (由.at引起)
- Android之音量调节
- SQL*Plus FAQ
- strust2整合liferay6获取请求参数时没有去掉porletname
- Oracle SQL 操作记录 备忘录 持续更新
- 利用DDL改变执行计划
- 第三章线性表之一切从增删改查开始
- C# 程序中如何向(DEV)ComboBoxEdit控件中添加下拉列表的值不使用数据绑定,就是使用代码添加
- 项目经理开门七件事
- nginx1.3.6 的简单配置和启动脚本
- 虚拟机构建mac qt开发环境
- ASP.NET中Bind和Eval的区别:两种绑定
- 调整图像的颜色(ColorMatrixFilter)
- 网页预览 html过滤标签