说明:本文为STS(SQL Tuning Set)使用参考手册
用途:本文仅供初学者熟悉了解SQL Tuning Set或优化参考
标签:SQL Tuning Set、STS、STS使用方法、Oracle优化、SQL调优、STS架构图
温馨提示:如果您发现本文哪里写的有问题或者有更好的写法请留言或私信我进行修改优化
高级内容:由于篇幅原因,部分高级内容和详情没有在此展现,如有需要可以留言或私信
★ 相关文章(※ STS的5种输入源)
①Cursor Cache
②AWR(Automatic Workload Repository)
③SQL Trace
④SQLPA(SQL Performance Analyzer Task)
⑤STS(SQL Tuning Set)
★ 知识点
※ 名词解释:SQL调优集(STS)是一个数据库对象,可以用作调优工具的输入。
※ STS包括以下组件:
①一组SQL语句
②关联的执行上下文,例如用户架构,应用程序模块名称和操作,绑定值列表以及游标的 SQL编译环境
③相关的基本执行统计信息,例如经过时间,CPU时间,缓冲区获取,磁盘读取,已处理的行,游标提取,执行次数,完整执行次数,优化器成本和命令类型
④每个SQL语句的关联执行计划和行源统计信息(可选)
★ STS架构图
★ 输入源B【Automatic Workload Repository】 → dbms_sqltune.select_workload_repository
※ 温馨提示以下所有操作均在scott用户下执行(请临时给scott授予DBA角色)
※ 温馨提示:STS以AWR为输入源时有2种重载方式
①【重载】【AWR基线】【略】
②【重载】【AWR快照】【常用】
--创建AWR快照A(需要在CDB中执行)
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
--模拟交易
--如果AWR中没有记录的话多执行几次即可
sqlplus scott/tiger
select /*+ monitor */ * from scott.emp;
select /*+ monitor */ * from scott.dept;
select /*+ monitor */ * from scott.salgrade;
--创建AWR快照B(需要在CDB中执行)
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
--删除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;
--查看AWR快照
select to_char(s.end_interval_time,'YYYY-MM-DD hh24:mi:ss') sj,s.* from DBA_HIST_SNAPSHOT s order by s.end_interval_time;
--加载符合条件的SQL到STS
--从18C开始STS系统包发生了变化DBMS_SQLTUNE→DBMS_SQLSET
DECLARE
zzt_cur_sqlarea DBMS_SQLTUNE.SQLSET_CURSOR; --定义游标参数
--zzt_cur_sqlarea sys_refcursor; --也可以直接使用系统游标
BEGIN
OPEN zzt_cur_sqlarea FOR --将符合条件的SQL加载到游标中,然后放入STS
SELECT VALUE(p)
FROM TABLE(DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(begin_snap => 92,
end_snap => 93,
basic_filter => 'parsing_schema_name = ''SCOTT''',
object_filter => NULL,
ranking_measure1 => 'elapsed_time',
ranking_measure2 => 'cpu_time',
result_percentage => 1,
result_limit => 10,
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 /*+ monitor */ * from scott.%'
order by FORCE_MATCHING_SIGNATURE;
--输出样例
SQL_ID FORCE_MATCHING_SIGNATURE SQL_TEXT OBJECT_LIST BIND_DATA PARSING_SCHEMA_NAME MODULE ACTION ELAPSED_TIME CPU_TIME BUFFER_GETS DISK_READS DIRECT_WRITES ROWS_PROCESSED FETCHES EXECUTIONS END_OF_FETCH_COUNT OPTIMIZER_COST OPTIMIZER_ENV PRIORITY COMMAND_TYPE FIRST_LOAD_TIME STAT_PERIOD ACTIVE_STAT_PERIOD OTHER PLAN_HASH_VALUE SQL_PLAN BIND_LIST CON_DBID LAST_EXEC_START_TIME
------------- ------------------------ -------------------------------------------------------------------------------- ----------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ------------ ---------- ----------- ---------- ------------- -------------- ---------- ---------- ------------------ -------------- -------------------------------------------------------------------------------- ---------- ------------ ------------------- ----------- ------------------ -------------------------------------------------------------------------------- --------------- -------- --------- ---------- --------------------
49651cfuu8pch 5.76444384455313E18 select /*+ monitor */ * from scott.dept
※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~
over