问题标签 [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.
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:是/否
查询需要:
- 为 TransactionItem 中的每条记录设置 FlagA 和 FlagB 的值。
- 根据 TransactionItem 中 Flags 的值,为 Transaction 中的每一行设置 FlagA 和 FlagB 的值
我已将查询分为 4 个步骤。
- 为 TransactionItem 设置标志 A 的值
- 为 TransactionItem 设置标志 B 的值
- 为事务设置标志 A 的值
- 为事务设置标志 B 的值
查询运行顺利。然而,这就是问题所在。有数十亿条Transaction记录,每个Transaction大约有7个Transaction Item。
这是它现在的速度:
- 总时间:616 秒 / 10.27 分钟
- 每秒处理 1,218 个事务/每分钟 73,000 个事务
我跟踪了每个步骤的处理时间:
为 TransactionItem 设置标志 A 的值
- 4分52秒
为 TransactionItem 设置标志 B 的值
- 3分26秒
为事务设置标志 A 的值
- 1分6秒
为事务设置标志 B 的值
- 0 分 51 秒
以下是我的完整查询。这是使用的其他表
产品
- 每个 TransactionItem 都有一个 ProductId 每个产品都有一个 ProductCode。
- 一个产品代码有多个产品
标记AproductCodes
- 包含分类为 FlagA 的 ProductCode 列表的单列
标记B产品代码
- 包含分类为 FlagB 的 ProductCode 列表的单列
交易支付
- 这是一个包含每笔交易的付款详情的事实表
Payment_Dim
- PaymentID 上的 TransactionPayment 链接
- 这是必需的,因为 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
非常感谢您的帮助,谢谢
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
解释计划
database - Teradata 到 Oracle 迁移主键和索引
我正在从 Teradata 迁移到 Oracle,并且我对 DDL 中的主键和索引有疑问。
这里有几个场景和我在做什么:
1) 在 Teradata 中有:
然后在 Exadata 中我使用:
2)在 Teradata 中没有主键,但有:
然后在 Exadata 中我使用:
3) 在 Teradata 中没有主键,但有:
然后在 Exadata 我使用
4) 在 Teradata 中没有主键,但有:
然后在 Exadata 我使用创建索引
如您所见,何时只需要使用约束主键以及何时需要使用创建索引并不完全清楚。任何帮助将非常感激。
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 个字符
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 的任何情况都会导致失败。
java - Oracle JDBC Clob 插入问题 ORA-00942
我正在从 Oracle 源读取一组字段并将检索到的数据插入到另一个 Oracle 源中,当我尝试插入 clob 区域时,我碰巧遇到“java.sql.SQLException: ORA-00942: table or view does not exist " 例外,所有字段都成功插入,但 clob 区域除外。下面我将添加目标表的字段和我的示例代码。我还在stackoverflow 上找到了这个解决方案,但对我没有帮助。目标表是oracle exadata
代码:
oracle - Oracle Exadata 上的分区是如何生成的?
我想知道 oracle 是如何创建它的,因为我希望能够在单个 TBS 中拥有所有月份分区以进行备份,oracle 自动生成的分区名称示例是“ SYS_P321847 ”
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
oracle - 从 oracle 仓库表中删除 10 亿条记录
我有一个由某人从另一个表创建的巨大表,并且想要删除它。我没有截断/删除表的权利。什么是最好的解决方案。它在甲骨文中。
现在我打算给一个简单的Delete * from table
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 范围运行时是否可以返回相同的行。