为什么在 CLOB 上使用 REPLACE 函数会导致 CACHE_LOBS 增加...?

2024-01-12

我需要在 CLOB 变量上使用内置 REPLACE 函数,作为更大的 PL/SQL 流程的一部分。我使用的是 Oracle 11g R2,该函数工作正常,因为它根据需要进行替换,但随着过程运行(大约有 250 万条记录需要处理),它的速度严重减慢 - 如下所示:

  • 前 20,000 条记录:约 12 分钟
  • 第二 20,000 条记录:约 24 分钟
  • 第三 20,000 条记录:约 37 分钟
  • 第四个 20,000 条记录:约 52 分钟
  • etc...

在操作期间检查 V$TEMPORARY_LOBS 表明 CACHE_LOBS 的值随着处理的每一行而增加 - 我的假设是这意味着与 LOBS(在本例中为 CLOBS)关联的内存一旦被使用就不会被释放......?

使用 PL/SQL 调试器单步执行代码会发现,每次调用 REPLACE 函数,CACHE_LOBS 的值都会增加 2。函数调用大致如下:

clobRTFText         CLOB;
...
dbms_lob.createtemporary(clobRTFText, TRUE, dbms_lob.call);
...
clobRTFText := REPLACE(clobRTFText, '<CR>', '\par ');  <== Causes CACHE_LOBS to increase by 2
...
dbms_lob.freetemporary(clobRTFText); <== Doesn't seem to cause CACHE_LOBS to decrease 

上面的第三行代码就好像正在动态创建更多 CLOB 变量。这是因为 REPLACE 函数需要 VARCHAR2 参数而发生某种隐式类型转换吗?我尝试使用 dbms_lob.copy 而不是“clobRTFText := REPLACE...etc”,但实际上更糟糕(即 CACHE_LOBS 增加得更快)。无论什么原因,对 dbms_lob.freetemporary 的调用似乎对 CACHE_LOBS 的值没有任何影响。

我已经经历了LOB 的 PL/SQL 语义 http://docs.oracle.com/cd/E11882_01/appdev.112/e18294/adlob_plsql_semantics.htmOracle 文档的部分 - 它提到了 CLOB 和 VARCHAR2 变量可以在内置函数中使用的方式,但我找不到任何有关这样做可能导致额外内存使用的信息。

有谁知道为什么会发生这种情况,或者我如何做到这一点(即使用 REPLACE 和 CLOB)而不无法释放内存(假设确实发生了这种情况)?

Thanks


为什么要按程序执行此操作?看来声明式方法满足了要求。

UPDATE clob_table SET clob_column = REPLACE(clob_column, '<CR>', '\par ');

你可以提供任何东西WHERE适合您的条款。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 CLOB 上使用 REPLACE 函数会导致 CACHE_LOBS 增加...? 的相关文章

  • 如何从oracle存储过程中提取out变量?

    我有存储过程 其中有很多输出变量 所以我这样调用存储过程 export const infoHR3 async gt try const sql Declare ln order qty NUMBER ln in proc qty hr N
  • 转置和聚合 Oracle 列数据

    我有以下数据 Base End RMSA Item 1 RMSA Item 2 RMSA Item 3 RMSB Item 1 RMSB Item 2 RMSC Item 4 我想将其转换为以下格式 Key Products RMSA RM
  • PLS-00103:遇到符号“CREATE”

    这个包有什么问题 因为它给出了错误 CREATE OR REPLACE PACKAGE PKG SHOW CUST DETAILS AS PROCEDURE SHOW CUST DETAILS myArg VARCHAR2 END PKG
  • 版本控制存储过程/PLSQL?

    有没有一种有效的方法来对用 PL SQL 编写的存储过程进行版本控制 我只提到 PL SQL 因为可能存在特定的工具 任何针对存储过程版本控制的答案都是理想的 在我目前的工作中 团队现在使用以下方法对PL SQL进行版本控制 编译PL SQ
  • Oracle PL/SQL 将行类型作为构造函数参数传递

    是否可以将 table rowtype 作为构造函数中的参数传递 我有这样的东西 这有效 CREATE OR REPLACE TYPE shape AS OBJECT name VARCHAR2 30 area NUMBER CONSTRU
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • 如何使用 JSON_TABLE 从 Oracle JSON 列获取键值作为结果集

    我用谷歌搜索了很多 似乎无法找到适合我的简单用例的简单解决方案 我在 Oracle 12C 数据库中有一个 json 列 当然实际上是一个带有 json 约束的 varchar 在该列中我存储了这样的 Map 表示 a 9 0847 b 8
  • 如何在 Hibernate 中使用 Oracle 查询提示

    我试图在 Hibernate 中使用 Oracle 提示来调用强制索引 但在 Hibernate 3 6 10 Final 中没有找到任何合适的 API 我以某种方式尝试了 Hibernate 标准中的预测 proList add Proj
  • SQL使用多个/相关列计算项目频率?

    我对 SQL 完全陌生 并且阅读了有关 SQL 的 StackOverflow 帖子来尝试弄清楚这一点 以及其他来源 但无法在 SQL 中执行此操作 开始 我有一个 3 列和数千行的表 其中包含前 2 列的数据 第三列当前为空 我需要根据第
  • 在 plsql 中立即执行

    如何从这段代码中得到结果 EXECUTE IMMEDIATE SELECT FROM table name through for loop 通常的方法看起来像这样 for items in select from this table l
  • sql server GO 相当于 oracle

    我正在为 Oracle 编写迁移脚本 我需要更改表结构 然后用数据填充它 我想先进行结构更改 然后再进行数据更改 在 SQL Server 中我会使用GO分离批次 是否有 SQL ServerGOOracle 中的等效命令 It s and
  • 如何打印Oracle中过程的定义?

    oracle中有没有办法查看过程的结构是什么 我正在尝试记录并运行程序 并希望将实际的程序结构存储在我的日志中 您可以查询ALL SOURCE table SELECT text FROM all source WHERE owner lt
  • 使用 JPA 时如何在部署时设置序列的架构名称?

    出于安全原因 我们的 Oracle 数据库对象通常属于与登录用户不同的架构 例如 表位于 xx core 中 我们登录的用户是 xx app yy 在我的 persistence xml 中 我定义了一个 orm 文件 以便我可以在部署时指
  • 如何检查 Oracle 数据库是否存在长时间运行的查询

    我的应用程序使用 Oracle 数据库 速度缓慢或似乎完全停止 如何找出哪些查询成本最高 以便我可以进一步调查 这显示当前处于 活动 状态的 SQL select S USERNAME s sid s osuser t sql id sql
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 使用 gv$session 判断查询是否挂起

    我有一个在 Oracle 中运行的查询 该查询可能会挂起 也可能不会挂起 它现在已经运行了大约 10 个小时 但根据我正在加载的数据量 这可能并非不合理 我正在查看 gv session 中的会话 想知道是否有一种方法可以转换该信息以查看是
  • 使用 xmlagg 时出现子查询错误和太多值

    我在连接许多大型表中的所有数据时遇到问题 我昨天对此提出了问题 但不幸的是 listagg 似乎不是一个好的选择 链接子查询返回多行 https stackoverflow com questions 54651144 subquery r
  • 如何将整行(在 SQL 中,而不是 PL/SQL 中)传递给存储函数?

    我遇到以下 非常简单 问题 我想编写一个 Oracle SQL 查询 大致如下 SELECT count MyFunc MyTable FROM MyTable GROUP BY MyFunc MyTable 在 PL SQL 中 可以使用
  • 嵌入定义绑定变量的 Oracle PL/SQL 代码的 Shell 脚本

    如果我运行下面的脚本 我会收到错误SP2 0552 未声明绑定变量 OUTRES 那么 如何定义绑定变量OUTRES以及在哪里定义呢 usr bin bash sqlplus s scott tiger lt lt EOF declare
  • ora-12528: TNS:Listener: 所有适当的实例都阻止新连接

    当我尝试连接到数据库时收到此错误 ora 12528 TNS Listener 所有适当的实例都阻止新连接 我尝试了以下操作 但没有成功 停止和启动侦听器 关闭和启动数据库 重新启动 oracle 服务 我该如何解决这个问题 您可能会遇到网

随机推荐

  • 使用 Hibernate 持久保存接口集合

    我想用 Hibernate 来保存我的小动物园 Entity Table name zoo public class Zoo OneToMany private Set
  • 如何在本地测试 Azure 队列触发器函数?

    我创建了一个Azure Functions 项目并正在本地测试它 https blog kloud com au 2016 12 02 debugging azure functions in our local box 下面是我创建云队列
  • 如何求解稀疏矩阵的线性方程 AX=b

    我有稀疏矩阵 A 120 000 120 000 和向量 b 120 000 我想使用 Eigen 库求解线性系统 AX b 我尝试按照文档进行操作 但总是出现错误 我还尝试将矩阵更改为稠密并求解系统 Eigen MatrixXd H N
  • 由 find_or_create_by_ 创建的重复记录

    我有一个 ActiveRecord 对象 Corporation 我的项目中创建该对象实例的唯一调用如下所示 corp Corporation find or create by eveid and user id self corpora
  • 我可以在Windows下改变python ttk组合框的颜色吗?

    我在 Linux 下得到了工作代码 用于更改 python 2 7 下 Ttk 的 TCombobox 的外观 如果我在windows下运行代码 它不会工作 我知道 ttk 小部件的颜色和属性是依赖于平台的 我仍然不知道如何更改 Windo
  • 未找到 MY_Controller 类

    我想解决的主要问题是当有人想要访问管理面板时检查用户会话 我已经创建了 MY Controller 类并将其放入库中 class MY Controller extends CI Session public logged in FALSE
  • Android Viewpager EdgeEffect自定义颜色

    我正在尝试在我的应用程序的 Viewpager 中自定义 EdgeEffect 目的是用定制的红色 ics Overscroll EdgeEffect 替换蓝色 ics Overscroll EdgeEffect 所以一开始我编辑了过度滚动
  • cuda 3D纹理插值

    我正在尝试使用纹理内存和下面的代码通过 cuda 插入 3D 数组 我已将输入 f x y z 绘制为固定的 z 值 然后为 x 和 y 插入数组并再次绘制 i 它们看起来完全不同 我还在一维中尝试过这个 使用不同的代码 并且它在那里工作
  • 如何处理 UsernameNotFoundException spring security

    如何处理UsernameNotFoundException 在 Spring Security 中 当用户名未找到时UserDetailsService实现抛出一个UsernameNotFoundException 例如这样 Overrid
  • 将 UIDatePicker 从 12 小时制更改为 24 小时制并返回

    很抱歉 我的第一个问题有点简单 我花了一天时间阅读 NSLocale 和 NSCalendar 类描述 但我不知道这是否可能 我有一个 UIDatePicker 处于 UIDatePickerModeDateAndTime 模式 当前它根据
  • Java 正则表达式中的 POSIX 字符等效项

    我想在Java中使用这样的正则表达式 a e i 但是Java不支持POSIX类 a e etc 我怎样才能做到这一点 更准确地说 有没有办法不使用 US ASCII Java确实支持posix 字符类 http download orac
  • 使用 micronaut-data-hibernate-jpa 库连接到 jpa 时出现错误

    我想将 JPA 用于 micronaut 为此我正在使用io micronaut data micronaut data hibernate jpa 1 0 0 M1图书馆 每当我运行应用程序并点击端点来获取数据时 我都会收到以下错误 me
  • Keycloak / SpringBoot - OpenID 配置中提供的颁发者 与请求的颁发者 不匹配

    我对我刚刚加入的项目有疑问 技术栈 Jhipster 与 Angular 和 SpringBoot Keycloak 我将正确的网址替换为 example com 和 bar com 应用程序 yaml https i stack imgu
  • Html.Action - 获取与发布

    我经常这样做 div Html Action Create Product div 这很方便 因为我可以将产品创建表单的绘制委托给另一个控制器操作以嵌入到某个位置 但是 我遇到的问题是 该方法有时 我还没有弄清楚在什么条件下 会调用我的控制
  • 我如何知道鼠标指针是否位于 HTML 元素上?

    我有一个定时事件 我想根据鼠标指针所在的 HTML 元素采取不同的行为 假设我有 HTML 元素 有没有办法知道鼠标指针当前是否位于其顶部 我很了解 onmouseover onmouseout 事件以及如何使用它们 我正在使用 JQuer
  • 多个外键?

    我有一张表 用于跟踪将产品从一个供应商运送到另一个供应商的天数和成本 我们 非常出色 p 将运输供应商 FedEx UPS 和产品处理供应商 Think Dunder Mifflin 存储在 VENDOR 表中 因此 我的 SHIPPING
  • 使用硬浮点时使用 gcc 交叉编译简单示例时出现问题

    当我尝试编译一个简单的例子时test c int main return 0 对于具有硬浮点 ABI 的 cortex m7 目标 使用以下调用 arm none eabi gcc mcpu cortex m7 mfpu fpv5 d16
  • 类型错误:res.json 不是函数

    我正在尝试发送两个 json 但它不起作用 它打印TypeError res json is not a function但我不明白为什么会发生 有什么想法吗 谢谢 app post danger function response req
  • GWT XML(xml 对象映射)

    在 Java 中 我们可以使用 JAXB 等工具自动为我们进行类对象映射 但是在 GWT 中 由于反射有限 JAXB 不可用 唯一的方法是 Document messageDom XMLParser parse messageXml Nod
  • 为什么在 CLOB 上使用 REPLACE 函数会导致 CACHE_LOBS 增加...?

    我需要在 CLOB 变量上使用内置 REPLACE 函数 作为更大的 PL SQL 流程的一部分 我使用的是 Oracle 11g R2 该函数工作正常 因为它根据需要进行替换 但随着过程运行 大约有 250 万条记录需要处理 它的速度严重