千家信息网

ORACLE 11G 使用SPM来调整SQL语句的执行过程

发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,这篇文章将为大家详细讲解有关ORACLE 11G 使用SPM来调整SQL语句的执行过程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。跟大家说明一下:I
千家信息网最后更新 2024年10月11日ORACLE 11G 使用SPM来调整SQL语句的执行过程

这篇文章将为大家详细讲解有关ORACLE 11G 使用SPM来调整SQL语句的执行过程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

跟大家说明一下:
ITSM 数据库迁移升级到11G后,有几条SQL语句的执行计划不正确,而且这些语句都是使用绑定变量的。
最初的调整想法是获得这些的语句的绑定变量值,将获得的字面值直接替换SQL语句的绑定变量,调整该SQL到正确的执行计划后执行,取得正确的执行计划并导入SPM。然而实际调整时发现,使用字面量获得的执行计划虽然可以正常导入到SPM,但是无法被相应的SQL语句使用,SQL语句仍然使用错误的计划执行查询。后面调整时,与实际生产时使用SQL语句方式一致,使用绑定变量的方式来执行调整后SQL语句,然后将获得计划导入SPM,发现语句可以使用SPM中的正确计划了。

ORACLE 11G 使用SPM来调整SQL语句的执行


1)获得执行计划错误的SQL语句的SQL_ID,并当前将坏的执行计划装载到SPM里:
variable cnt number;
execute :cnt :=DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID => '&SQL_ID', PLAN_HASH_VALUE => &HASH_VALUE) ;
检查SPM,确认相关的SQL计划已经被装载到SPM。LOAD进来的一般是最新的:
select SQL_HANDLE, PLAN_NAME, ENABLED, ACCEPTED, SQL_TEXT from dba_SQL_PLAN_BASELINES where ACCEPTED = 'YES'
order by LAST_MODIFIED;
SQL_HANDLE PLAN_NAME
-------------------------------------------------------------
SQL_4079a044d6e19677 SQL_PLAN_40yd08mbfffddfdw555d8

2)调整SQL语句,如增加新的hint,确认获得好的正确的执行计划。执行一下调整后的语句,取得SQL_ID和Plan hash value:
select sql_id,plan_hash_value from v$sql where sql_text like '%/*+ test2-nbh INDEX(demand_state_alias%';

注意:对于绑定变量的SQL,最好也使用绑定变量的方式来获得正确的执行计划,如果使用字面量,执行计划虽然被装载,但可能无法被SQL语句使用。同时可以在SQL语句增加一些特别的提示,以容易获得修改后的语句,如上面的查询增加test2-nbh这样一个标识。

3)将正确的执行计划装载到SPM,准备用来替换错误的执行计划:
variable cnt number ;
exec :cnt :=dbms_spm.LOAD_PLANS_FROM_CURSOR_CACHE (SQL_ID => '&SQL_ID',PLAN_HASH_VALUE => &plan_hash_value,SQL_HANDLE => '&SQL_HANDLE' ) ;
SQL_ID: dzfky5zdzc231 -这个从步骤2中查询获得
Plan hash value: 751013780 -这个从步骤2中查询获得
SQL_HANDLE
SQL_4079a044d6e19677 --这个sql_handle是步骤1生成来的sql_handle

4)验证SPM执行计划是否正确
select * from dba_sql_plan_baselines where CREATED>sysdate-1/48 order by created;
--SQL_HANDLE为SQL_4079a044d6e19677的SPM记录有两个,可以通过时间的先后顺序来确定哪一个是
好的执行计划,也可以通过以下方 式:
select * from
table(dbms_xplan.DISPLAY_SQL_PLAN_BASELINE('&sql_handle','&PLAN_NAME');
--这里的sql_handle和PLAN_NAME来自步骤1生成的

5)验证了那个是错误的执行计划之后,将坏的执行计划从SPM里边删除
variable cnt number ;
exec :cnt :=dbms_spm.DROP_SQL_PLAN_BASELINE(SQL_HANDLE=> '&SQL_HANDLE', PLAN_NAME=> '&PLAN_NAME')

5)重新执行语句

6)检查语句执行计划是否正常
select
EXECUTIONS,PLAN_HASH_VALUE,ELAPSED_TIME/1000000,ELAPSED_TIME/1000000/EXECUTIONS,LAST_ACTIVE_TIME,ROWS_PROCESSED
from v$sql where EXECUTIONS>0 and sql_id='&sql'; select * from table(dbms_xplan.display_cursor('&sql'));

关于ORACLE 11G 使用SPM来调整SQL语句的执行过程就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

语句 调整 变量 步骤 错误 查询 装载 方式 过程 内容 可以通过 字面 实际 文章 更多 知识 篇文章 检查 生成 验证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 世界各国服务器出口 网络安全工程师证 中级 网络安全宣传片第五空间 软件开发面经牛客 打电话时提示无法连接到服务器 烟草网络安全宣传周总结 网络安全认证考试成绩查询 为什么使用arm架构服务器 服务器cpu频率降到几百 公共场所网络安全要求 网络安全专业研究生毕业待遇 服务器硬盘如何测试好坏 5g网络安全问题解读 广东省互联网协会 全球未来科技 杭州学习软件开发哪家服务好 软件开发公司名称南宁 厕所视频软件开发 苏州网络安全教育 宝塔数据库主机 软件开发android框架 服务器文件夹账号管理 游戏软件开发展 就业前景 网络技术工具不好用原因 软件开发就是在坑人 深入linux网络技术交流 浦东新区正规软件开发销售方法 向服务器传送大文件用什么请求 最近新出的网络安全法律 数据库怎么找用户密码 平板电脑打开软件显示服务器异常
0