56-Oracle SQL Tuning Advisor(STA)

各位小伙伴,一般都用哪些優化工具,Oracle SQL Tuning Advisor (STA)用的多嗎,Profile就是它的其中1個產物,下一期再弄Profile,STA 的核心功能是自動化診斷高負載SQL的性能瓶頸?(如全表掃描、缺失索引),通過深度分析執行計劃提供優化建議(如索引創建、SQL結構重寫),并生成SQL Profile,不侵入、在不修改原SQL的前提下注入優化器指令,強制修正基數估計偏差或訪問路徑,從而提升查詢效率。

?解放雙手顯著降低人工調優成本,尤其對復雜查詢和大規模數據場景,能快速提供量化收益(如索引優化提升性能),還可以優化適配第三方封裝SQL;不過優化同樣不是萬能的,STA依賴統計信息準確性(過期統計會導致建議失效)且僅針對單條SQL優化,可能忽略全局影響(如索引增加寫負載),復雜邏輯場景需要人工參與和經驗的判斷。結合AWR定位TOP SQL后調用STA生成方案,關鍵建議需測試驗證,并定期復審Profile有效性,以適配數據與業務側的調整變更。

? 一、STA技術原理與核心功能?
?1. 優化器雙模式機制?
  • ?Normal 模式?:毫秒級生成執行計劃,基于現有統計信息,受時間限制可能無法探索最優路徑。
  • ?Tuning 模式?:通過 ?Automatic Tuning Optimizer (ATO)?? 深度分析(分鐘級),突破時間限制模擬多種路徑,輸出優化建議而非直接計劃。
?2. 四大分析維度?
ATO在 Tuning 模式下執行,整合統計信息、索引、SQL 重寫等多維度建議。:
  1. ?統計信息分析?檢測缺失/過時的對象統計(如索引未分析)。
  2. ?訪問路徑分析?評估索引合理性,建議新建索引(如缺失高選擇性索引)推薦缺失索引或物化視圖(SQL Access Advisor)。
  3. ?SQL 結構分析?重寫低效語法(如子查詢解嵌套、NOT IN → NOT EXISTS)。
  4. ?SQL Profiling?注入動態采樣或修正因子(如基數縮放),持久化存儲于數據字典,優先級高于原始統計信息。
?3. SQL Profile 工作(單開一期)?
  • ?作用?:修正優化器成本計算誤差(如基數估計偏差)。
  • ?優先級?:高于 SQL 文本中的 Hint,?不修改原 SQL?。
  • ?類型?:
    • ?自動 Profile?:由 STA 生成,動態適配數據變化。
    • ?手工 Profile?:強制指定執行計劃(如固定連接順序)。

二、演進過程與版本特性??

版本?

?關鍵特性?

?技術突破?

?10g

首次引入 STA

集成 AWR 高負載 SQL 捕獲,支持基礎分析

?11g

SQL Plan Management (SPM)

替代 Outline,支持執行計劃穩定性控制

?12c

Adaptive Plans

運行時動態調整執行計劃(如連接方式切換)

?19c

Automatic Indexing

自動創建/驗證/刪除索引,需啟用AUTO_INDEX?

23ai?

AI 增強優化器

向量統計信息、自適應連接優化、直接連接語法

優化深度對比?:?

?模式?

?響應時間?

?優化深度?

?適用場景?

?Normal 模式?

毫秒級

淺層

常規 SQL 解析

?Tuning 模式?

分鐘級

深度分析

高負載 SQL 優化

三、實踐腳本(10g 至 23ai)?

1. 自動捕獲高負載 SQL(10g~23ai)?
-- 查詢V$SQL視圖(實時TOP SQL)
SELECT sql_id, sql_text, executions, buffer_gets, disk_reads, elapsed_time
FROM v$sql 
WHERE buffer_gets > 10000   -- 過濾高內存消耗OR elapsed_time > 1000000 -- 過濾長耗時
ORDER BY elapsed_time DESC;  -- 按執行時間排序
-- 從 AWR 獲取 TOP SQL ID
-- 創建AWR快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT('TYPICAL');  -- 起始快照-- 等待高負載時段,后再次創建快照
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT('TYPICAL');  -- 結束快照-- 查詢快照ID
SELECT snap_id, begin_interval_time 
FROM dba_hist_snapshot 
ORDER BY snap_id DESC;
--
SELECT snap_id, begin_interval_time
FROM dba_hist_snapshot3  ORDER BY snap_id DESC;SNAP_ID BEGIN_INTERVAL_TIME
---------- ---------------------------------------------------------------------------7022 21-6月 -25 11.00.34.946 上午7021 21-6月 -25 10.00.22.850 上午7020 21-6月 -25 09.00.10.116 上午7019 21-6月 -25 08.00.58.180 上午7018 21-6月 -25 07.00.46.532 上午
-- 生成AWR報告中高負載SQL(查詢下面手工輸入變量快照ID)
SELECT sql_id, executions, buffer_gets, disk_reads, elapsed_time, sql_text
FROM dba_hist_sqlstat 
WHERE snap_id BETWEEN &start_snap AND &end_snap   -- 替換為實際快照ID
ORDER BY buffer_gets DESC;  -- 按內存消耗排序
--不用awr,直接用ASH查詢sql_id
-- 使用ASH實時監控(10g+)
SELECT ash.SQL_ID, ash.SESSION_ID, sq.SQL_TEXT,  -- 從 V$SQL 獲取文本ash.WAIT_TIME, ash.TIME_WAITED
FROM V$ACTIVE_SESSION_HISTORY ash
JOIN V$SQL sq ON ash.SQL_ID = sq.SQL_ID  -- 關聯 SQL 文本視圖
WHERE ash.SQL_ID IS NOT NULLAND ash.TIME_WAITED > 100
ORDER BY ash.SAMPLE_TIME DESC;  -- 按采樣時間排序
---
?2. 調優任務通過(sql_id、sql_text)建立
-- 創建任務(支持 SQL_ID 或 SQL 文本),從AWR或是top sql中查詢SQL ID
--通過
DECLAREtask_name VARCHAR2(30);
BEGINtask_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id        => 'dqucusk8avvuh',   -- 11g+ 支持--sql_text      => 'SELECT * FROM HR.EPMLOYEES WHERE salary > :1',--sql_text和上面的sql_id,二選一均可10g+scope         => 'COMPREHENSIVE',time_limit    => 60,task_name     => 'tuning_task1');DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name); -- 執行任務
END;
/
--PL/SQL 過程已成功完成。
-- 查看報告
SET LONG 1000000
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tuning_task1') FROM DUAL; -- 輸出優化建議
--
SYS@test19> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('tuning_task1') FROM DUAL;DBMS_SQLTUNE.REPORT_TUNING_TASK('TUNING_TASK1')
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
----------------------------------------------------
---------------------------
Tuning Task Name   : tuning_task1
Tuning Task Owner  : SYS
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status  : COMPLETED
Started at         : 06/21/2025 12:12:15
Completed at       : 06/21/2025 12:12:15----------------------------------------------------------
---------------------
Schema Name   : SYS
Container Name: PDBRS6
SQL ID        : dqucusk8avvuh
SQL Text      : delete /* KSXM:CLEAN_COL_USAG
E *//*+ dynamic_sampling(4) */from sys.col_usage$ c   where
((timestamp < sysdate - 367)or not exists
(select /*+ unnest */ 1 fromsys.obj$ o where o.obj# = c.obj#))and c.obj# < :1  andrownum <=  :2
………………
ALTERNATIVE PLANS SECTION
---------------------------------------------------------
----------------------Plan 1
------Plan Origin                 :Cursor Ca
chePlan Hash Value             :159303012Executions                  :42Elapsed Time                :0.006 secCPU Time                    :0.005 secBuffer Gets                 :2680Disk Reads                  :2Disk Writes                 :0Notes:1. Statistics shown are averaged over multiple execu
tions.2. 在當前環境中無法重新生成具有 ID 1 的計劃。由于此原因, 無法創建 SQL 計劃基線以指示
Oracle 優化程序在將來選取該計劃。---------------------------------------------------------
----------------------------------------
------
| Id  | Operation                              | Name| Rows  | Bytes | Cost (%CPU)|
Time     |
-------------------------------------------------
----------------------------------------
--------------
|   0 | DELETE STATEMENT|              |       |       |    15(100)|          |
|   1 |  DELETE| COL_USAGE$   |       |       ||          |
|   2 |   COUNT STOPKEY                        ||       |       |            ||
|   3 |    FILTER                              ||       |       |            ||
|   4 |     TABLE ACCESS BY INDEX ROWID BATCHED|
COL_USAGE$   |   150 |  2700 |    15   (
0)| 00:00:01 |
|   5 |      INDEX RANGE SCAN| I_COL_USAGE$ |    27 |       |     2(0)| 00:00:01 |
|   6 |     INDEX SKIP SCAN| I_OBJ1       |     1 |     5 |2   (0)| 00:00:01 |
---------------------------------------------------------
SYS@test19>
3. SQL Profile 接受應用(11g+)?
-- 接受自動 Profile
BEGINDBMS_SQLTUNE.ACCEPT_SQL_PROFILE(task_name => 'tuning_task1',name      => 'profile_force_index',force_match => TRUE  -- 12c+ 支持結構相似 SQL 匹配);
END;
/-- 手工創建 Profile(強制索引)
BEGINDBMS_SQLTUNE.IMPORT_SQL_PROFILE(name     => 'manual_profile',sql_text => 'SELECT * FROM orders WHERE order_id=:1',profile  => SQLPROF_ATTR('INDEX(orders idx_order_id)') -- 注入 Hint);
END;
/

四、注意事項與驗證?

  • ?權限要求?:
GRANT ADVISOR, SELECT_CATALOG_ROLE TO user_STA; -- 基礎權限
GRANT EXECUTE ON DBMS_SQLTUNE TO user_STA;      -- 必要執行權限
  • ?版本差異驗證?:
  1. 10g:僅支持 SQL 文本調優,不支持 sql_id 參數。
  2. 19c:自動索引需啟用 OPTIMIZER_AUTO_INDEX。
  3. 23ai:向量操作需安裝 Vector Option 組件和依賴新發版的優化。
  • ?效果驗證?:
-- 對比優化前后執行計劃
--舉例HR.EMPLOYEES
EXPLAIN PLAN FOR SELECT * FROM HR.EMPLOYEES WHERE salary > 5000;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84562.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改element-plus的主題色css變量

提示&#xff1a;本文僅是記錄我修改element-plus等組件庫的css變量&#xff0c; 具體【實現主題色切換看這篇】即可 文章目錄 1.文件劃分2.src/style/index.scss入口文件3.src/style/theme.scss主題色切換維護4.src/style/_color-utils.scss動態生成element-plus的scss變量5.…

Vibe Coding - 進階 Cursor Rules

文章目錄 為什么要配置 .cursorrules使用 .cursorrules 的五大優勢 如何創建與應用 .cursorrules? 基礎步驟&#x1f6e0; 創建方式&#xff1a; 高質量 .cursorrules 文件&#xff0c;應包含以下內容配置示例Java 項目TypeScript React 項目總結 cursorrules 推薦網站 為什么…

騰訊云自動化助手(TAT)技術評估報告

摘要 騰訊云自動化助手&#xff08;TAT&#xff09;作為云服務器&#xff08;CVM&#xff09;與輕量應用服務器&#xff08;Lighthouse&#xff09;的原生運維工具&#xff0c;通過無密碼批量命令執行&#xff08;Shell/Python/PowerShell&#xff09;、交互式會話管理及公共命…

【simulink】IEEE5節點系統潮流仿真模型(2機5節點全功能基礎模型)

主要內容 該模型為simulink仿真模型&#xff0c;主要實現的內容如下&#xff1a; 模型是基于 Simulink 搭建的電力系統潮流計算仿真模型&#xff0c;圍繞2 臺發電機、5 個節點的拓撲結構構建&#xff0c;用于電力系統穩態分析&#xff0c;是電力系統研究、教學及工程實踐中…

責任鏈模式詳解

責任鏈模式 場景 顧名思義&#xff0c;責任鏈模式&#xff08;Chain of Responsibility Pattern&#xff09;為請求創建了一個接收者對象的鏈。這種模式給予請求的類型&#xff0c;對請求的發送者和接收者進行解耦。這種類型的設計模式屬于行為型模式。 在這種模式中&#x…

Taro 跨端應用性能優化全攻略:從原理到實踐

引言&#xff1a;為什么需要性能優化&#xff1f; 在當今移動互聯網時代&#xff0c;用戶體驗已經成為決定產品成敗的關鍵因素。根據 Google 的研究&#xff0c;頁面加載時間每增加 1 秒&#xff0c;移動端轉化率就會下降 20%。對于使用 Taro 開發的跨端應用來說&#xff0c;性…

Git集成Jenkins通過Pipeline方式實現一鍵部署

Docker方式部署Jenkins 部署自定義Docker網絡 部署Docker網絡的作用&#xff1a; 隔離性便于同一網絡內容器相互通信 # 創建名為jenkins的docker網絡 docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 jenkins# 查看docker網絡列表 docker network ls# …

磐基PaaS平臺MongoDB組件SSPL許可證風險與合規性分析(下)

#作者&#xff1a;任少近 3.7.條款六&#xff1a;非源代碼形式分發 官方原文如下&#xff1a; 原文關鍵部分&#xff1a;“You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License.” 解讀&#xff1a;“您不得…

桌面小屏幕實戰課程:DesktopScreen 2 第一個工程

飛書文檔http://https://x509p6c8to.feishu.cn/docx/doxcnkGhtbxcv8ge5wKFkunsgmm 一、創建工程 cd ~/esp cp -r esp-idf/examples/get-started/hello_world . cd ~/esp/hello_world//設置目標板卡相關 idf.py set-target esp32//可配置工程屬性 idf.py menuconfig 工程源碼…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并搭建查詢數據庫的大模型工作流

華為云FlexusDeepSeek征文&#xff5c;體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并搭建查詢數據庫的大模型工作流 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺&#xff0c;覆蓋從數據準備到模型部署的全生命周期管理&#xff0c…

【深度學習】TensorFlow全面指南:從核心概念到工業級應用

TensorFlow全面指南&#xff1a;從核心概念到工業級應用 一、TensorFlow&#xff1a;人工智能時代的計算引擎1.1 核心特性與優勢 二、安裝與環境配置2.1 版本選擇建議2.2 GPU支持關鍵組件 三、TensorFlow核心概念解析3.1 數據流圖(Data Flow Graph)3.2 張量(Tensor)&#xff1a…

在VTK中捕捉體繪制圖像進階(同步操作)

0. 概要 這段代碼實現了一個VTK(Visualization Toolkit)應用程序,主要功能是: 讀取DICOM醫學圖像序列并進行體繪制(Volume Rendering)創建一個主窗口顯示3D體繪制結果創建一個副窗口顯示主窗口的2D截圖將副窗口中的交互操作(如旋轉、縮放等)轉發到主窗口,而不影響副窗…

使用NPOI庫導出多個Excel并壓縮zip包

使用NPOI庫導出Excel文件可以按照以下步驟進行&#xff1a; 添加NPOI庫的引用&#xff1a;在項目中添加對NPOI庫的引用。 創建一個新的Excel文件對象&#xff1a;使用NPOI中的HSSFWorkbook&#xff08;對應.xls格式&#xff09;或XSSFWorkbook&#xff08;對應.xlsx格式&#…

【AGI】突破感知-決策邊界:VLA-具身智能2.0

突破感知-決策邊界&#xff1a;VLA-具身智能2.0 &#xff08;一&#xff09;技術架構核心&#xff08;二&#xff09;OpenVLA&#xff1a;開源先鋒與性能標桿&#xff08;三&#xff09;應用場景&#xff1a;從實驗室走向真實世界&#xff08;四&#xff09;挑戰與未來方向&…

消融實驗視角下基于混合神經網絡模型的銀行股價預測研究

鏈接: 項目鏈接_link 結果 模型消融&#xff1a; 特征消融&#xff1a; 中國銀行_不同模型預測結果和模型評估可視化 招商銀行_不同模型預測結果和模型評估可視化 模型評估可視化

MySQL存儲引擎與架構

MySQL存儲引擎與架構 1.1詳細了解數據庫類型 1.1.1關系型數據庫 常見產品&#xff1a;MySQL&#xff08;免費&#xff09;、Oracle 關系型數據庫模型是把復雜的數據結構歸結為簡單二維表格形式。通常該表第一行為字段名稱&#xff0c;描述該字段的作用&#xff0c;下面是具體…

將浮點數轉換為分數

原理 double 由以下部分組成&#xff1a; 符號位指數部分尾數部分 符號位的含義&#xff1a;為 0 表示正數&#xff0c;為 1 表示負數。指數部分的含義&#xff1a;在規格化數中&#xff0c;指數部分的整型值減去 1023 就是實際的指數值。在非規格化數中&#xff0c;指數恒為…

前端實現截圖的幾種方法

前端實現截圖的幾種方法 前端實現截圖功能有多種方式&#xff0c;下面我將介紹幾種常用的方法及其實現方案。 1. 使用 html2canvas 庫 html2canvas 是最流行的前端截圖解決方案之一&#xff0c;它可以將 DOM 元素轉換為 canvas。 基本用法 import html2canvas from html2c…

TDengine 與開源可視化編程工具 Node-RED 集成

簡介 Node-RED 是由 IBM 開發的基于 Node.js 的開源可視化編程工具&#xff0c;通過圖形化界面組裝連接各種節點&#xff0c;實現物聯網設備、API 及在線服務的連接。同時支持多協議、跨平臺&#xff0c;社區活躍&#xff0c;適用于智能家居、工業自動化等場景的事件驅動應用開…

OpenCV——圖像形態學

圖像形態學 一、像素的距離二、像素的鄰域三、膨脹與腐蝕3.1、結構元素3.2、腐蝕3.3、膨脹 四、形態學操作4.1、開運算和閉運算4.2、頂帽和黑帽4.3、形態學梯度4.4、擊中擊不中 一、像素的距離 圖像中像素之間的距離有多種度量方式&#xff0c;其中常用的有歐式距離、棋盤距離…