问题标签 [exadata]

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 投票
3 回答
1336 浏览

sql - 提高在 ExaData 上运行的 Oracle 查询的速度

我正在处理一个 Oracle 查询,我非常需要让它更快。我将不胜感激任何建议。

  • 数据库是 Oracle,在 ExaData 集群上运行。
  • Oracle 版本:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

我有两张桌子。

1) 交易:在商店购买 - TransactionID

2) TransactionItems:每次购买有 1..many items - TransactionID, ItemID

在每个表中,有两个标志:

  • 标志A:是/否
  • 标志B:是/否

查询需要:

  1. 为 TransactionItem 中的每条记录设置 FlagA 和 FlagB 的值。
  2. 根据 TransactionItem 中 Flags 的值,为 Transaction 中的每一行设置 FlagA 和 FlagB 的值

我已将查询分为 4 个步骤。

  1. 为 TransactionItem 设置标志 A 的值
  2. 为 TransactionItem 设置标志 B 的值
  3. 为事务设置标志 A 的值
  4. 为事务设置标志 B 的值

查询运行顺利。然而,这就是问题所在。有数十亿条Transaction记录,每个Transaction大约有7个Transaction Item。

这是它现在的速度:

  • 总时间:616 秒 / 10.27 分钟
  • 每秒处理 1,218 个事务/每分钟 73,000 个事务

我跟踪了每个步骤的处理时间:

  1. 为 TransactionItem 设置标志 A 的值

    • 4分52秒
  2. 为 TransactionItem 设置标志 B 的值

    • 3分26秒
  3. 为事务设置标志 A 的值

    • 1分6秒
  4. 为事务设置标志 B 的值

    • 0 分 51 秒

以下是我的完整查询。这是使用的其他表

产品

  • 每个 TransactionItem 都有一个 ProductId 每个产品都有一个 ProductCode。
  • 一个产品代码有多个产品

标记AproductCodes

  1. 包含分类为 FlagA 的 ProductCode 列表的单列

标记B产品代码

  1. 包含分类为 FlagB 的 ProductCode 列表的单列

交易支付

  1. 这是一个包含每笔交易的付款详情的事实表

Payment_Dim

  1. PaymentID 上的 TransactionPayment 链接
  2. 这是必需的,因为 FlagB 是基于 Payment_Dim.PaymentName 设置的

我有这些索引:

交易 1. TransactionID

TransactionItems 1. TransactionID 2. ProductID

产品 1. 产品 ID 2. 产品代码

FlagAproductCodes 1. ProductCode

FlagBproductCodes 1. ProductCode

付款 1. PaymentID 2. PaymentCode 3. Payment_Name

非常感谢您的帮助,谢谢

0 投票
1 回答
3505 浏览

oracle - Exadata 上的 Oracle 数据库。更新运行数小时,并行提示不起作用

我们有两个巨大的表并试图更新大约 6000 万条记录。以前是 30 分钟更新一次,现在需要几个小时 n 个小时,甚至不超过 20% 的数据增长。这里有更多信息。我看到“单元单块物理读取”“PX Deq:Table Q Normal”事件有很多等待。我不明白为什么并行提示不起作用。这是单元单块物理读取的原因吗?还是有任何其他原因导致性能下降,有什么想法吗?是否有理由通过摆脱“WHERE EXISTS”子句来提高性能?

table1(A) 大小 316 GB 记录数 456,365,654

表 2(B) 7GB 记录数 31,934,956

解释计划

0 投票
0 回答
559 浏览

database - Teradata 到 Oracle 迁移主键和索引

我正在从 Teradata 迁移到 Oracle,并且我对 DDL 中的主键和索引有疑问。

这里有几个场景和我在做什么:

1) 在 Teradata 中有:

然后在 Exadata 中我使用:

2)在 Teradata 中没有主键,但有:

然后在 Exadata 中我使用:

3) 在 Teradata 中没有主键,但有:

然后在 Exadata 我使用

4) 在 Teradata 中没有主键,但有:

然后在 Exadata 我使用创建索引

如您所见,何时只需要使用约束主键以及何时需要使用创建索引并不完全清楚。任何帮助将非常感激。

0 投票
1 回答
117 浏览

sql - 子选择(而不是数字常量)恶化优化

我的问题类似于To subselect or not to subselect? 但我想继续使用两个现有视图(因此我不想将子选择直接移动到视图逻辑中)。

(1.5 秒)

直接使用子选择中的值时查询速度很快:

更多细节:n 不是唯一的,它的值在 0 到 4000 之间;对于每个 n 存在大约 50 行。来自不同行的 11 个值沿 n 旋转到列中。

有没有不提取视图后面的选择(或修改表)的解决方案?优化器提示可能吗?

第一个是慢的,第二个是快的: 在此处输入图像描述

LE:我已经简化了查询。


感谢@nop77svk,简化的查询可以快速运行。更复杂的查询没有(还):

快速地:

慢(并且仍然有些简化):

新查询


关于视图 v_headers 的更多细节:

列定义

  • 72 行
  • 57 行,master_dynamic_data = 'M'
  • column_def.col_id:唯一 1..100(有间隙)
  • column_def.col_name: c1, c2, c3,... (实际上是 20 个字符而不是 'cx')

qa_data:

  • 450k 行
  • 每个 qa_data.n 的平均行数为 112 行。(n 是从 1 到 4000)
  • qa_data.value 的平均长度为 18 个字符
0 投票
2 回答
568 浏览

sql - Oracle Exadata - 在连接条件下使用 AND 时,LEFT OUTER JOIN 的作用类似于 INNER

背景

最近我公司从 Oracle 11g 升级到 Exadata。所有生产对象和数据均已成功迁移到新系统,并经验证系统之间为 1:1 匹配。在我们的新系统上完成第一组每日 ETL 流程后,我们立即发现我们的报告表明显小于预期。经过进一步调查,我们发现添加到 LEFT OUTER 联接的批次 ID 导致了它们在 11g 上完美运行的问题。

问题

为什么以下查询在 11g 上被视为 LEFT OUTER JOIN,而在 Exadata 上被视为 INNER JOIN?

更新

似乎 ETL 过程中使用的查询中存在拼写错误,或者原始开发人员忽略了这种情况。如果您查看最后一个连接,您会注意到该连接位于 ACTVY_KEY 和 BATCH_ID 上。问题是它引用的 BATCH_ID 来自 ACTVY_MNGMT 表。数据库本质上将此视为 WHERE 子句,因此 CALL_KEY 为 NULL 的任何情况都会导致失败。

0 投票
1 回答
988 浏览

java - Oracle JDBC Clob 插入问题 ORA-00942

我正在从 Oracle 源读取一组字段并将检索到的数据插入到另一个 Oracle 源中,当我尝试插入 clob 区域时,我碰巧遇到“java.sql.SQLException: ORA-00942: table or view does not exist " 例外,所有字段都成功插入,但 clob 区域除外。下面我将添加目标表的字段和我的示例代码。我还在stackoverflow 上找到了这个解决方案,但对我没有帮助。目标表是oracle exadata

代码:

0 投票
0 回答
305 浏览

oracle - Oracle Exadata 上的分区是如何生成的?

我想知道 oracle 是如何创建它的,因为我希望能够在单个 TBS 中拥有所有月份分区以进行备份,oracle 自动生成的分区名称示例是“ SYS_P321847

0 投票
0 回答
452 浏览

netsuite - 通过 informatica 将数据从 Netsuite 加载到 Exadata 时出错

在将数据从 Netsuite 加载到 exadata 时,我收到一张表的以下错误,如下所示

FnName:Fetch Optimize - [NetSuite][ODBC 64 位驱动程序]行错误。FnName: Fetch Optimize -- [NetSuite][ODBC 64 bit driver][OpenAccess SDK SQL Engine]无法检索数据。错误票证# iiap9cx01whniqe60ajrc[401]]

该表有大约 80,00,000 条记录。在加载了大约 5,10,000 条记录后,它无法加载。

请指导。先感谢您。

此致, Amogh Datar

0 投票
2 回答
51 浏览

oracle - 从 oracle 仓库表中删除 10 亿条记录

我有一个由某人从另一个表创建的巨大表,并且想要删除它。我没有截断/删除表的权利。什么是最好的解决方案。它在甲骨文中。

现在我打算给一个简单的Delete * from table

0 投票
1 回答
442 浏览

oracle - Oracle/ExaData RowNum Range 返回重复行

我正在 java 程序的 for 循环中对 exadata 执行此查询

在这里,我不断将数字增加 10000,因此在下一次循环迭代中,数字将是 50001 和 60001

我将这些行插入另一个数据库并再次循环。

目前,我的代码遇到随机错误,如

当我检查我的源(exadata)数据库时,只有 1 行 a=23 和 b = ABC@XYZ.COM。所以来源没有任何重复。

当我检查我的目标数据库时,我可以看到行 a=23, b = ABC@XYZ.COM 已经插入到之前的循环迭代中。{{我在程序开始时删除并重新创建目标表。}}

所以看起来我的窗口查询一次又一次地返回同一行。

我做了很多搜索,我很确定我的窗口查询不应该返回重复项......但看起来确实如此

我不是 oracle/exadata 专家...所以让我知道上面的查询在使用不同的 rownum 范围运行时是否可以返回相同的行。