53-Oracle sqlhc多版本實操含(23 ai)

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…