This document answers some of the frequently asked questions about the SQLTXPLAIN (SQLT) tool. You can download the latest version of SQLT here:
本文档回答了有关SQLTXPLAIN(SQLT)工具的一些常见问题。您可以在此处下载最新版本的SQLT
Document 215187.1 SQLT (SQLTXPLAIN) - Tool That Helps To Diagnose SQL Statements Performing Poorly
Document 215187.1 SQLT (SQLTXPLAIN) - 帮助诊断性能不佳的SQL语句的工具
For SQL usage and installation instructions, refer to:
有关SQL用法和安装说明,请参阅:
Document 1614107.1 SQLT Usage Instructions
NOTE: If you want to simply perform a Health Check on your SQL environment that leaves no database footprint then see:
注意:如果您只想在不占用数据库资源的SQL环境上执行运行状况检查,请参阅:
Document 1366133.1 SQL Tuning Health-Check Script (SQLHC)
Would you like to explore SQLT further with other Oracle Customers, Oracle Employees, and Industry Experts?
We have various threads available where you can ask questions, get help from others, and share your experiences with SQLTXPLAIN:
SQLTXPLAIN: SQLT Installation Issues
SQLTXPLAIN: Dealing with Long Execution Times
SQLTXPLAIN: Dealing with Errors reported in SQLT MAIN report
SQLTXPLAIN: Using SQLT on a Stand-by or Dataguard
SQLTXPLAIN: Interpreting and Understanding SQLT Output
SQLTXPLAIN (SQLT): General Discussion
Discover discussions about other articles and helpful subjects by clicking here to access the main My Oracle Support Community page for Database Tuning.
What is SQLTXPLAIN, also known as SQLT 什么是SQLTXPLAIN,也称为SQLT
SQLT is a tool that can be used to diagnose why a specific SQL statement may be performing poorly. It takes a single SQL statement as input and outputs a set of diagnostics that can be used to improve the statement's performance.What is the origin of SQLT? SQLT的起源是什么?
SQLTXPLAIN is a tool provided by Oracle Server Technologies Center of Expertise - ST CoE. It have been in usage in support for over 10 years following its creation in 1999. It has been developed and improved over that time to reflect changes in the Oracle Database and to add additional functionality. It is constantly evolving and being updated. SQLTXPLAIN是Oracle服务器技术专业知识中心-ST CoE提供的工具。自从1999年创建以来,它在支持中已经使用了10多年了。在此期间,已经对其进行了开发和改进,以反映Oracle数据库中的更改并添加其他功能。它在不断发展和更新。Is there a light weight way of gathering SQLT-like information? 是否有一种轻量级的方式来收集类似SQLT的信息?
Although it does not have the depth or scope of SQLT, there is a script called SQLHC which provides a subset of the SQL used by the SQLT script. SQLHC is shipped along with SQLT and can be executed using the following 2 scripts:尽管它没有SQLT的深度或范围,但是有一个名为SQLHC的脚本,它提供了SQLT脚本使用的SQL的子集。SQLHC与SQLT一起提供,并且可以使用以下两个脚本执行:
sqlhc.sql -- Runs from a SQL_ID
sqlhcxec.sql -- Runs from a Script file
Document 1366133.1 SQL Tuning Health-Check Script (SQLHC)s
IS SQLHC a complement or a substitute for SQLT? SQLHC是SQLT的补充还是替代?
SQLT is far more advanced than SQLHC; while it incorporates similar checks to those done in SQLHC it offers far wider functionality. SQLHC is simply a quick health check for a statement and is a subset of the SQL used by the SQLT script but unlike SQLT, has no database footprint. It is a relatively short SQL script that generates a HTML output. It extracts database statistic information using selects or standard APIs (such as DBMS_XPLAN) from the database and combines that with AWR output if the correct licenses are available. For tuning SQL, SQLT requires some level of expertise to get the most from it. For most issues we recommend that you start by checking the query using SQL Health Check and then progress to SQLT if you are unable to resolve the issue. For details of SQLHC see: SQLT比SQLHC先进得多。尽管它包含与SQLHC中执行的检查类似的检查,但它提供了更广泛的功能。SQLHC只是对语句的快速运行状况检查,并且是SQLT脚本使用的SQL的子集,但与SQLT不同,它没有数据库占用空间。这是一个较短的SQL脚本,可生成HTML输出。它使用selects或标准API(例如DBMS_XPLAN)从数据库中提取数据库统计信息,并在可获得正确许可证的情况下将其与AWR输出结合。为了调优SQL,SQLT需要一定程度的专业知识才能充分利用它。对于大多数问题,我们建议您首先使用SQL运行状况检查检查查询,如果无法解决问题,请继续进行SQLT。有关SQLHC的详细信息,请参见:
Document 1366133.1 SQL Tuning Health-Check Script (SQLHC)
Document 1455583.1 SQL Tuning Health-Check Script (SQLHC) Video
For general usage information, see: 有关常规用法信息,请参阅:
Document 1366133.1 SQL Tuning Health-Check Script (SQLHC)
Document 1417774.1 FAQ: SQL Health Check (SQLHC) Frequently Asked Questions
What would you use first? SQLHC or SQLT? 您首先要使用什么?SQLHC或SQLT?
When you initially encounter a problem with a SQL statement, we would advise that you use SQLHC. 最初遇到SQL语句问题时,建议您使用SQLHC。
If that finds nothing wrong then follow that up with SQLT. 如果发现没有问题,请继续使用SQLT。
Of course you can start with SQLT but you may not need all the functionality that it provides and with SQLHC you do not have to worry about database footprint and all that entails. 当然,您可以从SQLT开始,但是您可能不需要SQLT提供的所有功能,而使用SQLHC则不必担心数据库占用空间以及随之而来的所有问题。
Can SQLT be used safely in production? SQLT是否可以在生产中安全使用?
Yes. But this is something you would need to validate If you decide to use it, initially you would probably want to install it on test. If you can reproduce the issue you are seeing there, then you do not need to install on production. If it only happens in production, then once you are happy in Test then you can schedule the installation on production and capture the information from there. 是。但是,这是您需要验证的内容。如果决定使用它,则最初可能要在测试中安装它。如果您可以重现在此看到的问题,则无需在生产环境中进行安装。如果仅在生产中发生,那么一旦您对Test满意,就可以安排生产安装并从那里捕获信息。What level of expertise is required to use SQLT? 使用SQLT需要什么级别的专业知识?
SQLT assumes that the user knows about SQL Tuning. It is not designed to take you step by step through an issue if you do not know anything about tuning SQL. It will not teach you SQL Tuning. It is similar to reading an AWR report - if you are familiar with Database Performance concepts then AWR will be familiar to you and SQLT is similar. SQLT假定用户了解SQL调优。如果您对调优SQL一无所知,它的目的不是逐步解决问题。它不会教您SQL Tuning。这类似于阅读AWR报告-如果您熟悉数据库性能概念,那么AWR将对您很熟悉,并且SQLT也很相似。Is the SQLT tool the same for all versions? 所有版本的SQLT工具都一样吗?
No.Can SQLT be used on Oracle 9i and 10gR1? 可以在Oracle 9i和10gR1上使用SQLT吗?
Yes. For 9.2 and 10.1 instances, a separate version is available from the Central SQLT article. 是。对于9.2和10.1实例,Central SQLT文章中提供了单独的版本。What is the licensing requirement for SQLT? SQLT的许可要求是什么?
SQLT requires no license and is FREE. SQLT不需要许可证,并且是免费的。column parameter format a20
column value format a10
SELECT parameter,value FROM v$option WHERE parameter = 'Partitioning';
For more details see: 有关更多详细信息,请参见:Document 1951018.1 SQLT Utility and Partitioned Tables SQLT和分区表
How do I check in the DB whether or not tuning and diagnostic packs are installed / available based on licensing 如何在数据库中检查是否根据许可安装了调试和诊断包/是否可用
Most packs are installed by default because the database itself uses the AWR repository. The license allows you to use the AWR repository. 默认情况下会安装大多数软件包,因为数据库本身使用AWR存储库。该许可证允许您使用AWR存储库。Document 436386.1 Controlling Diagnostic and Tuning Pack Usage
Document 1490798.1 AWR Reporting - Licensing Requirements Clarification
Oracle® Database Licensing Information
12c Release 1 (12.1)
Part number E17614-08
Chapter 2 Options and Packs
Oracle Tuning Pack
http://docs.oracle.com/database/121/DBLIC/options.htm#DBLIC139
What is missing from the reports if the Tuning Pack is not installed? 如果未安装Tuning Pack,报告中会缺少什么?
SQLT uses packs to give it access to AWR (Automatic Workload Repository) based information (AWR information is accessible via the Diagnostic pack; the Tuning pack is a superset of the Diagnostic pack so either will provide access to this information). The AWR infrastructure is installed by default (because the database uses AWR information for internal purposes), the real question is whether you are licensed to use it or not.When using SQLT, is it more beneficial to have AWR than not having AWR? 使用SQLT时,拥有AWR比没有AWR更有益吗?
Yes, it is more beneficial to use AWR alongside SQLT. 是的,与SQLT一起使用AWR更有利。Is there a Install Guide for SQLT? 是否有SQLT安装指南?
Installation instructions are included in the SQLT usage guide which can be found here:Document 1614107.1 SQLT Usage Instructions
These instructions are also in the sqlt_instructions.html file included in the downloaded SQLT zip file. 这些说明也位于下载的SQLT zip文件中包含的sqlt_instructions.html文件中。Where can I obtain SQLT Installation Advice? 在哪里可以获得SQLT安装建议?
The best place to get SQLT installation advice is the My Oracle Support Community (MOSC). Refer to the following thread where you can benefit from the shared experience of the community, ask questions and get help from others:SQLTXPLAIN: SQLT Installation Issues
Where can I download SQLT? 在哪里可以下载SQLT?
You can download SQLT from: 您可以从以下位置下载SQLT:Document 215187.1 SQLT (SQLTXPLAIN) - Tool That Helps To Diagnose SQL Statements Performing Poorly
How Do I install / re-install / un-install SQLT? 如何安装/重新安装/卸载SQLT?
You can find the install / re-install / un-install instructions in the SQLT usage guide which can be found here: 您可以在SQLT使用指南中找到安装/重新安装/卸载说明,该指南可在此处找到:Document 1614107.1 SQLT Usage Instructions
These instructions are also in the sqlt_instructions.html file included in the downloaded SQLT zip file. 这些说明也位于下载的SQLT zip文件中包含的sqlt_instructions.html文件中。
How Much space does SQLT take up? SQLT占用多少空间?
In the majority of cases, 100Mb is plenty of space. However, if the queries that you are analyzing with SQLT access tables with thousands of partitions, you may need more than that. SQLT does not store application data. It only stores metadata on the SQL and the dependent objects. 在大多数情况下,100Mb是足够的空间。但是,如果您要使用SQLT分析的查询访问具有成千上万个分区的表,则可能需要的还不止这些。SQLT不存储应用程序数据。它仅将元数据存储在SQL和相关对象上。How Do I upgrade SQLT? 如何升级SQLT?
You can find SQLT upgrade instructions in the upgrade section of the following article: 您可以在以下文章的升级部分中找到SQLT升级说明:Document 1614107.1 SQLT Usage Instructions
These instructions are also in the sqlt_instructions.html file included in the downloaded SQLT zip file. 这些说明也位于下载的SQLT zip文件中包含的sqlt_instructions.html文件中。If SQLT is already installed, how Do I determine the version? 如果已经安装了SQLT,如何确定版本?
The following SQL, run as SYS or the SQLTXPLAIN user will provide version information: 以下以SYS或SQLTXPLAIN用户身份运行的SQL将提供版本信息:COL sqlt_version FOR A40;
SELECT
'SQLT version number: '||sqltxadmin.sqlt$a.get_param('tool_version')||CHR(10)||
'SQLT version date : '||sqltxadmin.sqlt$a.get_param('tool_date')||CHR(10)||
'Installation date : '||sqltxadmin.sqlt$a.get_param('install_date') sqlt_version
FROM DUAL
/
SQLT_VERSION
----------------------------------------
SQLT version number: 12.1.05
SQLT version date : 2013-12-11
Installation date : 2014-01-27/10:25:37
hat does SQLT do during installation? SQLT在安装过程中会做什么?
SQLT creates a repository in the database under the SQLTXPLAIN user to record information concerning the queries that are analyzed by the tool and also creates a number of directories on disk. Full details can be found in the documentation contained in the zip file downloaded above. SQLT在SQLTXPLAIN用户的帮助下在数据库中创建一个存储库,以记录有关该工具分析的查询的信息,并且还在磁盘上创建许多目录。完整的详细信息可以在上面下载的zip文件中包含的文档中找到。Can SQLT be installed into an existing schema instead of creating a new schema? 是否可以将SQLT安装到现有模式中,而不是创建新模式?
SQLT requires its own schema to be installed SQLT需要安装自己的架构Do you need the SYS password to run SQLT? 您需要SYS密码才能运行SQLT吗?
In order to install SQLT, you need to be connected internal. To run SQLT once it is installed, No. 为了安装SQLT,您需要内部连接。要在安装SQLT之后运行它,否。Can I reset the password for the SQLTXPLAIN user? 我可以重设SQLTXPLAIN用户的密码吗?
Yes. Although the SQLT schema (SQLTXPLAIN) is fixed, the password can be changed just like any normal Oracle password. 是。尽管SQLT模式(SQLTXPLAIN)是固定的,但可以像更改任何普通Oracle密码一样更改密码。If the Applications password is unavailable, is SYS/SYSTEM a viable alternative? 如果“应用程序”密码不可用,SYS/SYSTEM是否可行?
You can run with these users, but this is not the preferred way of running SQLT; when collecting SQLT for Support, you should try to get the applications password, if possible. The primary issue is that, without the application password, some pieces of information will be missing, such as the 'explain plan for' output, and although in most cases this is not required, in some cases this information is important. That said, SQLT still collects plenty of extremely useful information without it.GRANT INHERIT PRIVILEGES ON USER sys TO sqltxadmin;
hich Schema should I register as the application scema? For example we have 3 schemas in the DB with cross permissions - Schema A is the main schema but uses objects from B and C. How does that work with SQLT? 我应该将哪种模式注册为应用程序脚本?例如,我们在数据库中有3个具有交叉许可权的模式-模式A是主要模式,但使用来自B和C的对象。这如何与SQLT一起使用?
When you install SQLT it asks who is the main application user. You can pick any schema for this, it does not matter. When you want to examine a SQL with SQLT then you need to register the schema that actually runs the SQL. So, once you have installed SQLT, connect as SYS and grant the SQLT user role to the schema you run the SQL as. Then use those schemas to run the SQLT against the SQL that those schemas run. If you don't grant the role to all the schemas and have only referenced one, SQLT will still be able to pick up the references to tables and object in the SQL that are from any other schemas. All the register does is setup the runtime environment to run as that particular user. 安装SQLT时,它将询问谁是主要的应用程序用户。您可以为此选择任何架构,这无关紧要。当您想使用SQLT检查SQL时,您需要注册实际运行SQL的模式。因此,安装SQLT后,以SYS身份连接并将SQLT用户角色授予运行SQL的架构。然后,使用这些架构针对这些架构所运行的SQL运行SQLT。如果您没有将角色授予所有模式,而仅引用了一个,则SQLT仍然能够从其他任何模式中获取对SQL中表和对象的引用。寄存器所做的只是设置运行时环境以该特定用户身份运行。When database is upgraded from 10.2 to 11.2, what is SQLT upgrade path? 当数据库从10.2升级到11.2时,SQLT升级路径是什么?
If the database is upgraded SQLT should work without any actions being performed. To be completely safe re-execute spcreate.sql 如果数据库已升级,则SQLT应该可以正常运行而无需执行任何操作。为了完全安全,请重新执行spcreate.sqlIf I install SQLT on a production Db and it is later cloned, will SQLT work "out-of-the-" box on the clone? 如果我在生产Db上安装了SQLT并随后对其进行了克隆,那么SQLT是否可以在克隆上“开箱即用”?
In the past this would not work because there was a dependency on the bdump/udump directories. But today it will check and refresh the pointers so it should work. 过去这是行不通的,因为对bdump / udump目录存在依赖性。但是今天它将检查并刷新指针,因此它应该可以工作。Is any special setup needed to install SQLT on a server with multiple database instances? 在具有多个数据库实例的服务器上安装SQLT是否需要任何特殊的设置?
SQLT install is primarily about installing SQLT into a particular database. If you have multiple databases you have to install SQLT into each one where you have SQL statements you want to analyze. You can, however, install SQLT into multiple databases from the same install directory. SQLT安装主要是关于将SQLT安装到特定数据库中。如果您有多个数据库,则必须将SQLT安装到要分析SQL语句的每个数据库中。但是,您可以将SQLT从同一安装目录安装到多个数据库中。How Frequently should SQLT be run? SQLT应该多久运行一次?
SQLT is not designed to check all SQL statements, rather, when you have concerns about the performance of a single SQL statement then run it for that SQL. SQLT并非旨在检查所有SQL语句,而是在您担心单个SQL语句的性能时,然后针对该SQL运行它。Can install be scripted/automated? 可以脚本化/自动化安装吗?
The SQLT install process itself is scripted in a script called sqlt/install/sqcreate.sql If you have dozens of installations to do on multiple machines with the same answers to the questions, then you may want to automate the install process. In the instructions file, after it describes the installation steps it has options for an automatic install with no user input giving you 2 options that you can follow to do this. This can enable you to automate multiple installs. SQLT安装过程本身是用名为 sqlt/install/sqcreate.sql的脚本编写的。如果要在多台计算机上进行数十次安装,并且对问题的答案相同,那么您可能希望自动化安装过程。在说明文件中,在说明安装步骤后,它具有自动安装选项,无需用户输入,为您提供了2个选项,您可以按照这些选项进行操作。这可以使您自动执行多个安装。Do we need to worry about maintenance for SQLEXPLAIN tablespace? 我们是否需要担心SQLEXPLAIN表空间的维护?
The tool has a repository which can grow over time. There is a purge script in the utl (utilities) directory called "sqlthistpurge.sql" which can purges a range of statements from the SQLT repository based on SQL_ID. But in most cases the repository will not get large because we only store metadata NOT application data. 该工具具有一个可以随着时间增长的存储库。utl(实用程序)目录中有一个清除脚本,称为“ sqlthistpurge.sql”,该脚本可以基于SQL_ID从SQLT存储库中清除一系列语句。但是在大多数情况下,存储库不会变大,因为我们仅存储元数据而不存储应用程序数据。How do we deal with installation and runtime issues? 我们如何处理安装和运行时问题?
Please refer to the following document for details of commonly encountered installation and runtime issues: 请参阅以下文档,以获取常见的安装和运行时问题的详细信息:
Document 1670677.1 FAQ: Common SQLT (SQLTXPLAIN) Runtime/Installation Errors
Additionally there is a SQLTXPLAIN: SQLT Installation Issues thread in the Oracle Communities where you can ask questions, get Help, and share your experiences of SQLT with other Oracle Customers, Oracle Employees, and Industry Experts. 此外,Oracle社区中还有一个SQLTXPLAIN:SQLT安装问题线程,您可以在其中询问问题,获得帮助并与其他Oracle客户,Oracle员工和行业专家分享您的SQLT经验。How do I generate a SQLT of a SQL statement that hangs or raises an error 如何生成挂起或引发错误的SQL语句的SQLT
If you are unable to generate a SQLT for a statement because the statement hangs or generates an error then refer to the following article: 如果由于语句挂起或生成错误而无法为该语句生成SQLT,请参考以下文章:Document 2146816.1 Generate a SQLT of a SQL Statement That Hangs or Raises an Error
What platforms does SQLT work on? SQLT在什么平台上工作?
SQLT is platform independent. SQLT uses SQL Scripts to generate output files. The SQLT report is in html format so any browser capable of displaying html will be able to display it. SQLT是平台无关的。SQLT使用SQL脚本生成输出文件。SQLT报告为html格式,因此任何能够显示html的浏览器都可以显示该报告。Does SQLT capture All the SQL from a Database or capture specific schemas only? SQLT是从数据库捕获所有SQL还是仅捕获特定模式?
SQLT works on a single SQL statement at a time and captures only ONE specific SQL_ID or HASH_VALUE SQLT一次处理一个SQL语句,并且仅捕获一个特定的SQL_ID或HASH_VALUEIs SQLT able to analyze many SQLs simultaneously (e.g. from a SQL Tuning Set)? SQLT是否能够同时分析许多SQL(例如,from a SQL Tuning Set)?
No. SQLT works on a single SQL statement at a time and captures only ONE specific SQL_ID or HASH_VALUE. If you want to perform comparative baseline analysis you should look at SQL Plan Management in conjunction with the SQL Performance Analyzer and Real Application testing (dependent on your requirements). 不可以。SQLT一次只能处理一个SQL语句,并且只能捕获一个特定的SQL_ID或HASH_VALUE。如果要执行比较基准分析,则应结合SQL Performance Analyzer和Real Application测试(取决于您的要求)来查看SQL计划管理。If we have multiple SQLs in a session, how do we use SQLT one by one? 如果在一个会话中有多个SQL,我们如何一个接一个地使用SQLT?
SQLT works on a single SQL statement at a time. You would need to supply the SQL_ID or HASH_VALUE for the SQL you are interested in from the session. Once you have analyzed one SQL_ID you can move it on to the next. SQLT一次处理一个SQL语句。您需要为会话中您感兴趣的SQL提供SQL_ID或HASH_VALUE。一旦分析了一个SQL_ID,就可以将其移至下一个。If we have multiple reports for the same query where the plan has changed, can these be compared? 如果我们在计划已更改的同一查询中有多个报告,可以比较这些报告吗?
In this case use the COMPARE method. This allows you to take two similar sources but the same SQL statement performs fine in one of them but not in the other. This method helps to pin-point the differences between the two SOURCES in terms of plans, metadata, CBO statistics, initialization parameters and bug fix-control. See the COMPARE Section in the sqlt/sqlt_instructions.html file included in the zip file. 在这种情况下,请使用COMPARE方法。这使您可以采用两个相似的源,但是相同的SQL语句在其中一个中表现良好,但在另一个中却不能。此方法有助于从计划,元数据,CBO统计信息,初始化参数和错误修复控制方面查明两个SOURCES之间的差异。请参阅zip文件中包含的sqlt / sqlt_instructions.html文件中的COMPARE部分。Can we use this tool for PL/SQL code? 我们可以将此工具用于PL/SQL代码吗?
You can use SQLT on PL/SQL but if the focus is on a specific SQL statement, if you don't know where exactly the time is spent then 10046 or PL/SQL profiling may work better. Instructions on the use of the profiler can be found in the following article: 您可以在PL / SQL上使用SQLT,但是如果重点是特定的SQL语句,如果您不知道确切的时间在哪里,那么10046或PL / SQL分析可能会更好。可以在以下文章中找到有关使用探查器的说明:Document 243755.1 Implementing and Using the PL/SQL Profiler
Can SQLT be used in a distributed environment? 可以在分布式环境中使用SQLT吗?
Yes, we can use SQLT in a distributed environment. To do this, store SQLT on the remote node or nodes and the main node. When run on the main node, SQLT can then connect to the remote nodes and produce SQLT extracts from the remote nodes and package everything together. 是的,我们可以在分布式环境中使用SQLT。为此,请将SQLT存储在一个或多个远程节点和主节点上。在主节点上运行时,SQLT然后可以连接到远程节点,并从远程节点生成SQLT提取并将所有内容打包在一起。Where can I find the SQL_ID or HASH_VALUE? 在哪里可以找到SQL_ID或HASH_VALUE?
The SQL_ID can be found on an AWR report, and the HASH_VALUE on any SQL Trace (above the SQL text and identified by the "hv=" token). 可以在AWR报告中找到SQL_ID,并在任何SQL跟踪中找到HASH_VALUE(在SQL文本上方并由"hv=" token)。select SQL_ID, HASH_VALUE ,substr(SQL_TEXT,1,30) Text
from V$SQL
where SQL_TEXT like '%&Some_Identifiable_String%';
Please also refer to the following document for more examples: 另请参阅以下文档以获取更多示例:
Document 1627387.1 How to Determine the SQL_ID for a SQL Statement
Can SQLT take the PLAN_HASH_VALUE as input? SQLT可以将PLAN_HASH_VALUE用作输入吗?
No, it uses the SQL_ID or HASH_VALUE (not PLAN HASH VALUE) 不,它使用SQL_ID或HASH_VALUECan it be used on Queries containing Multiple Tables, Views etc? 可以用于包含多个表,视图等的查询吗?
Yes. SQLT supports all valid SQL statements. 是。SQLT支持所有有效的SQL语句。Can it be used where SQL references objects from multiple schemas? SQL可以从多个架构引用对象的地方使用吗?
Yes.Does SQLT work across multiple databases via a dblink? SQLT是否可以通过dblink跨多个数据库工作?
Yes, SQLT works in a distributed environment 是的,SQLT在分布式环境中工作Does SQLT handle literal values and bind variables? SQLT是否处理文字值并绑定变量?
Yes. Because bind peeking can affect plans, SQLT will report bind variable history and the different plans that different binds have generated. 是。由于绑定窥探会影响计划,因此SQLT将报告绑定变量历史记录以及不同绑定已生成的不同计划。How does SQLT handle bind variables? SQLT如何处理绑定变量?
Bind variable values are stored in metadata and are associated with any different plans that they generate. 绑定变量值存储在元数据中,并与它们生成的任何不同计划相关联。Does SQLT provide formatted 10053 output? SQLT是否提供格式化的10053输出?
SQLT collects 10053 trace but it does not re-format it. SQLT收集10053跟踪,但不会重新设置其格式。Can I use previously generated trace file(s) such as 10046 or 10053 trace file(s) as an input to SQLT? 我可以使用以前生成的跟踪文件(例如10046或10053跟踪文件)作为SQLT的输入吗?
No SQLT works from a SQL_ID and it generated the information from the database at the time the SQLT is executed. It does not re-format 'old' 10046 or 10053 trace SQLT通过SQL_ID起作用,并且在执行SQLT时从数据库生成了信息。它不会重新格式化“旧” 10046或10053跟踪How do you execute the different SQLT Methods? 您如何执行不同的SQLT方法?
The different methods are initiated with individual scripts, one for each method. For example:What is the difference between XTRACT, XECUTE, XTRXREC and XPLAIN? XTRACT,XECUTE,XTRXREC和XPLAIN有什么区别?
These are the different methods by which you may execute the SQLT tool. 这些是执行SQLT工具的不同方法What should you run first XTRACT or XECUTE? 您应该先运行XTRACT还是XECUTE?
Since the XECUTE method provides runtime information, that is going to have more information that XTRACT, however it depends on the circumstances. If the SQL does not complete in a timely fashion then XTRACT is more suitable. If the query does not take too long to run then the Execute option is going to give you more information. Additionally, EXECUTE mode contains various segment and session information that cannot be delivered with XTRACT so we would suggest you try to get Execute if possible. 由于XECUTE方法提供了运行时信息,因此它将具有比XTRACT更多的信息,但是这取决于具体情况。如果SQL无法及时完成,则XTRACT更合适。如果查询运行时间不会太长,那么Execute选项将为您提供更多信息。此外,EXECUTE模式包含各种XTRACT无法提供的段和会话信息,因此我们建议您尝试获取Execute。If the SQL in question does not complete, is SQLT still useful? 如果有问题的SQL未完成,SQLT仍然有用吗?
If the problem SQL statement does not finish, then SQLT can still give you useful information. What it can provide depends on whether the cause of the delay is generating the access path or executing the query.Does sqlt actually execute the SQL statement or will collect info about executed statements only? sqlt实际执行SQL语句还是仅收集有关已执行语句的信息?
This depends on the mode used. For example, XTRACT will pick up previously executed statements, XECUTE will execute the statement 这取决于使用的模式。例如,XTRACT将选择先前执行的语句,XECUTE将执行该语句Is a hard parse of the analyzed SQL mandatory for the XECUTE method? Is this the purpose of the "/* ^^unique_id */" comment? XECUTE方法是否必须对分析的SQL进行硬解析?这是“ / * ^^ unique_id * /”注释的目的吗?
Yes. The hard parse is forced so as to guarantee the generation of the 10053 report. 是。强制进行硬解析,以确保生成10053报告。Using SQLT against queries that generate errors 对产生错误的查询使用SQLT
Some of the information that SQLT generates relies on the query in question being successful: SQLT生成的某些信息取决于所查询的是否成功:In such cases investigate the cause of the error before attempting to use SQLT. 在这种情况下,请在尝试使用SQLT之前调查错误的原因。Can SQLT be used in a distributed environment? 可以在分布式环境中使用SQLT吗?
Yes, we can use SQLT in a distributed environment. To do this, store SQLT on the remote node or nodes and the main node. When run on the main node, SQLT can then connect to the remote nodes and produce SQLT extracts from the remote nodes and package everything together. 是的,我们可以在分布式环境中使用SQLT。为此,请将SQLT存储在一个或多个远程节点和主节点上。在主节点上运行时,SQLT然后可以连接到远程节点,并从远程节点生成SQLT提取并将所有内容打包在一起Is the functionality provided in SQLTXPLAIN also available in RAT (Real Application Testing)? SQLTXPLAIN中提供的功能在RAT(真实应用程序测试)中也可用吗?
No.How does SQLT get historical information regarding SQL statements? SQLT如何获取有关SQL语句的历史信息?
If you are licensed to use AWR then SQLT can access AWR to access historical information. 如果您已获得使用AWR的许可,则SQLT可以访问AWR以访问历史信息。Does SQLT contain any graphical output? SQLT是否包含任何图形输出?
As its primary output, SQLT generates an HTML report (along with a number of supporting files in various formats). There are no 'graphics' or 'graphs' as such. SQLT in general presents text output related to the SQL in question grouped and formatted for ease of use. 作为其主要输出,SQLT生成一个HTML报告(以及许多各种格式的支持文件)。没有这样的“图形”或“图形”。通常,SQLT会显示与所讨论的SQL相关的文本输出,这些文本经过分组和格式化以易于使用。Can we use SQLT to identify different output for SQL on different clients? 我们可以使用SQLT在不同的客户端上为SQL标识不同的输出吗?
Yes. SQLT can help in diagnose this kind of issue. If a different plan is generated then the information related to that plan is recorded and can be compared to determine what is making the difference. 是。SQLT可以帮助诊断此类问题。如果生成了不同的计划,则记录与该计划相关的信息,并可以将其进行比较以确定造成差异的原因。Can you set a time for when to run sqlt. For example, for the case where the query only runs slowly in the middle of the night? 您可以设置运行sqlt的时间吗?例如,对于查询仅在深夜运行缓慢的情况?
There isn't a facility directly withing SQLT that allows this automation. You could obviously automate it with external tools. However, since SQLT is able to look at the execution history, as long as the execution details are still in the history, then there is no need to execute SQLT at the time of the issue. In this example, you should be able to come in during the morning after the issue and use the SQL_ID to get the ru·11·n details. 没有直接与SQLT配合使用的工具允许这种自动化。您显然可以使用外部工具将其自动化。但是,由于SQLT能够查看执行历史记录,因此只要执行详细信息仍在历史记录中,那么在发出问题时就无需执行SQLT。在此示例中,您应该能够在问题发出后的早晨进入,并使用SQL_ID获取运行详细信息。How do I Interpret and analyze the main report? 如何解释和分析主报告?
If a SQL statement takes a long time, then collect information via SQLT. You then need to analyze the information which requires SQL Tuning expertise. If you do not have that expertise then consider getting someone else to help you such Advanced Customer Services or other consulting options or use the SQL Tuning Advisor (assuming that you have the required licenses). You can find some usage suggestions in the following document: 如果一条SQL语句花费很长时间,则可以通过SQLT收集信息。然后,您需要分析需要SQL Tuning专业知识的信息。如果您不具备该专业知识,则可以考虑让其他人来帮助您,例如高级客户服务或其他咨询选项,或者使用SQL Tuning Advisor(假设您具有必需的许可证)。您可以在以下文档中找到一些使用建议:Document 1922234.1 SQLT Main Report: Usage Suggestions
Document 1456176.1 Oracle Database Advisor Webcast Schedule and Archive recordings
=> "Database Tuning - Using SQLTXPLAIN To Diagnose SQL Statements Performing Poorly "
Document 199083.1 Master Note: SQL Query Performance Overview
What are the main things to look for in the observations section? 在观察部分中需要寻找的主要内容是什么?
The key findings in the observations section are different from case to case. Something that is unimportant in one report may be crucial for another.For example, an index may have been dropped on one of the tables in a query. This might change the access path in some queries but have no affect on others. Because of this there is no way to mark something one finding as as more critical than another. The observations are simply presented as a "heads up" for evaluation as otherwise there is a possibility of supplying misleading information. There is more on interpreting the observations section in the following article: 观察部分中的关键发现因案例而异。一个报表中不重要的内容可能对另一个报表至关重要,例如,索引可能已删除到查询中的一个表上。这可能会更改某些查询中的访问路径,但不会影响其他查询。因此,无法将某项发现标记为比另一项发现更为关键。观察结果只是作为“提示”进行评估,否则可能会提供误导性信息。下一篇文章中有更多有关解释观察部分的内容:Document 1922234.1 SQLT Main Report: Usage Suggestions
Is information from memory 'better' than the information from the DBA_HIST_* views? 来自内存的信息是否比来自DBA_HIST_ *视图的信息“更好”?
The answer is yes. SQLT is able to provide more detailed information on an execution plan when it is located within the library cache than within the AWR. (This is not a SQLT limitation, but rather, SQLT is limited to which details of the execution plan are retained in the AWR.) For example, when a FILTER operation is displayed from library cache, the "More" column displays Filter Predicates and Projection. However, these details are not available to display when the only available source of the execution plan is the AWR. Both the information from memory and from AWR that SQLT uses may be aggregated. This means that if a single execution performs differently but uses the same plan then it may be difficult to identify that. In that case the AWR SQL Report is useful. See: awrsqrpt.sql from: 答案是肯定的。当SQLT位于库缓存中而不是AWR中时,它能够提供有关执行计划的更多详细信息。(这不是SQLT的限制,而是SQLT限于将执行计划的详细信息保留在AWR中。)例如,当从库缓存中显示FILTER操作时,“更多”列将显示过滤谓词和投影。但是,当执行计划的唯一可用来源是AWR时,这些详细信息将无法显示。SQLT使用的来自内存和AWR的信息都可以汇总。这意味着,如果单个执行的执行结果不同,但使用相同的计划,则可能难以识别。在这种情况下,AWR SQL报告很有用。请参阅:awrsqrpt.sql,来自:Document 748642.1 How to Generate an AWR Report and Create Baselines 如何生成AWR报告和创建基准
If the database structure has not changed, why is there more than one explain plan in SQLT? 如果数据库结构没有更改,为什么在SQLT中有多个解释计划?
There are many reasons for the same SQL to generate different plans. One of these of course is that the underlying structures have changed but others include using different bind variable values and histograms to drive different execution plans, multiple sessions using slightly different optimizer 'versions' by changing parameters and data types or data lengths differing within one application as compared to another application. For more details on the various reasons see: 相同的SQL生成不同计划的原因很多。其中之一当然是基础结构已更改,但其他结构包括使用不同的绑定变量值和直方图来驱动不同的执行计划,通过更改一个应用程序中不同的参数和数据类型或数据长度,使用不同的优化器“版本”进行多个会话与其他应用程序相比 有关各种原因的更多详细信息,请参见:Document 296377.1 Troubleshooting: High Version Count Issues
How can I implement an explain plan suggested by SQLT? 如何实施SQLT建议的解释计划?
SQLT does not suggest execution plans - SQL Tuning Advisor does that. If you have the Oracle Tuning Pack license then SQLT can execute SQL Tuning Advisor and this may suggest a better plan for the SQL. You can implement that via a SQL_profile. See: SQLT不建议执行计划-SQL Tuning Advisor会这样做。如果您拥有Oracle Tuning Pack许可证,则SQLT可以执行SQL Tuning Advisor,这可能会建议一个更好的SQL计划。您可以通过SQL_profile来实现。看到:Document 271196.1 Automatic SQL Tuning - SQL Profiles.
If you want to fix a particular plan that has already been detected then see review the dynamic readme generated by any of the main methods and look for "Create SQL Plan Baseline from SQL Set". This documents using SQL Plan Management SPM through a SQL Set. 如果要修复已检测到的特定计划,请参阅查看由任何主要方法生成的动态自述文件,并查找“Create SQL Plan Baseline from SQL Set”。本文档通过SQL集使用SQL计划管理SPM进行记录。How do I delete an existing SQL Profile created by SQLT? 如何删除SQLT创建的现有SQL配置文件?
As mentioned, SQLT does not create profiles - SQL Tuning Advisor does that. If you have the Oracle Tuning Pack license then SQLT can execute SQL Tuning Advisor and this may suggest a better plan for the SQL. You can implement that via a SQL_profile. To delete a profile you use the standard procedure for deleting any SQL profile. See: 如前所述,SQLT不会创建配置文件-SQL Tuning Advisor会这样做。如果您拥有Oracle Tuning Pack许可证,则SQLT可以执行SQL Tuning Advisor,这可能会建议一个更好的SQL计划。您可以通过SQL_profile来实现。要删除配置文件,请使用标准过程删除所有SQL配置文件。看到:Document 271196.1 Automatic SQL Tuning - SQL Profiles.
Does SQLT take a lot of Database resources to execute? SQLT是否需要大量数据库资源来执行?
The amount of resource used depends on the method used. Some methods just extract plans from the repository and so are relatively light. Other methods (such as the XECUTE method) may need to run the SQL which means the resource taken is at least the resource needed to execute that statement. Usually the benefit of executing and capturing the execution of the statement is much higher than the few minutes it takes to run when compared to not having that information. 使用的资源量取决于使用的方法。有些方法只是从存储库中提取计划,因此相对较轻。其他方法(例如XECUTE方法)可能需要运行SQL,这意味着所占用的资源至少是执行该语句所需的资源。通常,与没有该信息相比,执行和捕获语句执行所带来的好处要比运行该几分钟所花费的时间要多得多。How much memory does SQLT use? SQLT使用多少内存?
SQLT is not resource intensive. It is just a script. If it runs for 10 mins then its the equivalent of running any other script for 10 mins. SQLT不会占用大量资源。这只是一个脚本。如果运行10分钟,则相当于运行任何其他脚本10分钟。Does SQLT work with --Insert application here-- SQLT是否可与-在此处插入应用程序-
SQLT is a series of SQL scripts and a repository that uses SQL commands run against the data dictionary and the repository to produce a report. It can work against any SELECT generated by any application software. SQLT是一系列SQL脚本,使用SQL命令的存储库针对数据字典和存储库运行以生成报告。它可以与任何应用程序软件生成的任何SELECT一起使用。Are there any limitations on using SQLT in a Database running EBusiness Suite? 在运行电子商务套件的数据库中使用SQLT是否有任何限制?
No.Does SQLT work with RAC and Exadata? SQLT是否可以与RAC和Exadata一起使用?
Yes.Is any Exadata specific information captured in report for the SQL? SQL报表中是否捕获了任何Exadata特定信息?
Yes some parameters and IO calibration is captured but not much else. From the SQL Tuning point of view Exadata is not very different to a standard database. 是的,捕获了一些参数和IO校准,但没有其他很多。从SQL Tuning的角度来看,Exadata与标准数据库没有太大区别What is the difference between SQLT and the SQL Performance Analyzer. SQLT和SQL Performance Analyzer之间有什么区别。
The tools were designed for totally different reasons. SQL Performance Analyzer is part of Real Application Testing (RAT) suite and enables you to assess the impact of system changes on the response time of SQL statements. SQLT is to help you understand what the root cause of an issue with a particular statement is. 这些工具的设计基于完全不同的原因。SQL Performance Analyzer是Real Application Testing(RAT)套件的一部分,使您能够评估系统更改对SQL语句的响应时间的影响。SQLT可以帮助您了解特定语句问题的根本原因是什么。Is SQLT integrated into Oracle Enterprise Manager (OEM)/Grid Control? SQLT是否集成到Oracle Enterprise Manager(OEM)/Grid Control中?
No.Why Would you want to use SQLT when you have OEM? 有OEM时为什么要使用SQLT?
OEM and SQLT performs two different job and are not mutually exclusive Oracle Enterprise Manager Database Control is the primary tool for managing your Oracle database. SQLT is a tool specifically for facilitating the tuning of individual SQL statements. OEM和SQLT执行两种不同的工作,并且不是互斥的Oracle Enterprise Manager Database Control是管理Oracle数据库的主要工具。SQLT是专门用于简化单个SQL语句的工具。What is the SQLT Testcase Generator? 什么是SQLT测试用例生成器?
When SQLT gathers information about a candidate SQL statement, it automatically builds a testcase to enable the current plan in the SQL to be reproduced. It does this by storing the metadata of all the objects involved (including views and materialized views) in the query in a testcase schema so that it can be recreated on a test schema. No user data is stored, but the optimizer statistics are recorded so that the plan can be recreated. Most of the time data is not necessary to reproduce the plan (typically,it is only necessary to reproduce performance or incorrect results). See the following for more details: 当SQLT收集有关候选SQL语句的信息时,它会自动构建一个测试用例以使SQL中的当前计划能够被重现。它通过在测试用例模式中存储查询中涉及的所有对象(包括视图和实例化视图)的元数据来做到这一点,以便可以在测试模式中重新创建它。没有存储用户数据,但记录了优化程序统计信息,以便可以重新创建计划。在大多数情况下,不需要数据来重现计划(通常,仅需要重现性能或不正确的结果)。有关更多详细信息,请参见以下内容:Document 1470811.1 How to Use SQLT (SQLTXPLAIN) to Create a Testcase Without Row Data 如何使用SQLT(SQLTXPLAIN)创建没有行数据的测试用例
Document 1465741.1 How to Use SQLT (SQLTXPLAIN) to Create a Testcase Containing Application Data 如何使用SQLT(SQLTXPLAIN)创建包含应用程序数据的测试用例
Does SQLT Testcase generate user data? SQLT Testcase是否生成用户数据?
No. It records the structure and the statistics only. These are all we need to reproduce the access path. 它仅记录结构和统计信息。这些都是我们复制访问路径所需要的。In order to reproduce a SQLT Testcase, is the same hardware required on each server? 为了重现SQLT测试用例,每个服务器上是否需要相同的硬件?
Usually no. SQLT records system statistics and these are usually sufficient to make the target system "think" that it is the same as the source SQLT记录系统统计信息,这些通常足以使目标系统“认为”它与源系统相同Can I have multiple system stats on a test system? 一个测试系统上可以有多个系统统计信息吗?
SQLT does not contain a specific facility to load up multiple sets of system statistics, nor is there a history for system statistics. You can however save and restore different system statistics manually but there is only one set of system stats available at any time. See: SQLT不包含用于加载多组系统统计信息的特定功能,也没有用于系统统计信息的历史记录。但是,您可以手动保存和恢复不同的系统统计信息,但是随时只有一组系统统计信息可用。看到:Document 149560.1 How to Collect and Display System Statistics (CPU and IO) for CBO use 如何为CBO使用收集和显示系统统计信息(CPU和IO)
Document 470316.1 Using Actual System Statistics (Collected CPU and IO information)
使用实际系统统计信息(收集的CPU和IO信息)
Document 153761.1 System Statistics: Scaling the System to Improve CBO optimizer 系统统计信息:扩展系统以改进CBO优化器
Document 427939.1 System Statistics: How to gather system stats for a particular batch of work 系统统计信息:如何收集特定批次工作的系统统计信息
Do we need to take a backup before running SQLT? 在运行SQLT之前是否需要进行备份?
It is generally prudent to backup before installing any software on a production system. 在生产系统上安装任何软件之前,通常应谨慎备份。Can you use SQLT to analyze a SQL statement just with a source system? 您可以仅使用源系统使用SQLT来分析SQL语句吗?
It is best to analyze SQLT data on a source system since that is where the runtime information for the statement is recorded. 最好在源系统上分析SQLT数据,因为这是记录语句的运行时信息的位置。Can we use SQLT testcase to reproduce Oracle materialized view issue on a Test system? 我们可以使用SQLT测试用例在测试系统上重现Oracle实例化视图问题吗?
Yes. All metadata is transferred to a special schema for the testcase together with the associated statistics and environment etc to allows us to reproduce the plan. No Data is transferred. 所有元数据以及相关的统计信息和环境等都将转移到测试用例的特殊模式,以使我们能够重现计划。没有数据传输。Are there any special considerations when working with dictionary and fixed objects? Do they map to one schema too? 使用字典和固定对象时是否有特殊注意事项?它们也映射到一个模式吗?
Dictionary/fixed objects are handled just the same as any other objects; if you have queries containing dictionary/fixed object then they are extracted into a special schema for the testcase together with the associated statistics and environment etc to allows us to reproduce the plan. No Data is transferred. 字典/固定对象的处理方式与其他任何对象相同。如果您有包含字典/固定对象的查询,则将它们与相关的统计信息和环境等一起提取到测试用例的特殊模式中,以使我们能够重现计划。没有数据传输。If we use Real Application Cluster (RAC) for our Production database, and no RAC for our Development database, then does the testcase still reproduce the SQL Plan in the Development database ? 如果我们将Real Application Cluster(RAC)用于生产数据库,而没有将RAC用于开发数据库,那么测试用例是否仍在Development数据库中重现SQL计划?
Yes. You can reproduce the same plan in DEV regardless of RAC or not. 不论是否使用RAC,都可以在DEV中重现同一计划。Is the Objective of SQLT Testcase to only reproduce the same execution plan, not help to retrieve the best execution plan? SQLT Testcase的目标是否仅重现相同的执行计划,而无助于检索最佳执行计划?
SQLT Testcase reproduces the same execution plan so that you can then use tools to determine a better plan if that is possible. Tools such SQL Tuning Advisor enable that and SQLT integrates that if you have the relevant licenses. SQLT Testcase重现了相同的执行计划,因此您可以使用工具来确定更好的计划(如果可能)。如果您具有相关的许可证,则诸如SQL Tuning Advisor之类的工具将启用该功能,并且SQLT会将其集成。In SQLT Version 11.4.4.8 and below "!=" is converted into "=", potentially giving wrong information? 在SQLT 11.4.4.8及更低版本中,“!=”转换为“ =”,可能会提供错误的信息?
This issue is fixed in SQLT Version 11.4.4.9 and above. As a workaround convert instances of "!=" in the input SQL into "<>". To find your current SQLT Version, run the following SQL as the SYS or SQLTXPLAIN user: 此问题已在SQLT 11.4.4.9及更高版本中修复。解决方法是将输入SQL中的“!=”实例转换为“ <>”。要查找您当前的SQLT版本,请以SYS或SQLTXPLAIN用户身份运行以下SQL:COL sqlt_version FOR A40;
SELECT
'SQLT version number: '||sqltxadmin.sqlt$a.get_param('tool_version')||CHR(10)||
'SQLT version date : '||sqltxadmin.sqlt$a.get_param('tool_date')||CHR(10)||
'Installation date : '||sqltxadmin.sqlt$a.get_param('install_date') sqlt_version
FROM DUAL
/
SQLT_VERSION
----------------------------------------
SQLT version number: 11.4.4.8
SQLT version date : 2012-09-27
Installation date : 2012-10-24/09:56:12
What is the CBO? 什么是CBO?
CBO is the Cost-Based Optimizer. CBO是基于成本的优化器。Oracle Database Online Documentation 12c Release 1 (12.1)
Database Administration
Database SQL Tuning Guide
Chapter 4 Query Optimizer Concepts
http://docs.oracle.com/database/121/TGSQL/tgsql_optcncpt.htm#TGSQL192
What is AWR? 什么是AWR?
AWR is the Automatic Workload Repository. See document: AWR是自动工作量存储库。查看文件:Document 1363422.1 Automatic Workload Repository (AWR) Reports - Start Point
In the SQLT report, why is the "Last rows" not "Actual rows"? 在SQLT报表中,为什么“最后一行”不是“实际行”?
"Last rows" is used because those numbers are related to the last execution. If this varies for some reason then this information may be important. The data is the same you can get from RUNSTATS_LAST in DBMS_XPLAN.DISPLAY_CURSOR, please refer to DBMS_XPLAN reference document for details. 使用“最后一行”是因为这些数字与上次执行有关。如果由于某些原因而有所不同,则此信息可能很重要。数据与您从DBMS_XPLAN.DISPLAY_CURSOR中的RUNSTATS_LAST获得的数据相同,有关详细信息,请参考DBMS_XPLAN参考文档。These questions are taken from the Original FAQ section within the "sqlt_instructions.html" in the sqlt.zip downloadable from: 这些问题来自sqlt.zip中“ sqlt_instructions.html”中的“原始常见问题”部分,可从以下网站下载:
Document 215187.1 SQLT (SQLTXPLAIN) - Tool That Helps To Diagnose SQL Statements Performing Poorly
What is new in this SQLT release? 此SQLT版本中有哪些新功能?
A summary of recent SQLT changes can be found in file: "sqlt/doc/sqlt_changes.html" 可以在以下文件中找到最近SQLT更改的摘要: "sqlt/doc/sqlt_changes.html"How do I make a SQL statement use a plan that I can only achieve by using CBO Hints? 如何使SQL语句使用只能通过使用CBO提示才能实现的计划?
The question assumes you cannot modify the original SQL for whatever reason. 该问题假定您出于任何原因都无法修改原始SQL。ORA-00942: table or view does not exist: Error at line 1: SELECT prev_sql_id, prev_child_number FROM sys.my_v$session
Using XECUTE method and getting error above. It means the "script.sql" passed to this method is bogus. Your script must be able to execute stand-alone without errors. 使用XECUTE方法并出现上述错误。这意味着传递给此方法的“ script.sql”是伪造的。您的脚本必须能够独立执行且没有错误。"ORA-07445" or "ORA-03114: not connected to ORACLE".
Review alert.log and the trace referenced by this error. If failed SQL uses V$SQL_PLAN, then there is a database bug in your system. You can pursue a fix logging a ticket and providing alert.log and the referenced trace. SQLT can workaround this bug with some loss of functionality: 查看alert.log和此错误引用的跟踪。如果失败的SQL使用V$SQL_PLAN,则系统中存在数据库错误。您可以进行记录日志的修复,并提供alert.log和引用的跟踪。SQLT可以通过一些功能丧失来解决此错误:EXEC sqltxadmin.sqlt$d.set_param('predicates_in_plan', 'N');
If alert.log includes error : 如果alert.log包含错误: BEGIN CTXSYS.CTX_REPORT.CREATE_INDEX_SCRIPT(index_name => :name, report => :report); END;
then try SQLT for a 2nd time. If problem persists, then apply following workaround with minimal loss of functionality: 然后第二次尝试使用SQLT。如果问题仍然存在,请应用以下解决方法,同时将功能损失降至最低: EXEC sqltxadmin.sqlt$d.set_param('domain_index_metadata', 'Y');
How do I analyze a distributed query? 如何分析分布式查询?
Install this SQLT tool in your local and remote nodes. Then on your local node make SQLT aware of the remote nodes by registering the database links your SQL or the dependent objects referenced: 在本地和远程节点上安装此SQLT工具。然后,在本地节点上,通过注册数据库链接来使SQLT知道远程节点,这些链接是您的SQL或引用的从属对象:EXEC sqltxadmin.sqlt$i.register_db_link('db_link_name');
XTRACT or XECUTE methods are taking too long. XTRACT或XECUTE方法花费的时间太长。
Review corresponding log file. The culprit could be the 11g Test Case Builder TCB and/or the SQL Tuning Advisor STA. These two utilities are usually time consuming. You can sacrifice their functionality and improve the performance of SQLT by disabling SQLT access to the TCB and reducing the threshold time for the STA: 查看相应的日志文件。罪魁祸首可能是11g测试用例构建器TCB和/或SQL Tuning Advisor STA。这两个实用程序通常很耗时。您可以通过禁用对TCB的SQLT访问并减少STA的阈值时间来牺牲其功能并提高SQLT的性能:EXEC sqltxadmin.sqlt$a.set_param('test_case_builder', 'N');
EXEC sqltxadmin.sqlt$a.set_param('sta_time_limit_secs', '30');
If SQLT still takes a long time, and the schema objects behind your SQL contain a large number of sub-partitions, you can reduce the granularity of the data collected: 如果SQLT仍然花费很长时间,并且SQL后面的模式对象包含大量的子分区,则可以减小收集的数据的粒度: EXEC sqltxadmin.sqlt$a.set_param('c_gran_segm', 'PARTITION');
EXEC sqltxadmin.sqlt$a.set_param('c_gran_cols', 'PARTITION');
EXEC sqltxadmin.sqlt$a.set_param('c_gran_hgrm', 'PARTITION');
How do I register additional SQLT users? 如何注册其他SQLT用户?
SQLT users must be granted the SQLT_USER_ROLE role. To grant the SQLT_USER_ROLE, execute the following connected as SYS: 必须授予SQLT用户SQLT_USER_ROLE角色。要授予SQLT_USER_ROLE,执行以下以SYS连接的命令:GRANT SQLT_USER_ROLE TO @Application_User;
Can I change the SQLT staging directory? 我可以更改SQLT登台目录吗?
Yes, use "sqlt/utl/sqltcdirs.sql" passing the full directory path. This path cannot contain the "?" or "*" symbols and it is case sensitive in most systems. This directory must exist in the server and ORACLE must have read/write access to it. The recommended directory is UDUMP. Aliases are not allowed. 是的,使用"sqlt/utl/sqltcdirs.sql" 传递完整目录路径。此路径不能包含“?” 或“ *”符号,并且在大多数系统中区分大小写。该目录必须存在于服务器中,并且ORACLE必须对其具有读/写访问权限。推荐的目录是UDUMP。不允许使用别名。How to suppress the export of the SQLT repository? 如何抑制SQLT存储库的导出?
SQLT repository is needed to generate a Test Case TC and to troubleshoot a query performing poorly. If you are sure the exported repository is not needed, use this command to disable its automatic export: 需要SQLT存储库来生成测试用例TC并解决查询性能差的问题。如果确定不需要导出的存储库,请使用以下命令禁用其自动导出:EXEC sqltxadmin.sqlt$a.set_param('export_repository', 'N');
What is my SQLT tool version? 我的SQLT工具版本是什么?
SELECT sqltxadmin.sqlt$a.get_param('tool_version') FROM DUAL;
How to keep the SQLT repository small? 如何保持较小的SQLT存储库?
You can purge the SQLT repository periodically by using provided script: 您可以使用提供的脚本定期清除SQLT存储库:How can I expedite "SELECT COUNT(*)" on application Tables? 如何在应用程序表上加速“ SELECT COUNT(*)”?
If you look at the SQLT log file and identify that most time is spent when SQLT is performing a COUNT(*) in all related application tables, then you can suppress this operation with minimum functionality impact: 如果查看SQLT日志文件并确定SQLT在所有相关应用程序表中执行COUNT(*)时花费的时间最多,则可以以最小的功能影响抑制此操作:EXEC sqltxadmin.sqlt$a.set_param('count_star_threshold', '0');
How can I expedite "Taking a snapshot of some Data Dictionary objects"? 如何加快“拍摄某些数据字典对象的快照”?
A snapshot of some Data Dictionary objects takes between a couple of minutes and up to several hours, depending on the size of the data dictionary. This is the last step of the installation. If killed, it will be automatically executed when XECUTE is first used.SET SERVEROUT ON;
EXEC trca$g.set_param('capture_extents', 'N');
EXEC trca$t.refresh_trca$_dict_from_this;
If still "Taking a snapshot of some Data Dictionary objects" takes longer than several hours, it can be disabled altogether with significant loss of functionality, by executing these commands connecting as SQLTXPLAIN: 如果仍然花费“几个数据字典对象的快照”的时间超过几个小时,则可以通过执行以下以SQLTXPLAIN连接的命令将其完全禁用,而功能将受到严重影响: SET SERVEROUT ON;
EXEC trca$g.set_param('refresh_dict_repository', 'N');
EXEC trca$t.refresh_trca$_dict_from_this;
How do I provide feedback on this SQLT tool? 如何提供有关此SQLT工具的反馈?
We have various threads available where you can ask questions, get help from others, and share your experiences with SQLTXPLAIN: 我们提供了各种线程,您可以在这些线程中提出问题,寻求他人的帮助以及与您分享使用SQLTXPLAIN的经验:SQLTXPLAIN (SQLT): General Discussion
SQLTXPLAIN: SQLT Installation Issues
SQLTXPLAIN: Dealing with Long Execution Times
SQLTXPLAIN: Dealing with Errors reported in SQLT MAIN report
SQLTXPLAIN: Using SQLT on a Stand-by or Dataguard
SQLTXPLAIN: Interpreting and Understanding SQLT Output
Document 215187.1 SQLT (SQLTXPLAIN) - Tool That Helps To Diagnose SQL Statements Performing Poorly
SQLT Webcasts
An ongoing series of webcasts on SQLT (and related tools such as SQLHC) are being presented and recorded.Document 740966.1 Advisor Webcast Current Schedule
Document 1456176.1 Oracle Database Advisor Webcast Archives
Document 740964.1 Advisor Webcast Archived Recordings
NOTE:1470811.1 - How to Use SQLT (SQLTXPLAIN) to Create a Testcase Without Row Data
NOTE:470316.1 - Using Actual System Statistics (Collected CPU and IO information)
NOTE:2146816.1 - How to Generate a SQLT of a SQL Statement That Hangs or Raises an Error
NOTE:740966.1 - Advisor Webcasts: Current Schedule and Archived Recordings
NOTE:243755.1 - Script to produce HTML report with top consumers out of PL/SQL Profiler DBMS_PROFILER data
NOTE:1456176.1 - Oracle Database Advisor Webcast Schedule and Archive recordings
NOTE:740964.1 - Document only contains links to archived recordings, please access document 740966.1 for the latest schedule.
NOTE:215187.1 - All About the SQLT Diagnostic Tool
NOTE:427939.1 - System Statistics: How to gather system stats for a particular batch of work
NOTE:1363422.1 - Automatic Workload Repository (AWR) Reports - Main Information Sources
NOTE:149560.1 - How to Collect and Display System Statistics (CPU and IO) for CBO use
NOTE:153761.1 - System Statistics: Scaling the System to Improve CBO optimizer
NOTE:1366133.1 - SQL Tuning Health-Check Script (SQLHC)
NOTE:1455583.1 - SQL Tuning Health-Check Script (SQLHC) Video
NOTE:1614107.1 - SQLT Usage Instructions
NOTE:1417774.1 - FAQ: SQL Health Check (SQLHC) Frequently Asked Questions
NOTE:1465741.1 - How to Use SQLT (SQLTXPLAIN) to Create a Testcase Containing Application Data