很久没写过PL/SQL存储过程了--删除SQL Plan Baseline的存储过程

26 Oracle深度学习笔记——SQL基线 阅读详情
很久没写过PL/SQL存储过程了--删除SQL Plan Baseline的存储过程
 很久没写过PL/SQL了,今天需要,写了一个用于删除Oracle数据库系统自动捕获的 SQL Plan Baseline的PL/SQL块和存储过程。
关闭系统自动捕获 SQL Plan Baseline 的参数 alter system/session set optimizer_capture_sql_plan_baselines=false;
PL/SQL程序块使用静态游标以及游标一次fetch记录集全部数据,而存储过程 p_drop_sql_bl 使用动态游标以及使用 fetch..bulk collect into..limit n,一次提取记录集n条数据,以提高程序代码和数据库的性能,以下会有两者的性能对比。
删除 SQL Plan Baseline的PL/SQL块程序如下:
19:11:30 SYS@orcl*SQL> declare  --删除 SQL Plan Baseline 的PL/SQL程序块
19:11:32   2    v_sql_handle varchar2(100);
19:11:32   3    v_plan_name varchar2(100);
19:11:32   4    v_out binary_integer;
19:11:32   5
19:11:32   6    cursor c_1 is select sql_handle,plan_name  --定义静态游标,SQL固定。
19:11:32   7      from dba_sql_plan_baselines;
19:11:32   8
19:11:32   9  begin
19:11:32  10    open c_1;
19:11:32  11
19:11:32  12    loop
19:11:32  13      fetch c_1 into v_sql_handle,v_plan_name;
19:11:32  14      exit when c_1%notfound;
19:11:32  15
19:11:32  16      v_out := dbms_spm.drop_sql_plan_baseline(sql_handle=>v_sql_handle,plan_name=>v_plan_name);
19:11:33  17
19:11:33  18      if v_out=1 then
19:11:33  19            dbms_output.put_line('The SQL Plan Baseline: '||v_sql_handle||' was deleted.');
19:11:33  20        else
19:11:33  21          dbms_output.put_line('Operation error: Please check...');
19:11:33  22      end if;
19:11:33  23
19:11:33  24    end loop;
19:11:33  25
19:11:33  26    close c_1;
19:11:33  27  end;
19:11:34  28  /
The SQL Plan Baseline: SYS_SQL_02a86218930bbb20 was deleted.
The SQL Plan Baseline: SYS_SQL_127f1215d03d8cb1 was deleted.
The SQL Plan Baseline: SYS_SQL_470d1594e3064af9 was deleted.
The SQL Plan Baseline: SYS_SQL_5452ff90a6ad4f91 was deleted.
The SQL Plan Baseline: SYS_SQL_85372e07e425b213 was deleted.
The SQL Plan Baseline: SYS_SQL_9091bbf1623118dd was deleted.
The SQL Plan Baseline: SYS_SQL_9c0d7998b1d28680 was deleted.
The SQL Plan Baseline: SYS_SQL_bd31e1aedaa7ee00 was deleted.
The SQL Plan Baseline: SYS_SQL_d5d1c6b1633e200a was deleted.
The SQL Plan Baseline: SYS_SQL_d6da38a64663e444 was deleted.

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.17
19:11:35 SYS@orcl*SQL>
19:11:36 SYS@orcl*SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text,last_verified from dba_sql_plan_baselines;   --SQL Plan Baseline已经全部删除

no rows selected

Elapsed: 00:00:00.04

 

删除 SQL Plan Baseline的存储过程 p_drop_sql_bl 代码如下: 

19:14:19 SYS@orcl*SQL> create or replace procedure p_drop_sql_bl(i_rows in number)  --删除 SQL Plan Baseline 的存储过程
19:14:20   2  is
19:14:20   3    type v_rec is record(
19:14:20   4      v_sql_handle sys.dba_sql_plan_baselines.sql_handle%type,
19:14:20   5      v_plan_name sys.dba_sql_plan_baselines.plan_name%type
19:14:20   6    );
19:14:20   7
19:14:20   8    type v_array is table of v_rec index by binary_integer; --定义基于v_rec记录类型的数组
19:14:20   9    v_arr v_array;
19:14:20  10
19:14:20  11    type c_1 is ref cursor; --定义动态游标
19:14:20  12    v_c1 c_1;
19:14:20  13
19:14:20  14    v_sql varchar2(1000) := 'select sql_handle,plan_name from sys.dba_sql_plan_baselines';
19:14:20  15
19:14:20  16    v_out number;
19:14:20  17
19:14:20  18  begin
19:14:20  19    open v_c1 for v_sql;  --打开动态游标,SQL可变
19:14:20  20
19:14:20  21    loop
19:14:20  22      fetch v_c1 bulk collect into v_arr limit i_rows;  --传入的游标每次提取多少行记录的参数 i_rows,以降低数据库性能
19:14:20  23
19:14:20  24      for i in 1..v_arr.count loop
19:14:20  25        v_out := dbms_spm.drop_sql_plan_baseline(sql_handle=>v_arr(i).v_sql_handle,plan_name=>v_arr(i).v_plan_name); --使用数组元素
19:14:20  26        --dbms_output.put_line(v_arr(i).v_sql_handle||'  '||v_arr(i).v_plan_name); 
19:14:20  27
19:14:20  28        if v_out=1 then
19:14:20  29            dbms_output.put_line('The SQL Plan Baseline: '||v_arr(i).v_plan_name||' was deleted.');  
19:14:20  30        else
19:14:20  31          dbms_output.put_line('Operation error: Please check...');
19:14:20  32        end if;
19:14:20  33
19:14:20  34      end loop;
19:14:20  35
19:14:20  36      exit when v_c1%notfound;
19:14:20  37
19:14:20  38    end loop;
19:14:20  39
19:14:20  40    close v_c1;
19:14:20  41  end p_drop_sql_bl;
19:14:21  42  /

Procedure created. 

检验环境:调用删除 SQL Plan Baseline 的存储过程 p_drop_sql_bl 前,还是存在 SQL Plan Baseline 的:
19:13:52 SYS@orcl*SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text,last_verified from dba_sql_plan_baselines;

SQL_HANDLE                    PLAN_NAME                           ORIGIN          ENABLE ACCEPT SQL_TEXT                                                                         LAST_VERIFIED
----------------------------- ----------------------------------- ---------------------- ------ -------------------------------------------------------------------------------- ---------------------------------------------------------------------------
SYS_SQL_127f1215d03d8cb1      SQL_PLAN_14zsk2r83v35j29d4be67      AUTO-CAPTURE    YES    YES    select * from t1 where rownum<3


19:14:28 SYS@orcl*SQL> oradebug setmypid;
Statement processed.
19:14:33 SYS@orcl*SQL> oradebug event 10046 trace name context forever,level 12; --打开10046事件,查看使用fetch..bulk collect into..limit i_rows的存储过程的优化性能的执行计划,普通SQL使用set autotrace on或explain plan for查看执行计划,PL/SQL程序需要使用10046事件查看执行性能和执行计划
Statement processed.
19:14:47 SYS@orcl*SQL> oradebug tracefile_name;  --查看当前用户进程的tracefile跟踪文件路径
/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_18742.trc
19:14:59 SYS@orcl*SQL>
调用 p_drop_sql_bl 存储过程,删除 SQL Plan Baseline:
19:14:59 SYS@orcl*SQL> var v_out number;
19:15:02 SYS@orcl*SQL> exec :v_out := 5;
19:15:26 SYS@orcl*SQL> exec p_drop_sql_bl(:v_out);  --调用刚才创建的 p_drop_sql_bl 删除 SQL Plan Baseline的存储过程,传入每次提取游标行数参数为5行
The SQL Plan Baseline: SQL_PLAN_14zsk2r83v35j29d4be67 was deleted.
The SQL Plan Baseline: SQL_PLAN_4f38pkmjhckrtb860bcf2 was deleted.
The SQL Plan Baseline: SQL_PLAN_58nrzk2maumwj14e803f5 was deleted.
The SQL Plan Baseline: SQL_PLAN_8mdtzgk8v36yv16c41d59 was deleted.
The SQL Plan Baseline: SQL_PLAN_914dvy5j3266xb860bcf2 was deleted.
The SQL Plan Baseline: SQL_PLAN_b9jw5ckf7jd7b6afbe2b3 was deleted.
The SQL Plan Baseline: SQL_PLAN_bucg1pvdagvh09e49877c was deleted.
The SQL Plan Baseline: SQL_PLAN_dbnf6q5jmw80a9e49877c was deleted.
The SQL Plan Baseline: SQL_PLAN_ddqjsnt367t24bb992955 was deleted.

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.09

SQL Plan Baseline已经全部删除:
19:15:50 SYS@orcl*SQL> select sql_handle,plan_name,origin,enabled,accepted,sql_text,last_verified from dba_sql_plan_baselines;  

no rows selected 

删除 SQL Plan Baseline  的使用静态游标和一次fetch记录集所有数据的 PL/SQL块和使用动态游标、使用 fetch..bullk collect into..limit n一次fetch记录集n条记录的性能对比如下:
declare
  v_sql_handle varchar2(100);
  v_plan_name varchar2(100);
  v_out binary_integer;
  cursor c_1 is select sql_handle,plan_name
    from dba_sql_plan_baselines;
begin
  open c_1;
  loop
    fetch c_1 into v_sql_handle,v_plan_name;
    exit when c_1%notfound;
    v_out := dbms_spm.drop_sql_plan_baseline(sql_handle=>v_sql_handle,plan_name=>v_plan_name);
    if v_out=1 then
        dbms_output.put_line('The SQL Plan Baseline: '||v_sql_handle||' was deleted.');
      else
        dbms_output.put_line('Operation error: Please check...');
    end if;
  end loop;
  close c_1;
end;

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.06          0          0          0           0
Execute      1      0.04       0.03         10         40         10           1
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.04       0.10         10         40         10           1

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: SYS

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  log file sync                                   1        0.02          0.02
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1        0.00          0.00
********************************************************************************

SQL ID: fvya7vmwhpz2g
Plan Hash: 0
BEGIN p_drop_sql_bl(:v_out); END;

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.02       0.02          9         36          9           1
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.02       0.02          9         36          9           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  log file sync                                   1        0.02          0.02
  SQL*Net message to client                       1        0.00          0.00
  SQL*Net message from client                     1        0.00          0.00
********************************************************************************

可以看到,PL/SQL程序块使用的cpu资源,一致读块数和当前读块数都比使用fetch..bulk collect into..limit n的存储过程 p_drop_sql_bl 高,说明使用游标fetch..bulk collect into..limit n 提取记录的性能比一次性fetch所有数据的性能要高。
Oracle数据库性能优化实战:从慢SQL定位到整库吞吐翻倍的排查路径 数据库性能优化是后端开发与DBA的核心技能,其本质是理解SQL执行计划、索引机制与实例内存配置的协同原理。当一条SQL出现高逻辑读或全表扫描时,往往意味着索引失效或统计信息过期,进而拖慢整库吞吐。掌握AWR报告分析、执行计划解读与SGA/PGA调优,能显著提升系统响应速度与并发能力。在电商订单查询、分页列表、存储过程批处理等高频场景中,合理的索引设计与SQL改写可带来数量级的性能收益。本文围绕Oracle性能优化,系统梳理从慢SQL定位到实例参数调整的完整排查链路,帮助开发者建立可复用的优化闭环。 阅读详情

相关推荐

sqlplan baseline 学习笔记

sqlplanbaseline,绑定执行计划,固定执行计划,使用baseline固定执行计划

Oracle SQL执行计划基线总结(SQL Plan Baseline)

Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PROFILE的改进版本,基本上它的主要作用可以归纳为如下两个: 1、稳定给定SQL语句的执行计划,防止执行环境或对象统计信息等等因子的改变对SQL语句的执行计划产生影响! 2、减少数据库中出现SQL语句性能退化的概率,理论上不允许一条语句切换到一个比已经执行过的执行计划慢很多的新的执行计划上! 注意: 1、从Oracle的发展角

oradh的专栏 1万+

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8606

oracle 删除sql基线,Oracle SQL执行计划基线总结(SQL Plan Baseline)

Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTL一、基础概念Oracle 11g开始,提供了一种新的固定执行计划的方法,即SQL plan baseline,中文名SQL执行计划基线(简称基线),可以认为是OUTLINE(大纲)或者SQL PROFILE的改进版本,基本上它的主要作用可以归纳为...

weixin_30199989的博客 820

RK3576平台Buildroot嵌入式Linux镜像构建实战

嵌入式Linux镜像构建是连接硬件能力与软件功能的核心技术环节,其本质是基于目标SoC架构的交叉编译、内核定制与根文件系统集成过程。原理上依赖工具链适配、设备树绑定、分区镜像生成等关键步骤,技术价值在于实现轻量、确定、可复现的系统交付。典型应用场景涵盖ARM64开发板(如RK3576)、工业边缘网关及国产化信创终端。本文以TaishanPi-3为载体,深入解析Buildroot在RK3576平台上的配置裁剪、并行编译优化、genimage分区合成及update.img烧录准备,覆盖从环境选型(Ubuntu

weixin_36047538的博客 140

LQR控制算法调参指南:如何通过Bryson‘s Rule和Trial-and-Error优化自动驾驶性能?

本文深入探讨了LQR控制算法在自动驾驶系统中的调参策略,从Bryson's Rule的基础应用到工程落地的优化方法。通过动态权重适应、非对角项引入和多目标权衡等技巧,提升车辆轨迹跟踪精度与操控舒适性。文章还介绍了数据驱动的调参流程和典型问题的解决方案,为自动驾驶工程师提供实用指南。

kkk56的博客 1025

SQL Server、Oracle 如何清除指定SQL的执行计划

SQL Server、Oracle 如何清除指定SQL的执行计划

Hehuyi_In的博客 5228

别再手动抄表了!用PaddleOCR超轻量模型5分钟搞定数字仪表识别(附完整Python代码)

本文介绍如何利用PaddleOCR超轻量模型快速实现工业仪表数字识别自动化。通过5行核心代码和关键预处理步骤,显著提升识别准确率至98.2%,解决传统OCR在工业场景中的体积大、抗干扰弱等问题,并提供完整Python代码和边缘部署优化方案。

weixin_31062533的博客 350

sql_plan_baseline

1、查看错误的SQL 所执行 的执行计划,确认是否需要使用基线控制执行计划 (前提,我们无法直接修改SQL,否则直接通过SQL改写方式即可) 2、打开基线捕获参数  alter session set optimizer_capture_sql_plan_baselines=TRUE  (关闭FALSE) 执行 SQL   执行2次,捕获执行计划,然后关闭alter session

u010719917的专栏 2511

告别‘Duang’的一声:手把手解决RK3588开发板PCIe初始化卡死问题(DTS修改实战)

本文详细介绍了解决RK3588开发板PCIe初始化卡死问题的完整过程,包括问题诊断、DTS文件修改及编译烧写步骤。通过禁用未使用的PCIe硬件资源,有效解决了启动卡死问题,为嵌入式开发者提供了实用的调试方法和经验总结。

weixin_30753873的博客 216

Mann-Kendall检验全解析:从原理到11种变体及Python实现

本文全面解析Mann-Kendall检验,从基础原理到应对自相关、季节性等复杂数据的11种关键变体,如Hamed-Rao修正、季节性MK和趋势自由预白化(TFPW)。详细阐述各方法的适用场景与数学原理,并提供完整的Python实战代码,帮助研究者针对不同数据特性选择最稳健的趋势分析方法。

weixin_29050271的博客 459

oracle sql plan baseline,Oracle SQL执行计划基线总结(SQL Plan Baseline)

SQL> select sql_handle,plan_name,dbms_lob.substr(sql_text,60,1) sql_text,ACCEPTED from dba_sql_plan_baselines;未选定行SQL> alter system flush shared_pool;系统已更改。SQL> select /* outlinetest2 */ /*+ ...

weixin_34546240的博客 447

【Godot】【工程】中文字体与多语言(缺字/体积/打包:一次性配置到位)

本文介绍了Godot游戏开发中的中文字体配置与多语言支持方案。主要内容包括:1)中文字体的全局与局部设置;2)使用子集化技术减小字体体积;3)多语言资源管理及翻译系统实现;4)语言切换机制与控件刷新方法;5)字体回退策略优化显示效果;6)打包优化建议。文章提供了从字体导入到多语言实现的完整解决方案,帮助开发者系统性解决中文显示和多语言支持问题,同时优化资源体积和性能表现。配套案例可供学习参考。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 598

Oracle SPM 固定执行计划实战:用 TaoToken 统一 Key 打通 SQL baseline 验证链路

Oracle SPM 固定执行计划实战:用 DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE 将全表扫描计划固化为 fixed baseline,并通过 TaoToken 统一 Key 管理模型调用,辅助解读执行计划与生成 PL/SQL。含 config.toml 配置、sql_id 反查、baseline 验证与回退全流程。官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_29867767的博客 239

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

算法如诗的博客 1299

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SQL BASELINE修改固定执行计划

SQL BASELINE修改固定执行计划 2011-06-10 12:50:51 分类: Linux http://www.itpub.net/thread-1445125-1-1.html http://www.itpub.net/viewthread.php?tid=1445246 打算把固定执行计划的方法做个整理和比较。上面的链接是SQL PROFILE,SQL OUTL

qyq88888的专栏 455

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

oracle 11g sql plan baseline(1)基本使用

学习11g sqlplan baselines sql plan baselines将取代outline,由于目前负责的几套rac版本已经是11.1.0.7.2所学习下sqlplan base lines特此记录 当想获得一个稳定的执行计划时候可以使用sqlplan baselines,原理跟outline类似 下面将具体操作,简单讲解下原理 参考资料 1.otn 2.oracle t

grpideas的专栏 2613

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Oracle11g中SQL Plan Management (三)

上面我们介绍了如果从各种源source中,将SQL执行计划转换为SQL Plan Baseline。本篇中我们继续介绍Baseline的选择和进化。 4、SQL Plan Management Selection ...

ciqu9915的博客 107

Oracle执行计划稳固

文章目录0、参考资料1、查看执行计划&指标解读1.1、查看执行计划1.1.1、explain plan命令1.1.2、DBMS_XPLAN包1.1.3、DISPLAY_SQL_PLAN_BASELINE函数1.1.4、SQLPLUS中的AUTOTRACE1.1.5、其它方式1.1.6、如何得到最真实的执行计划1.2、如何读懂执行计划1.2.1、执行计划阅读顺序1.2.2、执行计划指标解释2...

独孤清扬玩DB 761

sql plan baselines(一)

sql plan baselines 在一个成熟的生产系统上,我们总是希望运行越稳定越好,执行计划越确定越好。但由于统计信息的变化、优化参数的修改、系统设置的修改、profile的创建等,都有可能造成执行计划的变化,从而...

cuili9760的博客 248

baseline学习1

1.有关的两个参数 NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ optimizer_capture_sql_plan_baselines boolean     TRU

N 971

简单讨论在11G,10G中如何稳定SQL执行计划(一)

首先,什么是SQL的执行计划,包括为什么一个SQL会有多个不同执行计划等类似问题,我这里就不做讨论了,各位可以网上百度 在这里,我主要讨论一下,当一个常用的SQL,执行计划忽然发生改变,我们如何最快速度的将其执行计划稳定为平日使用的合理执行计划。 11G现在比较多,我们先讨论11G 11G,有个新特性,或者说一个新的功能包(package) ,SPM(Sql Plan Management)

老代——Oracle不仅是工作,更是兴趣 4764

使用spm固定sql执行计划

固定sql执行计划 var n number begin :n:=dbms_spm.load_plans_from_cursor_cache(sql_id=>'&sql_id', plan_hash_value=>&plan_hash_value, fixed =>'YES', enabled=>'YES'); end; /   删除固定的执行计划: To view all Pla

weiwang的专栏 2571

使用SQL Plan Baselines影响已加入hints的SQL执行计划

reference DBA手记2 1.SQL Plan Baseline(执行计划基线)概论 ...

cuimiwan3140的博客 232

11g awr oracle 系列_Oracle 11g 关于 AWR 的参数设置

--Interval :设置快照收集的频率,以分钟为单位。可设置的值最小为10分钟,最大为1年。如果设置该参数值为0,就表示禁用AWR特性。每30分钟一次exec dbms_workload_repository.modify_snapshot_settings(INTERVAL =>30);--设置 Retention :设置快照保存的时间,单位是分钟。可设置的值最小为1天,最大为100...

weixin_39710594的博客 236
上一篇: 很久没写过PL/SQL存储过程了--删除SQL Plan Baseline的存储过程
下一篇: 使用wrap和unwrap加密解密Oracle的PL/SQL对象(包,存储过程,函数等)代码
Samdy_Chan
博客等级 码龄18年 157粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值