问题标签 [bulk-operations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
66 浏览

sql - 以增量方式以性能方式批量删除

我们要删除同一个表中的一些匹配行似乎存在性能问题,因为该表有 10 亿行。

由于是 Oracle 数据库,我们也可以使用 PLSQL 进行增量删除,但我们想看看仅使用 sql 可以使用哪些选项来提高它的性能。

额外细节

基数是 9 亿行

没有触发器

0 投票
2 回答
248 浏览

sql - 从 oracle 中提取所有记录的更快方法

我的 oracle 表包含 9 亿条记录,该表分区为 24 个分区,并且有索引:

我尝试使用提示并将 fetch_buffer 设置为100000

获取1亿条记录需要30分钟

我的问题是:有没有更快的方法来获得 9 亿(表中的所有数据)?我应该使用分区并进行 24 个顺序查询吗?或者我应该使用索引并将我的查询拆分为 10 个查询,例如

0 投票
2 回答
779 浏览

java - 从 Java 向 Oracle 插入数千条记录,如何获得最佳性能?

我需要在java中创建一个批处理,它将读取一个可变数量的记录文件(尽管可以安全地假设5k +),处理它们,然后将记录插入到oracle 11g数据库中。我需要通过调用存储过程来做到这一点。

几个月前我已经做了一个类似的过程,我对此并不感到太自豪(没有什么特别的原因,除了我确信它根本不是最优的)。之前的解决方案我将所有内容都保存在内存中,为了插入行,我创建了一个 INSERT ALL 语句,在该语句中我只是通过一个字符串构建器附加了所有记录,然后执行该语句以一次性插入 15k+ 条记录。这次我需要使用存储过程来插入数据。我一直在阅读,现在知道有办法将数据数组发送到存储过程,所以我可以一次发送多条记录。

我是否应该创建一个存储过程来接收数组并在一次调用该 SP 时发送所有(可能是数千条)记录?还是我应该一次将其限制为一定数量的记录并调用该 SP(记录/限制)次数?

或者我应该远离使用数组,并拥有一个只接收一条记录的信息的存储过程,并根据我的记录多次调用它?

如果我要进行多次调用,我正在考虑使用 PreparedStatements 以及 .addBatch() 和 .executeBatch() 方法,这会是可行的方法吗?

我需要能够插入所有记录,并在出现任何错误时回滚。我将为此使用事务。从技术上讲,我不需要在性能方面达到任何门槛,但我对这个话题很感兴趣,这可能是开始更多地担心它的好时机,所以我想从有这个话题经验的人那里得到一些指示和提示.

0 投票
2 回答
82 浏览

oracle - Read and update an Oracle table with 20 millions records

I have a situation where I am doing a data fix from back up.

Table MAIN TABLE (PrimaryKey, Value) and Table BACKUP(PRIMARYKEY, Value).

I want to find all the records in MAIN Table with value=0 , then go fetch the value for the same primary key from table BACKUP and update the MAIN Table.

  1. There are 20 millions records with value=0
  2. Updates and fetch are both done using primary key

Questions

  1. Stored procedure? Script?

  2. Fetch and update are done on the same table? Any concerns?

  3. How much time do you think it will take- ball park figure. how to test?

Solution I was thinking :

Open a cursor on Table Main with my condition(value=0) and then go fetch value from BACKUP and then update. Commit every 10K updates in a loop

Any thoughts?

0 投票
0 回答
126 浏览

oracle - 使用 Shell 脚本将 DB2 迁移到 Oracle

我每天都在将数据从 DB2 迁移到 Oracle。我在 oracle(目标)中创建了与 DB2(源)中相同的表。我可以毫无问题地将数据从 DB2 迁移到 Oracle,但迁移 15,000,000 行需要将近 40 分钟。

下面是shell脚本,

是否通过为 pagesize 和 arraysize 设置适当的值来提高性能 cab?还是有其他方法可以提高性能?

0 投票
1 回答
105 浏览

oracle - Oracle 归档和清除选项

鉴于我们的情况,我正在尝试找出执行存档和清除的最佳选择。

我们在表 A 中大约有5000 万条记录。我们希望将数据归档到目标表中,然后清除源表中的这些数据。我们希望根据相互重叠的几个标准保留数据库。例如,我们希望保留过去 5 个月的数据,同时保留所有的记录,比如 Indicator='True'。Indicator='True' 可能会返回超过 5 个月的记录。这意味着我必须使用OR条件才能捕获数据。根据条件,我们需要保留 1000 万条记录归档/清除 4000 万条记录。我需要创建一个每 6 个月运行一次的流程来执行此操作。

我的问题是,对我来说,完成归档和清除工作的最有效选择是什么?PROC/批量删除/插入是我最好的选择吗?

分区似乎是不可能的,因为有几个条件相互重叠。

0 投票
1 回答
247 浏览

database - Oracle数据库表删除最佳实践

环境:Oracle 12C

得到一个包含大约 10 列的表,其中包括很少的 clob 和 date 列。这是一个非常繁忙的 ETL 过程表,如下所述 -

平面文件首先加载到表中,然后更新和处理。插入和更新分批进行。数以百万计的记录被插入和更新。

还有一个删除过程,可以根据表中的日期字段删除旧数据。删除过程作为 pl/sql 过程运行,并在循环中从表中删除,仅基于日期字段获取前 n 条记录。

我不希望删除过程干扰常规的插入/更新。对删除进行编码以使其对常规插入/更新过程的影响最小的最佳做法是什么?

我还可以对表进行分区并并行删除,因为每个分区都使用自己的回滚段,但我正在寻找一种更简单的方法来调整删除过程。关于使用特殊回滚段或其他调整技巧的任何建议?

0 投票
1 回答
87 浏览

sql - Oracle 更新的多列和不同的连接条件

我有 2 个表,1 个是位置,另一个是查找表。我必须查看查找表中的位置值,如果它们存在,则将它们标记为“Y”和“N”以及它们对应的值

在此处输入图像描述

我写了如下的个人更新声明:

对于第三个标志和值也是如此。

有没有办法为所有三个条件编写单个更新?我寻找单个更新的原因是我有 10+ 百万条记录,我不想扫描记录三个不同的时间。查找表有 > 3200 万条记录。

0 投票
0 回答
5099 浏览

c# - ORA-03137: 来自客户端的格式错误的 TTC 数据包被拒绝

在 C# 中,我在 oracle 数据库中进行批量复制,然后使用 oracle 托管数据访问调用另一个存储过程。批量复制成功并在表中插入记录。接下来,当存储过程执行时出现以下错误:

ORA-03137:来自客户端的格式错误的 TTC 数据包被拒绝:
[kpoal8Check-3] [16384] [0] [0x000000000] [265512] [] [] []
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/ SQL 版本 12.2.0.1.0 - 用于 64 位 Windows 的生产
“CORE 12.2.0.1.0 生产” TNS:版本 12.2.0.1.0 - 生产 NLSRTL 版本 12.2.0.1.0 - 生产

试图设置环境变量 CC_ORA_DISABLE_BATCH_ERRORS=TRUE; 但没有用。此错误的修复方法是什么?

0 投票
0 回答
31 浏览

java - 带有 Spring mongoTemplate 的 Azure Cosmos DB - 429 错误代码

我有一个名为 User.java 的对象,我想在 Azure CosmosDB 中一次推送 50 个对象。

以下是我的一项服务中的代码

userDao 具有以下功能

尝试执行上述代码,但从 Azure Cosmos Side 收到错误

2022-02-22T08:19:42.271866499Z,SDK:Microsoft.Azure.Documents.Common/2.14.0'。完整的响应是 {"_t": "OKMongoResponse", "ok": 0, "code": 16500, "errmsg": "Message: {"Errors":["请求率很大。可能需要更多请求单元,因此未进行任何更改。请稍后重试此请求。了解详情:http://aka.ms/cosmosdb-error-429"]}\r,RequestStats:\r\nRequestStartTime:2022-02-22T08:19:42.1311079Z,RequestEndTime:2022-02-22T08:19: 42.1311079Z,尝试的区域数:1\r\n{"systemHistory":[{"dateUtc":"2022-02-22T08:18:48.9014579Z","cpu":1.915,"memory":410733700.000," threadInfo":{"isThreadStarving":"False","threadWaitIntervalInMs":0.0187,"availableThreads" 1311079Z; 响应时间:2022-02-22T08:19:42.1311079Z;LSN:77910,GlobalCommittedLsn:77910,PartitionKeyRangeId:,IsValid:True,StatusCode:429,SubStatusCode:3200,RequestCharge:0.38,ItemLSN:-1,SessionToken:,UsingLocalLSN:False,TransportException:null,BELatencyMs:,ActivityId:4c3926ed- 0000-0000-0000-000000000000,RetryAfterInMs:68,TransportRequestTimeline:{“requestTimeline”:[{“event”:“Created”,“startTimeUtc”:“2022-02-22T08:19:42.1311079Z”,“durationInMs”: 0.0359},{“事件”:“ChannelAcquisitionStarted”,“startTimeUtc”:“2022-02-22T08:19:42.1311438Z”,“durationInMs”:0.0031},{“事件”:“流水线”,“startTimeUtc”:“ 2022-02-22T08:19:42.1311469Z", "durationInMs": 0.3715},

注意:还尝试将 RU [请求单位] 从 400 增加到 4000 并将收集置于 AutoScale 模式,但我们仍然面临同样的错误。