Oracle 优化篇+SAA(SQL Access Advisor)用法
发布日期:2021-06-29 12:02:16
浏览次数:2
分类:技术文章
本文共 5647 字,大约阅读时间需要 18 分钟。
说明:本文为SAA(SQL Access Advisor)使用参考手册 用途:本文仅供初学者熟悉了解SQL Access Advisor或优化参考 标签:SQL Access Advisor、SAA、SAA使用方法、Oracle优化、SQL调优、SAA流程图 温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化 高级内容:由于篇幅原因,部分高级内容和详情没有在此展现,如有需要可以留言或私信
★知识点
※ SQL Access Advisor是伴随着10G出现的一个优化工具,提供对表分区,物化视图,索引,物化视图日志优化建议 ※ 查看advisor的默认参数:select * from dba_advisor_def_parameters order by 2;★ SAA流程图
★ STS作为输入源
--本文选取了STS的输入源类型之A【Cursor Cache】 → dbms_sqltune.select_cursor_cache --模拟DML操作产生CURSOR_CACHE sqlplus scott/tiger set line 170 set pages 200 select count(*) from scott.emp where sal>3000; --删除SAA exec dbms_advisor.delete_task('ZZT_SQL_ACCESS_TASK'); exec dbms_advisor.delete_sts_ref('ZZT_SQL_ACCESS_TASK','SCOTT','ZZT_SQL_TUNING_SET'); --删除STS BEGIN DBMS_SQLTUNE.DROP_SQLSET(sqlset_name => 'ZZT_SQL_TUNING_SET', sqlset_owner => 'SCOTT'); END; / --创建STS BEGIN DBMS_SQLTUNE.CREATE_SQLSET( sqlset_name => 'ZZT_SQL_TUNING_SET', sqlset_owner => 'SCOTT', description => 'test'); END; / --查看STS select * from dba_sqlset; --加载符合条件的SQL到STS--从18C开始STS系统包发生了变化DBMS_SQLTUNE→DBMS_SQLSETDECLARE zzt_cur_sqlarea DBMS_SQLTUNE.SQLSET_CURSOR; --定义游标参数 --zzt_cur_sqlarea sys_refcursor; --也可以直接使用系统游标BEGIN OPEN zzt_cur_sqlarea FOR SELECT VALUE(p) FROM TABLE(DBMS_SQLTUNE.SELECT_CURSOR_CACHE(basic_filter => 'parsing_schema_name = ''SCOTT''', attribute_list => 'all')) p; -- load the tuning set DBMS_SQLTUNE.LOAD_SQLSET(sqlset_name => 'ZZT_SQL_TUNING_SET', populate_cursor => zzt_cur_sqlarea, sqlset_owner => 'SCOTT', load_option => 'INSERT', update_option => 'REPLACE', update_condition => 'new.executions >= old.executions', update_attributes => 'ALL', ignore_null => TRUE, commit_rows => NULL);END;/--读取最新的STS详情 --COLUMN SQL_TEXT FORMAT a30 --COLUMN SCH FORMAT a3 --COLUMN ELAPSED FORMAT 999999999 SELECT * FROM TABLE(DBMS_SQLTUNE.SELECT_SQLSET(sqlset_name => 'ZZT_SQL_TUNING_SET', sqlset_owner => 'SCOTT')) where lower(SQL_TEXT) like 'select count(*) from scott%' order by FORCE_MATCHING_SIGNATURE;
--SAA
--删除旧任务 exec dbms_advisor.delete_task('ZZT_SQL_ACCESS_TASK'); exec dbms_advisor.delete_sts_ref('ZZT_SQL_ACCESS_TASK','SCOTT','ZZT_SQL_TUNING_SET'); -- Examples of Using SQL Access Advisorvariable zzt_saa_task_name VARCHAR2(50) ;variable zzt_saa_task_desc VARCHAR2(128);variable zzt_saa_wkld_name VARCHAR2(50) ;execute :zzt_saa_task_name := 'ZZT_SQL_ACCESS_TASK';execute :zzt_saa_task_desc := 'ZZT SQL Access Task';execute :zzt_saa_wkld_name := 'ZZT_SQL_TUNING_SET' ;DECLARE--此处使用绑定变量,也可以使用常规变量BEGIN -- create a sql access advisor task. DBMS_ADVISOR.create_task(advisor_name => DBMS_ADVISOR.sqlaccess_advisor, task_name => :zzt_saa_task_name, task_desc => :zzt_saa_task_desc); -- reset the task. DBMS_ADVISOR.reset_task(task_name => :zzt_saa_task_name); -- Create a link between the SQL tuning set and the task DBMS_ADVISOR.ADD_STS_REF(task_name => :zzt_saa_task_name, sts_owner => 'SCOTT', workload_name => :zzt_saa_wkld_name); -- set saa task parameters dbms_advisor.set_task_parameter(:zzt_saa_task_name, 'execution_type','INDEX_ONLY'); -- Execute the task. DBMS_ADVISOR.execute_task(task_name => :zzt_saa_task_name);END;/
-- 查看SAA建议详情的存储过程show_recm
-- 该存储过程已被修改优化-- 调试时如果有报错,可以执行命令查看详情:show errors;CREATE OR REPLACE PROCEDURE show_recm (in_task_name IN VARCHAR2) IS CURSOR curs IS SELECT DISTINCT action_id, command, attr1, attr2, attr3, attr4 ,dbms_lob.substr(attr5,50) attr5 FROM user_advisor_actions WHERE task_name = in_task_name ORDER BY action_id; v_action number; v_command VARCHAR2(32); v_attr1 VARCHAR2(4000); v_attr2 VARCHAR2(4000); v_attr3 VARCHAR2(4000); v_attr4 VARCHAR2(4000); v_attr5 VARCHAR2(4000);BEGIN OPEN curs; DBMS_OUTPUT.PUT_LINE('========================================='); DBMS_OUTPUT.PUT_LINE('Task_name = ' || in_task_name); LOOP FETCH curs INTO v_action, v_command, v_attr1, v_attr2, v_attr3, v_attr4, v_attr5 ; EXIT when curs%NOTFOUND; DBMS_OUTPUT.PUT_LINE('Action ID: ' || v_action); DBMS_OUTPUT.PUT_LINE('Command : ' || v_command); DBMS_OUTPUT.PUT_LINE('Attr1 (name) : ' || SUBSTR(v_attr1,1,30)); DBMS_OUTPUT.PUT_LINE('Attr2 (tablespace): ' || SUBSTR(v_attr2,1,30)); DBMS_OUTPUT.PUT_LINE('Attr3 (table) : ' || SUBSTR(v_attr3,1,30)); DBMS_OUTPUT.PUT_LINE('Attr4 (type) : ' || v_attr4); DBMS_OUTPUT.PUT_LINE('Attr5 (columns) : ' || v_attr5); DBMS_OUTPUT.PUT_LINE('----------------------------------------'); END LOOP; CLOSE curs; DBMS_OUTPUT.PUT_LINE('=========END RECOMMENDATIONS============');END show_recm;/-- 查看SAA建议 -- SEE WHAT THE ACTIONS ARE USING SAMPLE PROCEDURE. SET SERVEROUTPUT ON SIZE 99999 set long 999999 set pages 200 set line 170 EXECUTE SHOW_RECM('ZZT_SQL_ACCESS_TASK'); --输出样例
SQL> EXECUTE SHOW_RECM('ZZT_SQL_ACCESS_TASK');=========================================Task_name = ZZT_SQL_ACCESS_TASKAction ID: 1Command : CREATE INDEXAttr1 (name) : "SCOTT"."ZZT_IDX$$_0000"Attr2 (tablespace): "USERS"Attr3 (table) : "SCOTT"."EMP"Attr4 (type) : BTREEAttr5 (columns) : ("SAL")----------------------------------------=========END RECOMMENDATIONS============PL/SQL 过程已成功完成。
★ 参考文档
※ ※ ※※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~
over
转载地址:https://blog.csdn.net/zzt_2009/article/details/107517194 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月20日 16时16分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Unity之C#学习笔记(0):环境配置与上手 HelloWorld
2019-04-29
高并发高可用秒杀系统(一)
2019-04-29
php如何将base64数据流文件转换为图片文件?
2019-04-29
JavaScript 的addEventListener() 事件监听详解!
2019-04-29
JavaScript的DOMContentLoaded事件和load的区别?
2019-04-29
PHP+JavaScript实现图片预览上传功能开发!
2019-04-29
JSONView - Chrome插件安装详解!(谷歌浏览器插件)!
2019-04-29
上传图片到阿里云OSS和获取上传图片的url的详解 !
2019-04-29
webstorm 和 phpstorm 有什么区别呢?做 WEB 开发用哪个好?
2019-04-29
常见位运算
2019-04-29
武大学生用python敲出樱花开放 | 附源码
2019-04-29
【中文教程】简单粗暴入门TensorFlow 2.0 | 北大学霸出品
2019-04-29
经典面试题:如何保证缓存与数据库的双写一致性?
2019-04-29
一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文
2019-04-29
硬货 | Redis 性能问题分析
2019-04-29
Kafka为什么这么快?
2019-04-29
灵魂四连问:API 接口应该如何设计?如何保证安全?如何签名?如何防重?
2019-04-29
一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
2019-04-29
酸爽!IDEA 中这么玩 MyBatis,让编码速度飞起!
2019-04-29
已拿 Offer!字节跳动面试经验分享
2019-04-29