Oracle 如何使用 SQLT 进行 SQL 调优

3b38c11c65f90ade574ea4240aa2be74.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle 如何使用 SQLT 进行 SQL 调优,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!

SQLT:SQLTXPLAIN,也被称为 SQLT,是由 Oracle 服务器技术中心- ST CoE 提供的工具。SQL main methods 输入一条 SQL 语句并输出一组诊断文件。这些文件通常用于诊断执行不良的 SQL 语句。SQL 连接到数据库并收集执行计划、基于成本的Optimizer CBO 统计信息、模式对象元数据、性能统计信息、配置参数和影响所分析SQL的性能的类似元素。对于 tuning SQL, SQLT 需要一定程度的专业知识才能最大限度地利用它。对于大多数问题,我们建议您首先使用 SQL 运行状况检查(SQLHC:SQL Health Check)检查查询,如果无法解决问题,则转到 SQLT。

SQLT main methods 连接到数据库并收集执行计划、基于成本的优化器 CBO 统计信息、架构对象元数据、性能统计信息、配置参数以及影响正在分析的一个 SQL 的性能的其他元素。

在安装此工具期间,将创建 2 个用户 SQLTXADMIN 和 SQLTXPLAIN 以及一个角色 SQLT_USER_ROLE。sql 存储库由用户 SQLTXPLAIN 拥有。每次使用任何 main 方法时,sql 用户都需要提供 SQLTXPLAIN 密码。SQLTXPLAIN 用户被授予以下系统权限:
• CREATE SESSION
• CREATE TABLE

PL/SQL包和视图的 SQL 集由用户SQLTXADMIN拥有。该 SQLTXADMIN 用户被锁定并由随机密码标识。SQLTXADMIN 被授予以下系统特权:
• ADMINISTER SQL MANAGEMENT OBJECT
• ADMINISTER SQL TUNING SET
• ADVISOR
• ALTER SESSION
• ANALYZE ANY
• SELECT ANY DICTIONARY
• SELECT_CATALOG_ROLE

所有的 SQL 用户在使用任何main方法之前都必须被授予 SQLT_USER_ROLE。该 SQLT_USER_ROLE 角色被授予以下系统权限:
• ADVISOR
• SELECT_CATALOG_ROLE

注意:不建议使用 SYS 或其他 DBA 账户来运行主要方法,因为收集可能会失败。授予 SQLT_USER_ROLE 并运行主要方法的最佳用户是应用程序的所有者。

如果必须使用 SYS 或其他 DBA 账户,那么在 12c 中,由于 PL/SQL 的安全模型的更改,需要手动执行额外的授权。要解决此更改,需要在 SYS 或 DBA 账户上授予 SQLTXADMIN 用户 INHERIT PRIVILEGES 继承特权。

GRANT INHERIT PRIVILEGES ON USER SYS TO SQLTXADMIN;

下载 SQLT

MOS 下载地址:Download SQLTXPLAIN (SQLT)  (Doc ID 215187.1)
sqlt_10g_11g_12c_18c_19c_5th_June_2020.zip,也可添加我个人微信【JiekeXu_DBA】获取。

墨天轮下载地址:https://www.modb.pro/doc/86093

5f31f4461458c526e9d27905d07719f6.png

安装方法

unzip sqlt_10g_11g_12c_18c_19c_5th_June_2020.zip

以 SYS 用户执行 ./sqlt/install/sqcreate.sql 脚本,需要输入以下信息。

bc40888b454659ae09d4e11b74531403.png

这里说一下 Oracle pack license 这里,SQLT 本身不需要 licence,输入 T 的话收集的结果会包含 sql tuning 结果,输入 D 的话会包含 awr 报告信息,输入 N 这里就不包含这两项信息。如果不想使用 SQLT 的话可以使用脚本 ./sqlt/install/sqdrop.sql 直接卸载。

安装过程示例

这里以单机 12.2.0.1 多租户环境为例,首先进入到容器 JIEKEXUPDB1 下,可创建 SQLT 用户 SQLTXPLAIN,也可以不用建,跑脚本时自动创建 SQLTXPLAIN 用户。

90420a822b2879b414000ece142f33d2.png

然后执行脚本 @sqcreate.sql 输入连接串,创建 SQLT 用户的密码以及默认表空间等信息。

37903fa9bcce58b96e58087bf3660bfd.png

70c567c24ec774a304f4a8fb28e323a4.png

4f57c7745d3f985d658aa7d79a575abe.png

输入 T 后稍等一会当看到如下信息说明安装成功。

SQLT users must be granted SQLT_USER_ROLE before using this tool.

SQCREATE completed. Installation completed successfully.

然后可以把 SQLT 角色 SQLT_USER_ROLE 给予其他业务用户,例如 SCOTT 等其他业务用户。

03debb9d3375acfb123c337ac0bc9f58.png

涉及到的主要 SQL

SYS@JiekeXu> alter session set container=JIEKEXUPDB1;
SYS@JiekeXu> create user SQLTXPLAIN identified by SQLTXPLAIN; --当然也可以不用提前创建用户
SYS@JiekeXu> grant CREATE SESSION,CREATE TABLE TO  SQLTXPLAIN;
SYS@JiekeXu> @sqcreate.sqladding: 221113152749_01_sqcreate.log (deflated 87%)
Optional Connect Identifier (ie: @PROD): @JIEKEXUPDB1 <--- 输入 TNS 连接名Password for user SQLTXPLAIN:      <--- 输入专用用户密码
Re-enter password:                 <--- 再次输入专用用户密码Type YES or NO [Default NO]: YES     <--- 输入专用用户表空间和临时表空间名,大写
Default tablespace [USERS]: USERS
Temporary tablespace [TEMP]: TEMP
Main application user of SQLT: SQLTXPLAIN  <--- 输入专用用户名,大写"T" if you have license for Diagnostic and Tuning
"D" if you have license only for Oracle Diagnostic
"N" if you do not have these two licensesOracle Pack license [T]: T               <--- 输入 license T 
SQLT users must be granted SQLT_USER_ROLE before using this tool.SQCREATE completed. Installation completed successfully.SYS@JiekeXu> GRANT INHERIT PRIVILEGES ON USER SYS TO SQLTXADMIN;
SYS@JiekeXu> grant SQLT_USER_ROLE to sys;
SYS@JiekeXu> grant SQLT_USER_ROLE to SCOTT;

d68ef3b0e7b98d35d4b79dd9fce6bd49.png

主要的执行方法一般是 sqltxtract.sql 加 sqlid, 输入 SQLT 密码,然后便会生成 sqlt+日期+sqlid 结尾的 zip 包,解压后内容很多,我们一般情况下只需要关注 sqlt*lite.html 和 sqlt*main.html 结尾的文件就好,sqltlite.html 算是轻量级的 SQLT,sqltmain.html 是详细的信息。XTRACT Method、XECUTE Method 等其他方法可参考 SQLT 的安装介绍文档:sqlt_instructions.html

0c836f8e3f5f0401e0bb6c50cfd46fc5.png

SCOTT@jiekexupdb1> select count(*) from scott.t a,scott.test b where a.object_id=b.object_id /*JIekeXu*/; COUNT(*)
----------72783
SCOTT@jiekexupdb1> select sql_id,sql_text from v$sql where sql_text like '%JIekeXu%' and sql_text not like '%like%';SQL_ID
-------------
SQL_TEXT
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4mvsgjurg63fd
select count(*) from scott.t a,scott.test b where a.object_id=b.object_id /*JIekeXu*/SCOTT@jiekexupdb1>@/home/oracle/tmp/SQLT/sqlt/run/sqltxtract.sql 4mvsgjurg63fd--然后输入 SQLT 密码即可。13:57:03 SYS@test> @/u01/soft/SQLT/sqlt/run/sqltxtract.sql 66jty4hfyt8mh SQLTXPLAIN     --也可以直接跟 sqltxplain 密码

再次说明不建议使用 SYS 或其他 DBA 账户来运行 main 方法,因为集合可能会失败。

授予和运行 main 方法的最佳用户是应用程序的所有者。

执行期间可查看这个视图监控执行过程:

SELECT * FROM SQLTXADMIN.sqlt$_log_v;

然后会生成一个以 sqlt+日期+sqlid_S.zip 的文件,sqlt_20221116_1428_60jj9axkt0v9u_S.zip  解压后有如下 20 个文件:

5eaf69b6c513f60e9a41d95c8da13d8c.png

sqlt_s51483_10053_i1_c1_extract.trc  sqlt_s51483_cell_state.zip  sqlt_s51483_main.html               sqlt_s51483_sqldx.zip      sqlt_s51483_tcx.zip
sqlt_s51483_addmrpt_0007.zip         sqlt_s51483_driver.zip      sqlt_s51483_opatch.zip              sqlt_s51483_tcb.zip        sqlt_s51483_tc.zip
sqlt_s51483_ashrpt_0007.zip          sqlt_s51483_lite.html       sqlt_s51483_readme.html             sqlt_s51483_tc_script.sql  sqlt_s51483_trc.zip
sqlt_s51483_10053_explain.trc  sqlt_s51483_awrrpt_0007.zip          sqlt_s51483_log.zip         sqlt_s51483_sql_detail_active.html  sqlt_s51483_tc_sql.sql


sqlt*lite.html 内容

这个文件算是轻量级的 sqlt 了,里面包含六大块内容,主要涉及到表、索引、索引列、执行计划这些信息。

76a7ec4b7d59084d94a72bf6890b1fe5.png

45735315e2730a5657935c389b4664ae.png

sqlt*main.html 内容

f54d32c445c7bfdf834e736a47ead3e6.png

215187.1 SQLT XTRACT 19.1.200226  Report: sqlt_s51484_main.html

Main 文件内容更加丰富,主要包含以下八类信息。带有下划线的内容点击均可进入到相应的模块,大家可自行点击查看,尤其 Golbal 相关的信息,更为重要,建议大家详细查看。
fc5ec0920a22cfc1fc80fcf48924769e.png
如下示例,列出了数据库中非默认的优化器参数及参数值。

e7a8079e2701e111e355169304311a3a.png

SQLHC

这里顺便说一句比 SQLT 更简洁的 sqlhc 工具,这个工具收集的信息也很全面,值得大家尝试,研读。

上传 sqlhc 文件,公众号后台回复【sqlhc】获取,输入 T 和 sqlid 即可生成。sqlhc 是 SQL health check的简称,能够收集sql相关的表、索引、统计信息、优化器参数、SQL执行情况、等待事件等信息,可以帮你检查SQL存在的问题并优化 SQL。

执行方法:sqlplus / as sysdba
SQL> @/home/oracle/tmp/sqlhc.sql T 9a4tv1dduu9u4
或者
SQL> @/home/oracle/tmp/sqlhc.sql
Parameter 1:
Oracle Pack License (Tuning, Diagnostics or None) [T|D|N] (required)
Enter value for 1: T
PL/SQL procedure successfully completed.
Parameter 2:
SQL_ID of the SQL to be analyzed (required)
Enter value for 2: 9a4tv1dduu9u4       <----输入 sql_id 等待 5 分钟左右

时间有可能更长或者更短(根据 AWR 保存周期、字典表大小不同相差较大,一般系统应该在 5 分钟以内能够完成),对数据库没有影响。执行过程有 log,也有屏幕输出。执行过程会 insert 数据到 plan_table 表,执行结束时会 rollback。

结束后生成的文件名以 sqlhc 开头,依次是日期、时间、sql_id。类似这样:sqlhc_20211125_1810_9a4tv1dduu9u4.zip

52c64ca9f103dfbb7021efd17e42b705.png

其中 4 个 html 文件和 log.zip 是通常存在的。

10053 trace 文件的生成需要 11.2 版本以上,sql_id 仍在 library cache 内的情况下。

如果 sql_monitor.zip 也包含在 sqlhc 压缩包内,说明 SQL 执行时间超过了 5s,或者是并行的 SQL,而且收集 sqlhc 时仍保留在 sql monitor 的内存里。sql monitor 对分析 sql 执行计划有很大帮助,如果遇到问题收集 sqlhc 信息及时,就非常有可能收集到 sql monitor 文件。如果一个 sql 执行完后超过半小时没有收集 sqlhc,sql monitor 信息就就非常有可能被刷出内存。

主要分析的的 3 个 html 文件是:

*_health_check.html
*_diagnostics.html
*_execution_plan.html

内容也非常丰富,可以多收集一些看看,那么今天就到这里啦。

参考资料

All About the SQLT Diagnostic Tool (Doc ID 215187.1)
SQLT Usage Instructions (Doc ID 1614107.1)
SQL Tuning Health-Check Script (SQLHC) (Doc ID 1366133.1)
How To Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues (Doc ID 376442.1)
How to Create a SQL-testcase Using the DBMS_SQLDIAG Package(Doc ID 727863.1)
Monitoring SQL statements with Real-Time SQL Monitoring (DocID 1380492.1)

全文完,希望可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!

————————————————————————————
公众号:JiekeXu DBA之路
CSDN :https://blog.csdn.net/JiekeXu
墨天轮:https://www.modb.pro/u/4347
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

6cd5f429f2eb00db049cb8a698f9004a.gif

Oracle 表碎片检查及整理方案

OGG|Oracle GoldenGate 基础

2021 年公众号历史文章合集整理

2020 年公众号历史文章合集整理

Oracle 19c RAC 遇到的几个问题

OGG|Oracle 数据迁移后比对一致性

利用 OGG 迁移 Oracle11g 到 19C

OGG|Oracle GoldenGate 微服务架构

Oracle 查询表空间使用率超慢问题一则

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Linux 环境搭建 MySQL8.0.28 主从同步环境

dbc6d67583d5baecf3d8095826f93a81.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9645.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL优化怎么做?大量数据实战分析

如果你对sql优化不了解&#xff0c;请认真看完这篇文章&#xff0c;并跟着文章动手操作一下&#xff0c;这篇文章讲解了所有方面的优化技巧 一&#xff1a;基础数据准备 二&#xff1a;五百万数据插入 上面插入几条测试数据&#xff0c;在使用索引时还需要插入更多的数据作为…

一次简单的postgreSQL的SQL语句优化实际案例

文章目录 业务背景初版查询SQL这段SQL有什么问题呢执行计划实际执行 初次优化执行计划2实际执行 继续优化再次优化的SQL执行计划3实际执行 疑问 业务背景 我上篇文章介绍了一个规则引擎的简单使用&#xff0c;主要就是为了众包业务批量录入数据的一些校验的统一管理&#xff0…

PostgreSQL之如何进行SQL优化?

文章目录 一、明确主题二、目标三、如何进行SQL优化&#xff1f;3.1 pg_stat_activity系统内置活动视图视图主要字段wait_event_typestate 3.2 pg_stat_statement SQL执行统计视图3.2.1 pg_stat_statements 视图详细说明中文版(简版) 3.2.2 常见案例 Top SQL 3.3 大表的索引使用…

以防作弊,ChatGPT 遭教育部「拉黑」:师生禁用!

来源&#xff1a;FUTURE远见 选编&#xff1a;FUTURE | 远见 闵青云 CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 文 上个月&#xff0c;弗曼大学哲学助理教授 Darren Hick 逮到一个用 ChatGPT 写论文的作弊者后&#xff0c;就感慨&#xff1a;「ChatGPT 太先进了&am…

ChatGPT国产化:ChatYuan元语对话大模型升级

国产自研功能对话大模型元语 ChatYuan 于 2022 年 12 月发布测试版本后&#xff0c;引起社会各界人士的广泛讨论&#xff0c;并且收到了用户的大量反馈和宝贵建议。元语智能团队已于近日对元语 ChatYuan 进行了模型效果优化和版本功能升级&#xff0c;现已开放内测。 &#xff…

体验联网版 ChatGPT:优点和缺点同样明显,还藏着无限可能

ChatGPT 有点像古希腊的阿喀琉斯&#xff1a;它很强大&#xff0c;却有个致命的弱点——无法联网&#xff0c;这注定了它只能是一个停留在 2021 年的超人。 但很快&#xff0c;我们将等到一个「鱼和熊掌兼得」的时刻。 通过插件集的 Web browsing 功能&#xff0c;ChatGPT 就…

教你写接口需求文档

作者&#xff1a;果果 转载已取得作者授权 一、什么是接口 百科上对接口的定义&#xff1a;API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的…

什么是反向代理,开放的反向代理软件使用方法

什么是反向代理呢&#xff1f;其实&#xff0c;反向代理也就是通常所说的WEB服务器加速&#xff0c;它是一种通过在繁忙的WEB服务器和Internet之间增加一个高速的WEB缓冲服务器&#xff08;即&#xff1a;WEB反向代理服务器&#xff09;来降低实际的WEB服务器的负载。 Web服务器…

反向正向代理

https://www.zhihu.com/question/36412304

宝塔反代教程

近期有网友问宝塔如何设置反向代理&#xff0c;小编这里介绍一种简单的操作方法&#xff0c;就是使用宝塔官方软件面板自带的反向代理功能来实现。首先您要先安装宝塔面板&#xff0c;当Nginx或LNMP环境配置完成后&#xff0c;便可开始设置反向代理了&#xff0c;下面来看下操作…

[转发]图示说明正向代理和反向代理

关于代理 说到代理&#xff0c;首先我们要明确一个概念&#xff0c;所谓代理就是一个代表、一个渠道&#xff1b; 此时就设计到两个角色&#xff0c;一个是被代理角色&#xff0c;一个是目标角色&#xff0c;被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操…

Linux宝塔面板反向代理设置教程

此方法最简单快捷&#xff0c;没有复杂步骤&#xff0c;不容易出错&#xff0c;即最简单&#xff0c;零代码、零部署的方法。 实现准备 一台服务器安装宝塔面板OpenAI官方的API_KEYChatGPT网站系统源码 ChatGPT网站系统源码&#xff0c;大家可以看看另一篇文章介绍&#xff…

网关V.S反向代理

简介 网关主要服务于微服务/API&#xff0c;偏向研发人员反向代理主要面向传统静态web应用&#xff0c;偏向运维而未来趋势是DevOps网关和反向代理再次融合 发展趋势 WEB1.0/2.0时代&#xff0c;使用前置反向代理&#xff0c;由运维负责 nginx&#xff0c;进行反向代理和负载…

反向代理

先看这张图 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;并将从服务器上得到的结果返回给internet上请求连接的客户端&#xff0c;此时代理服务器对外就表现为一…

图解正向代理和反向代理

套用古龙武侠小说套路来说&#xff0c;代理服务技术是一门很古老的技术&#xff0c;是在互联网早期出现就使用的技术。一般实现代理技术的方式就是在服务器上安装代理服务软件&#xff0c;让其成为一个代理服务器&#xff0c;从而实现代理技术。常用的代理技术分为正向代理、反…

代理,正向代理和反向代理

1. 代理 代理也被叫做网络代理&#xff0c;是一种比较特殊的网络服务&#xff0c;允许一个终端&#xff08;通常指客户端&#xff09;通过这个服务与另一个终端&#xff08;通常指服务器端&#xff09;进行非直接的连接。 例如&#xff1a;一些网关、路由器等网络设备都具备网…

反向代理,正向代理,网关

反向代理&#xff0c;正向代理&#xff0c;网关 正向代理与反向代理&#xff0c;正向与反向是如何区分的&#xff1f;反向代理在系统架构中的应用场景&#xff1a; 正向代理与反向代理&#xff0c;正向与反向是如何区分的&#xff1f; 正向与反向的目标是客户端&#xff0c;是…

2、正向代理和反向代理(正向代理(客户端),反向代理(服务器))

正向代理和反向代理&#xff08;正向代理&#xff08;客户端&#xff09;&#xff0c;反向代理&#xff08;服务器&#xff09;&#xff09; 1、正向代理&#xff1a;&#xff08;代理客户端&#xff09; 说个例子&#xff08;访问外网&#xff09;&#xff1a;我们的客户端先…

正向代理 / 反向代理

1. 正向代理 正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须设置正向代理服务器,当然前提是要知道正…

chatgpt赋能python:Python中的JWT解码(Decode)

Python中的JWT解码&#xff08;Decode&#xff09; 什么是JWT&#xff08;JSON Web Token&#xff09;&#xff1f; JSON Web Token&#xff08;JWT&#xff09;是目前最流行的 Web 身份验证方案之一。JWT 是基于 JSON 的开放标准&#xff0c;它可以让客户端和服务器之间传递…