Oracle深度学习笔记SQL基线Word格式.docx

上传人:b****8 文档编号:22666125 上传时间:2023-02-05 格式:DOCX 页数:24 大小:21.21KB
下载 相关 举报
Oracle深度学习笔记SQL基线Word格式.docx_第1页
第1页 / 共24页
Oracle深度学习笔记SQL基线Word格式.docx_第2页
第2页 / 共24页
Oracle深度学习笔记SQL基线Word格式.docx_第3页
第3页 / 共24页
Oracle深度学习笔记SQL基线Word格式.docx_第4页
第4页 / 共24页
Oracle深度学习笔记SQL基线Word格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Oracle深度学习笔记SQL基线Word格式.docx

《Oracle深度学习笔记SQL基线Word格式.docx》由会员分享,可在线阅读,更多相关《Oracle深度学习笔记SQL基线Word格式.docx(24页珍藏版)》请在冰豆网上搜索。

Oracle深度学习笔记SQL基线Word格式.docx

计划基线由一个或多个已经被接受到的SQL查询执行计划组成。

运行一个查询,且该查询已经存在计划基线,优化器就会优先考虑计划基线中的执行计划。

3.测试

用SQL_ID创建基线

tpcc@TOADDB>

createtabletasselect*fromall_objects;

Tablecreated.

createindext_idxont(object_name);

Indexcreated.

收集统计信息:

execdbms_stats.gather_table_stats(user,'

t'

cascade=>

true);

PL/SQLproceduresuccessfullycompleted.

select/*test_01*/object_id,object_typefromtwhereobject_name='

DUAL'

;

OBJECT_IDOBJECT_TYPE

---------------------------------

142TABLE

143SYNONYM

查找所执行SQL的ID

selectsql_id,sql_textfromv$sqlwheresql_textlike'

select/*test_01*/%'

SQL_ID

-------------

SQL_TEXT

----------------------------------------------------------------------------------------------------

farns9fxz7dum

select/*test_01*/object_id,object_typefromtwhereobject_name='

SQL计划基线的管理,需要拥有administersqlmanagementobject权限。

查看已有基线:

SQL>

selectsql_handle,plan_namefromdba_sql_plan_baselineswheresql_textlike'

norowsselected

使用dbms_spm.load_plans_from_cursor_cache加载sql_id对应的SQL的执行计划。

declare

xpls_integer;

begin

x:

=dbms_spm.load_plans_from_cursor_cache(sql_id=>

'

farns9fxz7dum'

);

end;

/

再查看创建的基线如下:

selectsql_handle,plan_namefromdba_sql_plan_baselineswheresql_textlike'

SQL_HANDLE

PLAN_NAME

SQL_718c094fd7a20a4d

SQL_PLAN_733099zbu42kda0b930be

如此就为需要创建计划基线的SQL创建了计划基线

用sql文本来创建计划基线

如下

selectobject_idfromtwhereobject_name='

OBJECT_ID

----------

142

143

begin

=dbms_spm.load_plans_from_cursor_cache(

attribute_name=>

SQL_TEXT'

attribute_value=>

selectobject_idfromt%'

dbms_output.put_line(x);

end;

查看如下:

SQL_b7598beb2a522d9d

SQL_PLAN_bfqcbxcp54bcxa0b930be

显示一条SQL的执行计划

我们可以使用dbms_xplan.display_sql_plan_baseline来完成,如下:

selectsql_handle

fromdba_sql_plan_baselines

whereplan_name='

SQL_PLAN_bfqcbxcp54bcxa0b930be'

/

select*fromtable(dbms_xplan.display_sql_plan_baseline(sql_handle=>

SQL_b7598beb2a522d9d'

));

PLAN_TABLE_OUTPUT

--------------------------------------------------------------------------------

SQLhandle:

SQL_b7598beb2a522d9d

SQLtext:

selectobject_idfromtwhereobject_name='

Planname:

SQL_PLAN_bfqcbxcp54bcxa0b930bePlanid:

2696491198

Enabled:

YESFixed:

NOAccepted:

YESOrigin:

MANUAL-LOAD

Planrows:

Fromdictionary

Planhashvalue:

767293772

---------------------------------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|

|0|SELECTSTATEMENT||||4(100)||

|1|TABLEACCESSBYINDEXROWIDBATCHED|T|2|60|4(0)|00:

00:

01|

|*2|INDEXRANGESCAN|T_IDX|2||3(0)|00:

PredicateInformation(identifiedbyoperationid):

---------------------------------------------------

2-access("

OBJECT_NAME"

='

26rowsselected.

也可以输入plan_name,或是两者都输入。

还有一个参数为format,来用决定所显示计划的详细信息,其值可以为baice,typical或all。

4.创建一个AWR基线

通过如下命令来实现。

dbms_workload_repository.create_baseline(

start_snap_id=>

xxxxx,

end_snap_id=>

yyyy,

baseline_name=>

temp_baseline_name'

快照点,我们可以使用dba_hist_snapshot视图查找

如下:

selectsnap_idfromdba_hist_snapshot;

SNAP_ID

78

79

92

93

82

95

76

77

86

83

84

85

88

89

94

73

80

81

87

90

91

74

75

23rowsselected.

然后执行如下,创建AWR基线:

dbms_workload_repository.create_baseline(

start_snap_id=>

91,

end_snap_id=>

92,

baseline_name=>

创建一个SQL调优集。

dbms_sqltune.create_sqlset(

sqlset_name=>

temp_sqlset'

description=>

sqltunesetfromawr'

从awr基线中找到占较高资源的查询来填充SQL调优集。

base_curdbms_sqltune.sqlset_cursor;

openbase_curfor

selectvalue(x)

fromtable(dbms_sqltune.select_workload_repository(

'

null,null,'

elapsed_time'

null,null,null,15))x;

dbms_sqltune.load_sqlset(

populate_cursor=>

base_cur);

为SQL调优集中的每一个查询SQL创建计划基线。

xpls_integer;

x:

=dbms_spm.load_plans_from_sqlset(

sqlset_name=>

这样就完成了调优集中查询SQL的计划基线的创建。

5.SQL基线综合性使用

很多的时候,优化器只选择一种执行计划,我们尝试使用hint改变这个执行计划,且执行效率有很较大的提升。

但是通常是不能够改变产品系统里面的SQL代码的。

在这种情况下,会用到SQL计划基线,在不改变SQL的情况下让优化器选择我们加个hint后的执行计划。

使用SQL计划基线是一个不错的选择。

测试如下:

准备表

droptabletpurge;

Tabledropped.

variablenamevarchar2(30)

exec:

name:

='

执行SQL

selectcount(*)fromtwhereobject_name=:

name;

COUNT(*)

2

常看刚执行SQL的SQL_ID

Selectsql_id,child_numberfromv$sqlwheresql_textlike'

selectcount(*)fromtwhereobject_name=:

name'

SQL_IDCHILD_NUMBER

-------------------------

astw879f241950

显示执行计划:

select*fromtable(dbms_xplan.display_cursor(sql_id=>

'

astw879f24195'

SQL_IDastw879f24195,childnumber0

-------------------------------------

name

293504097

---------------------------------------------------------------------------

|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|

|0|SELECTSTATEMENT||||3(100)||

|1|SORTAGGREGATE||1|25|||

|*2|INDEXRANGESCAN|T_IDX|2|50|3(0)|00:

=:

NAME)

19rowsselected.

带HINT执行

select/*+full(t)*/count(*)fromtwhereobject_name=:

查看执行计划的SQL_ID如下:

selectsql_id,child_numberfromv$sqlwheresql_textlike'

select/*+full(t)*/count(*)fromtwhereobject_name=:

9rsq8360s27zu0

查看执行计划:

9rsq8360s27zu'

SQL_ID9rsq8360s27zu,childnumber0

2966233522

|0|SELECTSTATEMENT||||422(100)||

|*2|TABLEACCESSFULL|T|2|50|422

(1)|00:

2-filter("

然后改变第一个执行SQL(未带HINT)的执行计划,让其走使用hint后的SQL——“9rsq8360s27zu”的执行计划,也就是让它走全表扫描

创建两条SQL计划基线

Selectsql_id,hash_value,child_numberfromv

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1