【DB笔试面试259】在Oracle中,什么是SQLT工具和SQLHC工具?_Oracle

【DB笔试面试259】在Oracle中,什么是SQLT工具和SQLHC工具?_Oracle_02


Q          题目如下所示:

在Oracle中,什么是SQLT工具和SQLHC工具?


     
A          答案如下所示:          


  SQLT(SQLTXPLAIN)是Oracle Server Technologies Center of Expertise-ST CoE提供的一款工具,Mos文档1677588.1和1526574.1有非常详细的介绍。SQLT可以通过输入一个SQL语句然后输出一组诊断文件。这些文件通常用于诊断性能不佳或者产生错误结果的SQL语句。对于SQL语句的调优,SQLT需要DBA有一些专业的知识来分析诊断文件。对于许多问题来说推荐首先使用SQLHC(SQL Health Check,SQL性能健康检查脚本)来检查SQL,假如SQLHC不能解决再尝试使用SQLT。SQLT工具本身是免费的,不需要任何许可证(License)。

SQLT主要方法是连接到数据库,收集执行计划、CBO统计信息、Schema对象元数据、性能统计信息、配置参数和会影响正在分析的SQL性能的其它因素。这些方法会对有问题的SQL_ID产生一系列输出,包括一个HTML格式的“main”报表。

SQLT可以安装在UNIX、Linux或Windows平台,数据库版本支持Oracle 10.2及更高版本。详细安装过程可参考我的博客(http://blog.itpub.net/26736162/viewspace-2141558/)。SQLT在安装的过程中会创建两个用户(SQLTXPLAIN和SQLTXADMIN)和一个角色(SQLT_USER_ROLE)。在使用SQLT提供的主要方法之前,须确保SQLT已经被正确安装,并且使用SQLT的用户被赋予了SQLT_USER_ROLE角色。如果在安装SQLT的过程中绕过了SQL*Net(即没有在安装期间没有指定连接符),那么在从远程客户端执行任何SQLT主要方法前,需要手动设置连接符参数。例如,连接使用“sqlplus lhr/lhr@orclasm”,那么在执行SQLT脚本之前就需要执行:“EXEC sqltxadmin.sqlt$a.set_sess_param('connect_identifier','@orclasm');”。

对于一个SQL语句,SQLT工具提供了7种主要方法来生成诊断详细信息:XTRACT,XECUTE,XTRXEC,XTRSBY,XPLAIN,XPREXT和XPREXC。其中,除了XPLAIN之外,其它方法都会处理绑定变量,并且会做Bind Peeking(绑定变量窥探),但是XPLAIN不会。这是因为XPLAIN是基于EXPLAIN PLAN FOR命令执行的,该命令不做Bind Peeking。因此,如果SQL语句含有绑定变量,那么请避免使用XPLAIN。除了XPLAIN的Bind Peeking限制外,所有的这7种主要方法都可以提供足够的诊断详细信息,对性能较差或产生错误结果集的SQL进行初步评估。如果该SQL仍位于内存中或者AWR(Automatic Workload Repository)中,那么推荐使用XTRACT或XTRXEC,其它情况请使用XECUTE。对于DG(Data Guard)或备用只读数据库,请使用XTRSBY。仅当其它方法都不可行时,再考虑使用XPLAIN。XPREXT和XPREXC是类似于XTRACT和XECUTE,但为了提高SQLT的性能它们禁了一些SQLT的特性。XTRACT方法的使用如下所示:

sqlplus lhr/lhr@orclasm

EXEC sqltxadmin.sqlt$a.set_sess_param('connect_identifier','@orclasm');

START sqltxtract.sql SQL_ID sqltxplain_password

其它方法类似,具体使用过程请参考我的博客。

对于SQLHC(SQL Health Check,SQL性能健康检查脚本)工具,Mos文档1626277.1有非常详细的介绍。SQLHC是Oracle Server Technologies Center of Expertise开发的一个工具。SQLHC用于检查单条SQL语句运行的环境,包括基于成本的优化器(CBO)的统计数据,用户对象的元数据定义,配置参数和其它可能影响到目标SQL性能的因素。SQLHC和SQLT工具一样,本身都是免费的,不需要任何许可证(License)。当对某一个SQL_ID运行SQLHC后,该脚本会生成一系列针对该SQL语句健康检查的一份HTML报告。SQLHC会检查的内容包括:① 待分析的单条SQL涉及的用户对象的CBO统计信息;② CBO参数;③ CBO系统统计信息;④ CBO数据字典统计信息;⑤ CBO固定对象(Fixed-Objects)统计信息。

SQLHC运行时不会在数据库中创建任何对象(“数据库中不留足迹”),它只是对已有的对象提供报告和建议,可以确保它在所有系统上运行。SQLHC的脚本需要以SYS、DBA或者能访问数据字典视图的用户通过SQL*Plus连接运行。SQLHC一共包含3个脚本,分别为sqlhc.sql、sqldx.sql和sqlhcxec.sql,其中sqlhc.sql里边会调用sqldx.sql脚本。sqlhcxec.sql是单独执行的,不过该脚本需要输入一个脚本文件作为入参,而且该脚本文件可以包含绑定变量,但是必须要有“/* ^^unique_id */”注释,可以包含其它的Hint。sqlhc.sql脚本的使用如下所示:

sqlplus / as sysdba

START sqlhc.sql T SQL_ID

SQLT和SQLHC脚本生成的报告文件都在进入SQL*Plus之前的OS的当前目录下。