SQLHC(SQL Health Check)作为 Oracle 数据库性能诊断的核心工具,其设计理念和核心功能在 Oracle 各版本中保持高度一致,但在技术实现和周边生态上存在渐进式优化。定期对关键业务 SQL 执行健康检查,特别是在版本升级或统计信息变更后。

一、SQLHC(SQL Tuning Health-Check Script)的功能和技术

1. 功能:
SQLHC(SQL Tuning Health-Check Script)是Oracle提供的一个用于检查单个SQL语句运行环境的健康检查工具。它收集与SQL性能相关的各种信息,诊断SQL性能问题。
  1. 被分析的SQL语句访问的模式对象的CBO统计信息。
  2. CBO参数。
  3. CBO系统统计。
  4. CBO数据字典统计。
  5. CBO固定对象统计。
2. 技术原理:
  1. 收集环境信息:SQLHC通过查询数据字典和动态性能视图,收集与SQL执行相关的环境信息,包括数据库版本、参数设置、系统统计信息等。
  2. 分析SQL执行计划:获取指定SQL_ID的执行计划,并分析其执行计划是否合理,是否存在性能问题。
  3. 检查统计信息:验证相关表、索引、列的统计信息是否最新和准确,以及是否存在缺失或过时的统计信息。
  4. 检查参数设置:验证影响优化器行为的参数设置是否合理,如optimizer_mode、optimizer_index_cost_adj等。
  5. 生成报告:将收集的信息和分析结果汇总生成HTML报告,便于用户查看。
3. 报告解析
通过动态采集以下关键数据生成 HTML 报告:
关键技术点​:
  • 诊断包集成​:当启用 Tuning Pack 或 Diagnostics Pack 时,自动整合 AWR/ASH 数据
  • 动态采样​:实时获取执行计划、10053 跟踪文件
  • 环境快照​:记录 SQL 运行时的数据库配置状态

二、SQLHC 在 Oracle 各版本中的演进

版本 演进重点 技术特点 兼容性说明

Oracle 10g 初始版本发布 基于 SQL 脚本集("sqlhc.sql"),无数据库痕迹(Rollback 机制) 仅支持 10g+(依赖 SQL_ID 机制)

Oracle 11g/12c 增强 AWR 集成 支持诊断包(Diagnostics Pack)获取历史执行计划,优化统计信息收集逻辑 脚本通用,无版本差异

Oracle 19c 容器数据库(CDB/PDB)支持 可针对 PDB 运行,输出报告包含多租户环境信息 脚本与 11g/12c 完全相同

Oracle 23ai 生态工具升级核心 SQLHC进化,23ai 全系列版本兼容,适配23ai新特性,仍是官方推荐的SQL诊断工具

三、各版本实操

1. 通用 SQLHC 诊断(全版本适用)

# 下载脚本并解压 unzip sqlhc.zip ,sql中记得找到对应的路径

 2. 使用步骤​

--解压缩unzip sqlhc.zip
[oracle@rac11 ~]$ ls -lrht
total 2.0M
-rw-r--r-- 1 oracle oinstall 2.6K Sep 19  2024 tbs.sql
-rw-r--r-- 1 oracle oinstall  263 Sep 26  2024 history.log
-rw-r--r-- 1 oracle oinstall   34 Oct 10  2024 wyxx.j
dr-xr-xr-x 3 oracle oinstall 4.0K Feb 23 17:01 sqlhc
-rw-r--r-- 1 oracle oinstall 1.5M Jun 19 20:49 pdbrs6-20250619-7-9AM.html
-rw-r--r-- 1 oracle oinstall  83K Jun 20 10:45 RAC-PDBRS6-20250620.txt
-rw-r--r-- 1 root   root     223K Jun 20 17:21 sqlhc.zip
-rw-r--r-- 1 root   root     171K Jun 20 17:21 sqlhc11g.zip
[oracle@rac11 ~]$ cd sqlhc/
[oracle@rac11 sqlhc]$ pwd
/home/oracle/sqlhc
[oracle@rac11 sqlhc]$ ls -lrht
total 880K
-rw-r--r-- 1 oracle oinstall  545 Oct  9  2024 sqlhc_pxhcdr_null.sql
-rw-r--r-- 1 oracle oinstall 2.3K Oct  9  2024 sqlhc_tcb.sql
-rw-r--r-- 1 oracle oinstall  48K Oct 10  2024 sqldx.sql
-rw-r--r-- 1 oracle oinstall  510 Oct 10  2024 sqlhc_db_null.sql
-rw-r--r-- 1 oracle oinstall 328K Oct 10  2024 sqlhc_db.sql
-rw-r--r-- 1 oracle oinstall  491 Oct 10  2024 sqlhc_exit.sql
-rw-r--r-- 1 oracle oinstall  75K Oct 10  2024 sqlhc_pxhcdr.sql
-rw-r--r-- 1 oracle oinstall 4.4K Oct 10  2024 sqlhc_sta.sql
-rw-r--r-- 1 oracle oinstall  60K Oct 10  2024 util_planx.sql
dr-xr-xr-x 4 oracle oinstall 4.0K Feb 23 17:00 utl
-rw-r--r-- 1 oracle oinstall 337K Feb 23 17:03 sqlhc.sql
--
-- 以DBA身份连接
sqlplus / as sysdba-- 执行SQLHC脚本(需提前下载解压)
START /path/to/sqlhc.sql "T" <SQL_ID>

参数说明​:

  1.  "T":启用Tuning Pack(含Diagnostics)
  2.  "D":仅启用Diagnostics Pack
  3.  "N":无许可包
  4.  :目标SQL的ID(从V$SQL或AWR报告中获取)
2.默认是已经开启了awr的收集,如无请开启

手动生成AWR快照,AWR报告中的sql id需要使用

EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
--
--查询数据
SELECT /* SQLHC_20250620*/ * from his50.tbl_Clinic where 1=1 order by dRegisterDate;
--
00000003021657391315    0000000302        姜**         1          53      20-JUN-25              20-JUN-25        5301                                           0
170606                  20250620000514    孙**        1          32      20-JUN-25               20-JUN-25        MR           MR                                0
170713                  20250620000515    杨**        1          67      20-JUN-25               20-JUN-25        MR           MR                                0
170747                  20250620000516    杨**         1          67      20-JUN-25                20-JUN-25        MR           MR                                01,472 rows selected.
--再次收集awr
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
--找寻SQL_ID
SELECT sql_id, plan_hash_value, substr(sql_text,1,40) sql_text  
FROM  v$sql 
WHERE sql_text like 'SELECT /* SQLHC_20250620*/%';SQL> SELECT sql_id, plan_hash_value, substr(sql_text,1,40) sql_text2  FROM  v$sql3* WHERE sql_text like 'SELECT /* SQLHC_20250620*/%';SQL_ID    PLAN_HASH_VALUE                                    SQL_TEXT
________________ __________________ ___________________________________________
78mdr2csmpkrr            1293871107 SELECT /* SQLHC_20250620*/ * from his50.
 3. Oracle 11g​/19C
-- 使用示例中的SQL_ID 78mdr2csmpkrr
--START /home/oracle/sqlhc.sql "T" <SQL_ID>
START /home/oracle/sqlhc/sqlhc.sql "T" 78mdr2csmpkrr
--
Archive:  sqlhc_20250620_1728_78mdr2csmpkrr.zip

4. 23ai
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.8.0.25.04SYS@FREE> @/home/oracle/sqlhc/sqlhc.sql "T" 0npm6czzaj44mParameter 1:
Oracle Pack License (Tuning, Diagnostics or None) [T|D|N] (required)PL/SQL procedure successfully completed.Parameter 2:
SQL_ID of the SQL to be analyzed (required) or press RETURN to get
DB only mode (only non-SQL_ID report).PL/SQL procedure successfully completed.DB_SCRIPT
------------------------------------------------------------------------------------------------------------------------
sqlhc_db_null.sqlSession altered.Running in SQL_ID modeSession altered.INPUT_SQL_ID
-------------
0npm6czzaj44mValues passed:
License: "T"
Mode   : "SQL ID mode"
SQL_ID : "0npm6czzaj44m"DBID
----------
1475650002SQL_ID
-------------
0npm6czzaj44mPL/SQL procedure successfully completed.PL/SQL procedure successfully completed.SYS@FREE>
SYS@FREE> /**************************************************************************************************
SYS@FREE>  *
SYS@FREE>  * begin_common: from begin_common to end_common sqlhc.sql and sqlhcxec.sql are identical
SYS@FREE>  *
SYS@FREE>  **************************************************************************************************/
SYS@FREE> SELECT 'BEGIN: '||TO_CHAR(SYSDATE, 'YYYY-MM-DD/HH24:MI:SS') FROM dual;'BEGIN:'||TO_CHAR(SYSDATE,……………………adding: sqlhc_20250620_1820_0npm6czzaj44m_2_startup_history.txt (deflated 55%)Parameter 1:
Oracle Pack License (Tuning or Diagnostics) [T|D] (required)Parameter 2:
Output Type (HTML or CSV or Both) [H|C|B] (required)Parameter 3:
SQL_ID of the SQL to be analyzed (required)Values passed:
License: "T"
Output : "CSV"
SQL_ID : "0npm6czzaj44m"### ... getting SQL text ...### ... getting signature ...### ... getting tables ...### ... generating dynamic script, please wait ...Session altered.adding: sqlhc_20250620_1820_0npm6czzaj44m_8_sqldx.zip (stored 0%)SQLDX files have been added to sqlhc_20250620_1820_0npm6czzaj44m.zipArchive:  sqlhc_20250620_1820_0npm6czzaj44m.zipLength      Date    Time    Name
---------  ---------- -----   ----951447  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_1_main.html11946  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_3_execution_plans.html16311  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_4_sql_detail.html26361  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_9_log.zip1326  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_10_sql_tuning_advisor.out178280  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_6_10053_trace_from_cursor.trc574  06-20-2025 18:24   sqlhc_20250620_1820_0npm6czzaj44m_11_tcb.zip438049  06-20-2025 18:25   sqlhc_20250620_1820_0npm6czzaj44m_12_awr.zip3213  06-20-2025 18:25   sqlhc_20250620_1820_0npm6czzaj44m_7_driver.zip147  06-20-2025 18:23   sqlhc_20250620_1820_0npm6czzaj44m_2_startup_history.txt351816  06-20-2025 18:26   sqlhc_20250620_1820_0npm6czzaj44m_8_sqldx.zip
---------                     -------1979470                     11 filesSQL>

四、sqlhc注意事项

SQL_ID限制​:

  • 不支持PL/SQL包内的SQL。
  • 一次仅能分析一个SQL_ID。

许可要求​:

  • Tuning/Diagnostics Pack非必需,但启用后可获取AWR深度分析。

前置条件​:

  • 需在SQL执行前后生成AWR快照(否则报告无数据):
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();

输出解读​:

  • 报告文件命名:sqlhc_<日期>_<时间>_.zip
  • 核心文件:*_main.html(汇总问题与建议)

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

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

相关文章

math.pow()和pow()的区别

math.pow() 和 pow() 的区别 ✅ 1. math.pow() 来自 math 模块参数&#xff1a;两个数&#xff08;底数&#xff0c;指数&#xff09;结果类型&#xff1a; 始终返回 float 类型 示例&#xff1a; import math print(math.pow(2, 3)) # 输出&#xff1a;8.0 &#xff08;…

邮科OEM摄像头POE供电技术的核心优势

安防监控中&#xff0c;供电方式影响系统稳定性、安装效率与维护成本。邮科摄像头采用POE技术&#xff0c;通过网线同时传输数据与电力&#xff0c;革新传统部署模式。本文解析其六大核心优势&#xff0c;展现其作为现代安防优选方案的价值。 一、布线简化&#xff0c;效率提升…

微信小程序-数据加密

npm install crypto-js utils/aes.js const CryptoJS require(crypto-js);// 默认的 KEY 与 iv 如果没有给 const KEY CryptoJS.enc.Utf8.parse(KrQ4KAYOEyAz66RS); // 十六位十六进制数作为密钥 const IV CryptoJS.enc.Utf8.parse(ep1YCmxXuxKe4eH1); // 十六位十六进制…

【时时三省】(C语言基础)善于利用指针

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 指针是C语言中的一个重要概念&#xff0c;也是C语言的一个重要特色。正确而灵活地运用它&#xff0c;可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人&#xff0c;都应当深入地学习和…

单点登录进阶:基于芋道(yudao)授权码模式的单点登录流程、代码实现与安全设计

最近遇到需要单点登录的场景&#xff0c;我使用的是芋道框架&#xff0c;正好它手动实现了OAuth2的功能&#xff0c;可以为单点登录提供一些帮助&#xff0c;结合授权码的模式&#xff0c;在改动最小的情况下实现了单点登录。关键业务数据已经隐藏&#xff0c;后续将以以主认证…

关于Seata的一个小issue...

文章目录 引言原因&#x1f913;解决方法&#x1f635;总结❤️ 引言 某一天&#xff0c;笔者在逛着Github的时候&#xff0c;突然看到seata有个有趣的issue&#xff0c;是一个task。 相关描述&#xff1a; While running the DruidSQLRecognizerFactoryTest.testIsSqlSynta…

FTTR+软路由网络拓扑方案

文章目录 网络拓扑软路由配置FTTR光猫路由器TPLink路由器配置WAN设置LAN设置 参考 网络拓扑 软路由配置 配置静态IP地址&#xff1a;192.168.1.100设置网关指向主路由的IP 设置自定义DNS服务器 开启DHCP 这一步很关键&#xff0c;可以让连上wifi的所有设备自动趴强。 FTTR光猫…

RPC - 服务注册与发现模块

为什么要服务注册&#xff0c;服务注册是做什么 服务注册主要是实现分布式的系统&#xff0c;让系统更加的健壮&#xff0c;一个节点主机将自己所能提供的服务&#xff0c;在注册中心进行登记 为什么要服务发现&#xff0c;服务发现是要做什么 rpc调用者需要知道哪个节点主机…

分布式缓存:应对突发流量的缓存体系构建

文章目录 缓存全景图Pre背景与目标说明缓存原则与设计思路缓存体系架构缓存预热与缓存预加载库存操作与缓存结合防刷、限流与缓存缓存一致性与失效异步落地与消息队列监控与指标容灾与扩展示例小结 缓存全景图 Pre 分布式缓存&#xff1a;缓存设计三大核心思想 分布式缓存&am…

华为云Flexus+DeepSeek征文|CCE容器高可用部署搭建Dify-LLM平台部署AI Agent

华为云FlexusDeepSeek征文&#xff5c;CCE容器高可用部署搭建Dify-LLM平台部署AI Agent 前言 Dify是一款开源的大语言模型应用开发平台&#xff0c;融合了后端即服务和LLMOps的理念&#xff0c;使开发者可以快速搭建生产级的生成式AI应用&#xff0c;本文将详细介绍如何使用华…

Postman 的 Jenkins 管理 - 手动构建

目录 一、准备工作 二、postman 项目脚本准备并导出 1. 打开已完成并测试无误的 postman 项目脚本。 再次执行测试。 ​编辑2. 导出&#xff08; 测试用例集、环境变量 两个文件&#xff09;**“不 支 持 中 文”** —— 全部改成英文&#xff01; ​编辑3. 文件所在目录…

音视频之H.264/AVC解码器的原理和实现

系列文章&#xff1a; 1、音视频之视频压缩技术及数字视频综述 2、音视频之视频压缩编码的基本原理 3、音视频之H.264/AVC编码器原理 4、音视频之H.264的句法和语义 5、音视频之H.264/AVC解码器的原理和实现 6、音视频之H.264视频编码传输及其在移动通信中的应用 7、音视…

【智能安全帽新升级】搭载VTX316TTS语音合成芯片,让安全“听得见”!

在工地轰鸣的机械声中&#xff0c;一句清晰的指令可能比任何文字都更有力量。 当智能安全帽遇上VTX316语音合成芯片&#xff0c;安全防护从“被动响应”进化为“主动交互”&#xff0c;为高危行业戴上了一顶“会说话的智慧大脑”&#xff01; 传统安全帽的“沉默”危机 在建筑…

【目标检测】非极大值抑制(NMS)的原理与实现

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

DB-GPT启动提示please install by running `pip install cryptography`

DB-GPT项目需要 cryptography 库来处理加密功能&#xff0c;但环境中没有安装它。cryptography 是一个用于安全和加密操作的Python库&#xff0c;许多项目&#xff08;包括DB-GPT&#xff09;依赖它来处理敏感数据的加密存储。 解决方案 1. 安装 cryptography 库 在激活的环…

局域网文件共享及检索系统

标题:局域网文件共享及检索系统 内容:1.摘要 随着信息技术的飞速发展&#xff0c;局域网在企业、学校等场景中得到广泛应用&#xff0c;大量文件在局域网内存储和流转。然而&#xff0c;目前局域网内文件共享与检索存在效率低、管理困难等问题。本文旨在设计并实现一个高效的局…

Spring Boot医疗系统高并发难题:达梦数据库死锁排查与优化实战

Spring Boot医疗系统高并发难题:达梦数据库死锁排查与优化实战 引言:医疗系统中的并发挑战 在现代医疗系统中,检查申请处理是关键业务场景之一,每天需要处理数以万计的检查记录。当多个操作同时更新同一患者的申请状态时,数据库层面的死锁问题成为高并发环境下的典型痛点…

Go语言中的文件与IO:bufio 和 scanner

Go 标准库中的 bufio 包提供了带缓冲的读写功能&#xff0c;可以显著提高文件和数据处理效率。而 bufio.Scanner 则是读取文本文件中每一行的利器&#xff0c;常用于日志、配置等文本处理场景。 一、为什么使用 bufio&#xff1f; 直接对文件进行 os.File.Read() 或 os.File.W…

ABP微服务架构中网关层NullReferenceException问题解析与HTTP配置优化

ABP微服务架构中网关层NullReferenceException问题解析与HTTP配置优化 一、网关层System.NullReferenceException问题解析 1.1 问题现象与原因分析 在ABP微服务架构开发过程中&#xff0c;网关层启动后调用微服务接口时出现以下异常&#xff1a; System.NullReferenceExcep…

啊啊啊啊啊啊啊啊code

前序遍历和中序遍历构建二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNod…