oracle SQL配置文件 2

2023年 11月 26日 40.9k 0

1.1.1.1   sql优化顾问

通过dbms_sqltune包可以访问SQL优化顾问的核心界面。此外,在企业管理器中还集成了一个图形界面。通过这两个界面可以执行优化任务(tuning task),还可以查看产生的建议并接受建议。

 

注意 要使用SQL优化顾问和dbms_sqltune包,必须获得使用Diagnostics Pack和Tuning Pack的许可。记住,这些选件仅在企业版可用。

 

要启动优化任务,必须调用dbms_sqltune包中的create_tuning_task函数,并将以下各项之一作为一个参数传递(函数会重载四次以接受不同类型的参数)。

Ø  SQL语句的文本。

Ø  对存储在库缓存中的SQL语句的引用(sql_id)。

Ø  对存储在AWR(Automatic Workload
Repository,自动工作负载存储库)中的SQL语句的引用(sql_id)。

Ø  SQL优化集的名称。

 

SQL优化集(SQL TUNING SETS)

简单地说,SQL优化集是将一组SQL语句与其关联的执行环境、执行统计信息和可选执行计划 存储到一起的对象。SQL优化集是使用dbms_sqltune包来管理的。

 

需要Tuning Pack或Real Application Testing才能使用SQL优化集,也就是说要使用企业版。

 

可以在Oracle
Database Performance Tuning Guide手册(11.2及之后版本)或者Oracle Database SQL Tuning Guide手册(12.1及之后版本)中找到关于SQL优化集的更多信息。

 

为了通过将单个SQL语句当作一个参数来简化dbms_sqltune包中的create_tuning_task函数的执行,我编写了tune_last_statement.sql脚本。其想法是你执行希望已在SQL*Plus中分析过的SQL语句,然后不使用参数来调用该脚本。该脚本会从v$session视图中获取当前会话执行的最后一条SQL语句的引用(sql_id),然后创建并执行一个引用该脚本的优化任务。该脚本的核心部分为以下匿名PL/SQL块:

DECLARE

 
l_sql_id v$session.prev_sql_id%TYPE;

BEGIN

 
SELECT prev_sql_id INTO l_sql_id

 
FROM v$session

 
WHERE audsid = sys_context('userenv','sessionid');

 

 
:tuning_task := dbms_sqltune.create_tuning_task(sql_id => l_sql_id);

 
dbms_sqltune.execute_tuning_task(:tuning_task);

END;

/

 

优化任务会将多个数据字典视图中的分析输出具体化。可以使用dbms_sqltune包中的report_tuning_task函数来生成关于分析的详细报告,而不用直接查询视图。下面的查询展示了它的使用。请注意需要使用上一个PL/SQL块返回的优化任务名称来引用优化任务:

SELECT
dbms_sqltune.report_tuning_task(:tuning_task) FROM dual;

 

上个查询会生成类似以下的报告来建议使用SQL配置文件。请注意这部分选自profile_opt_estimate.sql脚本生成的输出。第一部分显示分析和SQL语句的基本信息。第二部分显示结果和建议。本例中,建议使用SQL配置文件。最后一部分显示应用建议之前和之后的执行计划:

P348

 

要使用SQL优化顾问推荐的SQL配置文件,你需要应用它。下一部分会介绍如何应用。无论是否应用SQL配置文件,一旦不再需要优化任务,就可以调用dbms_sqltune包中的drop_tuning_task过程来删掉它:

dbms_sqltune.drop_tuning_task('TASK_3401');

 

1.1.1.2   接受SQL配置文件

dbms_sqltune包中的accept_sql_profile过程用来接受SQL优化顾问建议的SQL配置文件。它接受以下参数。

Ø  Task_name和task_owner参数引用建议SQL配置文件的优化任务。

Ø  Name和description参数指定SQL配置文件的名称和描述。例如,使用生成它的脚本名作为它的名称。

Ø  Category参数用于将几个SQL配置文件组合起来,以便于管理。默认值为DEFAULT。

Ø  Replace参数指定是否替换已经可用的SQL配置文件。默认值为FALSE。

Ø  Force_match参数指定如何执行文本标准化。默认值是FALSE。下一部分会给出更多关于文本标准化的信息。

 

只有task_name是强制性参数。例如,要应用上面报告中推荐的SQL配置文件,你需要使用以下PL/SQL调用

BEGIN

  
dbms_sqltune.accept_sql_profile(

    
task_name   => 'TASK_3401',

    
task_owner  => user,

    
name        => 'opt_estimate',

    
description => null,

    
category    => 'TEST',

    
force_match => TRUE,

    
replace     => TRUE

   );

END;

/

 

一旦应用,sql配置文件就会保存在数据字典中。dba_sql_profiles视图显示了它的信息。此外,从12.1版本之后,cdb_sql_profiles视图也可用。由于sql配置文件不会被绑定到特定用户,因此all_sql_profiles和user_sql_profiles视图不存在:

select category,sql_text,force_matching
from dba_sql_profiles where name='opt_estimate';

 

accept_sql_profile函数与accept_sql_profile过程一样。唯一不同的是函数会返回SQL配置文件名。如果没有在输入函数中指定名称而系统需要生成结果时,这会变得很有用。

 

1.1.1.3   修改SQL配置文件

创建SQL配置文件之后,可以使用dbms_sqltune包中的alter_sql_profile过程来修改它的一些属性,并且还可以使用它来修改SQL配置文件的状态(enabled或disabled)。该过程接受以下参数。

Ø  Name参数指定要修改的SQL配置文件。

Ø  Attribute_name参数指定要修改的属性。它能接受的值有:name、description、category和status。

Ø  Value参数指定新的属性值。

 

这三个参数是强制的。例如,以下PL/SQL调用会禁用上面例子创建的SQL配置文件:

dbms_sqltune.alter_sql_profile(

name =>'optestimate',

attribute_name =>'status',

value =>'disabled');

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论