SQL Tuning Advisor

什么是SQL Tuning Advisor

STA可以用來優化那些已經被發現的高負載SQL. 默認情況下, Oracle數據庫在自動維護窗口中自動認證那些有問題的SQL并且執行優化建議,找尋提升高負載SQL執行計劃性能的方法.

** 如何查看自動優化維護窗口產生的報告? **

SQL> set serveroutput on size 100000;
SQL> var my_rept CLOB;
SQL> begin
:my_rept :=DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK(
begin_exec => NULL,
end_exec => NULL,
type => ‘TEXT’,
level => ‘TYPICAL’,
section => ‘ALL’,
object_id => NULL,
result_limit => NULL);
END;
/

PL/SQL procedure successfully completed.

PRINT :my_rept

** 輸入 **

  1. ADDM(Automatic Database Diagnostic Monitor)
    主要的輸入來源就是ADDM, 默認情況下, ADDM每小時主動運行一次并通過分析awr收集的重要的統計信息來印證高負載的問題SQL.

  2. AWR
    第二個比較重要的輸入源就是awr.

  3. Shared SQL Area(Shared Pool)

  4. SQL Tuning Sets(STS)
    需要了解SQL Tuning Set請參考文檔sts.txt, SQL Tuning Set涵蓋了SQL負載的大部分信息, 包括runtime統計信息,執行計劃等信息.

** 優化選項 **

SQL Tuning Advisor提供了一些額外的選項用來管理優化任務的范圍和和周期.您可將優化范圍設置為以下值:

  1. Limited
    該情況下, SQLTA根據統計信息檢查, access路徑分析,SQL結構分析來生成建議.SQL Profile建議將不會產生.

  2. Comprehension
    該情況下, SQLTA產生Limitted情況下所有的輸出并且增加SQL Profile的內容. 在Comprehension情況下,你也可以指定調優任務的限制時間, 默認情況下是30min.

** 運行SQLTA **

使用dbms_sqltune運行SQLTA需要以下步驟:

  1. 創建SQL Tuning Set(如果需要調優多個SQL)

  2. 創建SQL調優任務

  3. 執行sQL調優任務

  4. 查看調優任務結果

  5. 產生合適的建議

     	STS|create tuning task|execute tuning task|report tuning task|執行建議|
    

    | | | | |
    收集統計信息 創建SQL_Profile 創建索引 改寫SQL SQL_Plan_Baseline

創建測試環境

(11G)NJL_TEST@testdb1> create table t1 (id number , name varchar2(20));

Table created.

(11G)NJL_TEST@testdb1> begin
2 for i in 1…10000
3 loop
4 insert into t1 values(i, ‘A’||i);
5 commit;
6 end loop;
7 end;
8 /

PL/SQL procedure successfully completed.

(11G)NJL_TEST@testdb1> select count(1) from t1;

COUNT(1)

 10000

Creating a SQL Tuninig Task

SQL> DECLARE
my_task_name VARCHAR2(30);
my_sqltext CLOB;
BEGIN
my_sqltext := ‘select count(1) from t1’;

my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_text => my_sqltext,
–bind_list => sql_binds(anydata.ConvertNumber(100)),
user_name => ‘NJL_TEST’,
scope => ‘COMPREHENSIVE’,
time_limit => 60,
task_name => ‘task_01’,
description => ‘Task to tune a query on a specified employee’);
END;
/

PL/SQL procedure successfully completed.

執行SQL調優任務

SQL> BEGIN
DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => ‘my_sql_tuning_task’ );
END;
/

PL/SQL procedure successfully completed.

Configuring a SQL Tuning Task

(11G)NJL_TEST@testdb1> BEGIN
DBMS_SQLTUNE.SET_TUNING_TASK_PARAMETER(
task_name => ‘task_01’,
parameter => ‘TIME_LIMIT’, value => 300);
END;
/

PL/SQL procedure successfully completed.

調優參數列表:

Parameter Description

MODE

Specifies the scope of the tuning task:

  • LIMITED takes approximately 1 second to tune each SQL statement but does not recommend a SQL profile

  • COMPREHENSIVE performs a complete analysis and recommends a SQL profile, when appropriate, but may take much longer.

USERNAME

  • Username under which the SQL statement is parsed

DAYS_TO_EXPIRE

  • Number of days before the task is deleted

DEFAULT_EXECUTION_TYPE

  • Default execution type if not specified by the EXECUTE_TUNING_TASK function when the task is executed

TIME_LIMIT

  • Time limit (in number of seconds) before the task times out

LOCAL_TIME_LIMIT

  • Time limit (in number of seconds) for each SQL statement

TEST_EXECUTE

  • Determines if the SQL Tuning Advisor test executes the SQL statements to verify the recommendation benefit:

  • FULL - Test executes SQL statements for as much of the local time limit as necessary

  • AUTO - Test executes SQL statements using an automatic time limit

  • OFF - Does not test execute SQL statements

BASIC_FILTER

  • Basic filter used for SQL tuning set

OBJECT_FILTER

  • Object filter used for SQL tuning set

PLAN_FILTER

  • Plan filter used for SQL tuning set

RANK_MEASURE1

  • First ranking measure used for SQL tuning set

RANK_MEASURE2

  • Second ranking measure used for SQL tuning set

RANK_MEASURE3

  • Third ranking measure used for SQL tuning set

RESUME_FILTER

  • Extra filter used for SQL tuning set (besides BASIC_FILTER)

SQL_LIMIT

  • Maximum number of SQL statements to tune

SQL_PERCENTAGE

  • Percentage filter of statements from SQL tuning set

查看SQL調優任務的狀態

(11G)NJL_TEST@testdb1> SELECT status
FROM USER_ADVISOR_TASKS
WHERE task_name = ‘my_sql_tuning_task’; 2 3

STATUS

INITIAL

查看SQL調優任務的結果

SET LONG 100000
SET LONGCHUNKSIZE 100000
SET LINESIZE 100
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( ‘task_01’)
FROM DUAL;

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

GENERAL INFORMATION SECTION

Tuning Task Name : task_01
Tuning Task Owner : SYS
Workload Type : Single SQL Statement
Scope : COMPREHENSIVE
Time Limit(seconds): 60
Completion Status : COMPLETED
Started at : 01/31/2018 15:04:07
Completed at : 01/31/2018 15:04:07

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

Schema Name: NJL_TEST
SQL ID : 8ntdmqt9pv0dq
SQL Text : select count(1) from t1


FINDINGS SECTION (1 finding)

1- Statistics Finding

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

Table “NJL_TEST”.“T1” was not analyzed.

Recommendation

  • Consider collecting optimizer statistics for this table.
    execute dbms_stats.gather_table_stats(ownname => ‘NJL_TEST’, tabname =>
    ‘T1’, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt
    => ‘FOR ALL COLUMNS SIZE AUTO’);

Rationale

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)

The optimizer requires up-to-date statistics for the table in order to
select a good execution plan.

EXPLAIN PLANS SECTION

1- Original

Plan hash value: 3724264953

DBMS_SQLTUNE.REPORT_TUNING_TASK(‘TASK_01’)


| Id | Operation | Name | Rows | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 1 | 7 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T1 | 10000 | 7 (0)| 00:00:01 |

執行建議

begin
dbms_stats.gather_table_stats(ownname => ‘NJL_TEST’, tabname =>
‘T1’, estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt
=> ‘FOR ALL COLUMNS SIZE AUTO’);
end;
/

PL/SQL procedure successfully completed.

這里Oracle并沒有建議我們創建索引. 我們來嘗試創建索引.

(11G)SYS@testdb1> alter table njl_test.t1 add constraints pk1 primary key (id);

Table altered.

11G)SYS@testdb1> set autotrace on
(11G)SYS@testdb1>
(11G)SYS@testdb1> select count(1) from njl_test.t1;

COUNT(1)

 10000

Execution Plan

Plan hash value: 574704543


| Id | Operation | Name | Rows | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | 1 | 5 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | INDEX FAST FULL SCAN| PK1 | 10000 | 5 (0)| 00:00:01 |

Statistics

  1  recursive calls0  db block gets24  consistent gets21  physical reads0  redo size
526  bytes sent via SQL*Net to client
523  bytes received via SQL*Net from client2  SQL*Net roundtrips to/from client0  sorts (memory)0  sorts (disk)1  rows processed
  • 我們可以看到, 使用索引可以帶來更低的cost, 可見, SQLTA并沒有特別只智能, 我們可以根據該SQLTA工具進行SQL優化的建議. 同時還要使用SAA工具進行索引的建議或者根據經驗手動調優.

刪除調優任務:

SQL> exec DBMS_SQLTUNE.DROP_TUNING_TASK(‘task_01’);

PL/SQL procedure successfully completed.

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

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

相關文章

uniapp-商城-31-shop頁面中的 我的訂單

前面的章節講了很多關于頁面 布局 的知識。 現在來看看其他欄目,我的訂單頁面。 1 頁面樣式圖 基本的樣式包含shop頁面 我的訂單 點擊我的訂單,跳轉到訂單頁面 點擊訂單的每一條訂單,跳轉到訂單詳情 2、創建訂單頁面 2.1 創建sub頁面文件…

深入探討JavaScript性能瓶頸與優化實戰指南

JavaScript作為現代Web開發的核心語言,其性能直接影響用戶體驗與業務指標。隨著2025年前端應用的復雜性持續增加,性能優化已成為開發者必須掌握的核心技能。本文將從性能瓶頸分析、優化策略、工具使用三個維度,結合實戰案例,系統梳理JavaScript性能優化的關鍵路徑。 一、Ja…

基于AI與drawio的圖表生成技術及其在學術研究中的應用前景分析

一、研究背景與沖突 在當今數字化時代,學術研究與信息傳播的方式發生了深刻變革。隨著數據量的爆炸式增長以及研究內容的日益復雜,高效、精準地呈現研究成果變得至關重要。圖表作為一種直觀、簡潔且信息承載量大的表達方式,在學術研究中扮演著…

uniapp 仿小紅書輪播圖效果

通過對小紅書的輪播圖分析&#xff0c;可得出以下總結&#xff1a; 1.單張圖片時容器根據圖片像素定高 2.多圖時輪播圖容器高度以首圖為錨點 3.比首圖長則固高左右留白 4.比首圖短則固寬上下留白 代碼如下&#xff1a; <template><view> <!--輪播--><s…

【ORACLE】記錄一些ORACLE的merge into語句的BUG

【ORACLE】記錄一些ORACLE的merge into語句的BUG 一、自相矛盾-DML重啟動行為差異,違反acid原則 發現版本&#xff1a;10g ~ 23ai 這個用例在我之前的文章里有提過&#xff0c;ORACLE和PG系關于并發事務行為有一個非常大的差異&#xff0c;就是ORACLE在某些并發沖突的場景下會…

2025上海車展:光峰科技全球首發“靈境”智能車載光學系統

當AI為光賦予思想&#xff0c;汽車將會變成什么樣&#xff1f;深圳光峰科技為您揭曉答案。 2025年4月23日&#xff0c;在剛剛開幕的“2025上海車展”上&#xff0c;全球領先的激光核心器件公司光峰科技舉辦了主題為“AI光影盛宴&#xff0c;智享未來出行”的媒體發布會&#x…

密碼學的hash函數,哈希碰撞, collision resistance, BTC用到的SHA-256簡介

密碼學中的哈希函數、哈希碰撞、抗碰撞性&#xff08;collision resistance&#xff09;以及比特幣中使用的 SHA-256 的簡明介紹&#xff1a; &#x1f9e9; 一、哈希函數&#xff08;Hash Function&#xff09; 定義&#xff1a; 哈希函數是一種將任意長度的輸入&#xff08;…

unity TEngine學習4

上一篇我們學習了UI部分&#xff0c;這一篇我們學習其他部分&#xff0c;按照老規矩還是先打開官方文檔 ResourceModule 在官方文檔里介紹了當前加載的設置&#xff0c;但是我們是小白看不懂&#xff0c;那就不管他內部怎么實現的&#xff0c;我們主要看下面的代碼給的方法&am…

【AI訓練環境搭建】在IDE(Pycharm或VSCode)上使用WSL2+Ubuntu22.04+Conda+Tensorflow+GPU進行機器學習訓練

本次實踐將在IDE&#xff08;Pycharm或VSCode&#xff09;上使用WSL2Ubuntu22.04TensorflowGPU進行機器學習訓練。基本原理是在IDE中拉起WSL2中的Python解釋器&#xff0c;并運行Python程序。要運行CondaTensorflowGPU你可能需要進行以下準備工作。 1. 此示例中將使用一個mnis…

【華為OD機試真題E卷】521、 機器人可活動的最大網格點數目 | 機試真題+思路參考+代碼解析(E卷復用)(C++)

文章目錄 一、題目題目描述輸入輸出樣例1 一、代碼與思路&#x1f9e0;C語言思路?C代碼 一、題目 參考鏈接&#xff1a;https://sars2025.blog.csdn.net/article/details/141748083 題目描述 現有一個機器人口&#xff0c;可放置于MxN的網格中任意位置&#xff0c;每個網格包…

windows端遠程控制ubuntu運行腳本程序并轉發ubuntu端腳本輸出的網頁

背景 對于一些只能在ubuntu上運行的腳本&#xff0c;并且這個腳本會在ubuntu上通過網頁展示運行結果。我們希望可以使用windows遠程操控ubuntu&#xff0c;在windows上查看網頁內容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…

Vue3集成瀏覽器API實時語音識別

效果示例 用法 <!-- 瀏覽器語音識別 --> <BrowserSpeechRecognitionModal v-if"showModal" :isOpen"showModal" close"showModal false" confirm"handleRecognitionResult" />const showModal ref(false); const input…

k8s 手動續訂證書

注意:如果是高可用環境,本文的操作需要在所有控制節點都執行。 查看證書是否過期 kubeadm certs check-expirationkubeadm certs renew可以續訂任何特定證書,或者使用子命令all可以續訂所有證書: kubeadm certs renew all使用 kubeadm 構建的集群通常會將admin.conf證書復…

每日一道leetcode(補充版)

1679. K 和數對的最大數目 - 力扣&#xff08;LeetCode&#xff09; 題目 給你一個整數數組 nums 和一個整數 k 。 每一步操作中&#xff0c;你需要從數組中選出和為 k 的兩個整數&#xff0c;并將它們移出數組。 返回你可以對數組執行的最大操作數。 示例 1&#xff1a; …

基于Keras3.x使用CNN實現簡單的貓狗分類

使用CNN實現簡單的貓狗分類 完整代碼見&#xff1a;基于Keras3.x使用CNN實現簡單的貓狗分類&#xff0c;置信度約為&#xff1a;85% 文章目錄 概述項目整體目錄環境版本注意 環境準備下載miniconda新建虛擬環境基于conda虛擬環境新建Pycharm項目下載分類需要用到的依賴 數據準備…

中介者模式:解耦對象間復雜交互的設計模式

中介者模式&#xff1a;解耦對象間復雜交互的設計模式 一、模式核心&#xff1a;用中介者統一管理對象交互&#xff0c;避免兩兩直接依賴 當系統中多個對象之間存在復雜的網狀交互時&#xff08;如 GUI 界面中按鈕、文本框、下拉框的聯動&#xff09;&#xff0c;對象間直接調…

豆包桌面版 1.47.4 可做瀏覽器,免安裝綠色版

自己動手升級更新辦法&#xff1a; 下載新版本后安裝&#xff0c;把 C:\Users\用戶名\AppData\Local\Doubao\Application 文件夾的文件&#xff0c;拷貝替換 DoubaoPortable\App\Doubao 文件夾的文件&#xff0c;就升級成功了。 再把安裝的豆包徹底卸載就可以。 桌面版比網頁版…

Android PackageManagerService(PMS)框架深度解析

目錄 一、概念與核心作用 二、技術架構與模塊組成 1. 分層架構 1.1 應用層架構細節 1.2 Binder接口層實現 1.3 PMS核心服務層 1.4 底層支持層實現 2. 核心模塊技術要點與工作流程 2.1 PackageParser 2.2 Settings 2.3 PermissionManager 2.4 Installer 2.5 ComponentM…

TensorFlow深度學習實戰(14)——循環神經網絡詳解

TensorFlow深度學習實戰(14)——循環神經網絡詳解 0. 前言1. 基本循環神經網絡單元1.1 循環神經網絡工作原理1.2 時間反向傳播1.3 梯度消失和梯度爆炸問題2. RNN 單元變體2.1 長短期記憶2.2 門控循環單元2.3 Peephole LSTM3. RNN 變體3.1 雙向 RNN3.2 狀態 RNN4. RNN 拓撲結構…

PySide6 GUI 學習筆記——常用類及控件使用方法(常用類矩陣QRectF)

文章目錄 類描述構造方法主要方法1. 基礎屬性2. 邊界操作3. 幾何運算4. 坐標調整5. 轉換方法6. 狀態判斷 類特點總結1. 浮點精度&#xff1a;2. 坐標系統&#xff1a;3. 有效性判斷&#xff1a;4. 幾何運算&#xff1a;5. 類型轉換&#xff1a;6. 特殊處理&#xff1a; 典型應用…