使用SQL Profile之前的执行计划统计
该语句不算复杂,有6张表的左外关联+count查询。采集时间段为物理读最高的一条SQL。
逻辑读430多万,物理读20多万。
从执行计划来看,leg表(与上一篇为同一张表,3000多万条记录)进行了全表扫描。从where条件来看(如下):
where 1=1
and leg0_.STATUS<>'UN_ACTIVE'
and leg0_.PLATFORM_ID=16073;
leg表的两个字段是有自己单独的索引同时也包含在一个复合索引当中。
对于status查询得知目前只有10个不同的值,选择性不是很高。platform_id也只有300多不同的值,似乎全表扫描也是合理的。
自己先将status不等式改为in,有一定的效果但不明显,执行计划没变,物理读下降接近一半:
对于系统的一些更改,不知道其影响情况。于是使用sql profile,看能否起到作用。
该语句不算复杂,有6张表的左外关联+count查询。采集时间段为物理读最高的一条SQL。
逻辑读430多万,物理读20多万。
从执行计划来看,leg表(与上一篇为同一张表,3000多万条记录)进行了全表扫描。从where条件来看(如下):
where 1=1
and leg0_.STATUS<>'UN_ACTIVE'
and leg0_.PLATFORM_ID=16073;
leg表的两个字段是有自己单独的索引同时也包含在一个复合索引当中。
对于status查询得知目前只有10个不同的值,选择性不是很高。platform_id也只有300多不同的值,似乎全表扫描也是合理的。
自己先将status不等式改为in,有一定的效果但不明显,执行计划没变,物理读下降接近一半:
对于系统的一些更改,不知道其影响情况。于是使用sql profile,看能否起到作用。
创建一个分析任务
variable sql_ans9d61tq6djv varchar2(2000);
exec :sql_ans9d61tq6djv:=dbms_sqltune.create_tuning_task(sql_id=>'ans9d61tq6djv',time_limit=>600,task_name=>'ans9d61tq6djv_task');
执行
exec dbms_sqltune.execute_tuning_task(task_name=>'ans9d61tq6djv_task');
查询执行情况
select a.owner,b.task_id,b.task_name,a.created from dba_advisor_tasks a,dba_advisor_log b where a.task_id=b.task_id and a.task_name='ans9d61tq6djv_task';
OWNER TASK_ID TASK_NAME CREATED
--------- ---------- ----------- ---------
SYS 87509 ans9d61tq6djv_task 10-JUN-15
查看优化任务报告
select dbms_sqltune.report_tuning_task('ans9d61tq6djv_task') from dual;
DBMS_SQLTUNE.REPORT_TUNING_TASK('ANS9D61TQ6DJV_TASK')
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
----------------------------------------------------
接受建议sql,创建profile (看不到生成的报告,就创建了profile,我自己也是醉了 )
exec dbms_sqltune.accept_sql_profile(task_name=>'ans9d61tq6djv_task',task_owner => 'SYS', replace => TRUE);
profile信息
select name ,created from dba_sql_profiles;
NAME CREATED
------------------------------ ------------
SYS_SQLPROF_0153772f6123c000 10-JUN-15
exec :sql_ans9d61tq6djv:=dbms_sqltune.create_tuning_task(sql_id=>'ans9d61tq6djv',time_limit=>600,task_name=>'ans9d61tq6djv_task');
执行
exec dbms_sqltune.execute_tuning_task(task_name=>'ans9d61tq6djv_task');
查询执行情况
select a.owner,b.task_id,b.task_name,a.created from dba_advisor_tasks a,dba_advisor_log b where a.task_id=b.task_id and a.task_name='ans9d61tq6djv_task';
OWNER TASK_ID TASK_NAME CREATED
--------- ---------- ----------- ---------
SYS 87509 ans9d61tq6djv_task 10-JUN-15
查看优化任务报告
select dbms_sqltune.report_tuning_task('ans9d61tq6djv_task') from dual;
DBMS_SQLTUNE.REPORT_TUNING_TASK('ANS9D61TQ6DJV_TASK')
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
----------------------------------------------------
接受建议sql,创建profile (看不到生成的报告,就创建了profile,我自己也是醉了 )
exec dbms_sqltune.accept_sql_profile(task_name=>'ans9d61tq6djv_task',task_owner => 'SYS', replace => TRUE);
profile信息
select name ,created from dba_sql_profiles;
NAME CREATED
------------------------------ ------------
SYS_SQLPROF_0153772f6123c000 10-JUN-15
之后如果不再使用,删除Profile
exec dbms_sqltune.drop_sql_profile(name => 'SYS_SQLPROF_0153772f6123c000');
删除优化任务
exec dbms_sqltune.drop_tuning_task(task_name => 'ans9d61tq6djv_task');
删除优化任务
exec dbms_sqltune.drop_tuning_task(task_name => 'ans9d61tq6djv_task');
之后的执行计划如下:
昨天创建profile,一会儿查看该语句是否还在" 榜"上。
问题:
看查看生的profile报告时,什么内容也看不到 。不知道什么原因,希望有知道的还请告知,先谢谢了。
看查看生的profile报告时,什么内容也看不到 。不知道什么原因,希望有知道的还请告知,先谢谢了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26831783/viewspace-1695193/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26831783/viewspace-1695193/