问题描述
我是完全陌生的oracle和卡在一个应用程序特定的问题是使用oracle db。所以下面是关于我所面临的问题的查询:
我试图一个非常简单的查询 (插入到DIM select * 从标记) 与1800万记录在标记。
大约花了5个小时。
所以我在目标表上创建了DOP (平行度),下面是解释计划。
目标表有4个索引,其中一个constarint主键作为表定义本身的索引。(因此总共有5个索引)。<使用索引表空间 “INDEX_TEST” 启用约束 “ABC” 主键 (“键”)>
我还创建了所有的索引并行,除了使用索引在表DDL中的constaraint (试图改变它的平行)。
我在下面的注释中得到:
-使用的动态统计: 动态采样 (级别 = 自动)
-由于表属性,并行度为4
-禁用PDML,因为索引未并行就绪
你能帮助我们理解这一点吗?根据我的理解,加载时不使用并行性。
除了约束索引我创建了所有的索引parallel。也试图改变约束索引的并行仍然得到 “PDML禁用,因为索引不是并行准备”。
在这种情况下如何进行?
我试图一个非常简单的查询 (插入到DIM select * 从标记) 与1800万记录在标记。
大约花了5个小时。
所以我在目标表上创建了DOP (平行度),下面是解释计划。
目标表有4个索引,其中一个constarint主键作为表定义本身的索引。(因此总共有5个索引)。<使用索引表空间 “INDEX_TEST” 启用约束 “ABC” 主键 (“键”)>
我还创建了所有的索引并行,除了使用索引在表DDL中的constaraint (试图改变它的平行)。
--------------------------------------------------------------------------------------------------------------------------复制
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |复制
--------------------------------------------------------------------------------------------------------------------------复制
| 0 | INSERT STATEMENT | | 18M| 4838M| 46989 (1)| 00:00:02 | | | |复制
| 1 | LOAD TABLE CONVENTIONAL | DIM | | | | | | | |复制
| 2 | SEQUENCE | SEQ | | | | | | | |复制
| 3 | PX COORDINATOR | | | | | | | | |复制
| 4 | PX SEND QC (RANDOM) | :TQ10000 | 18M| 4838M| 46989 (1)| 00:00:02 | Q1,00 | P->S | QC (RAND) |复制
| 5 | PX BLOCK ITERATOR | | 18M| 4838M| 46989 (1)| 00:00:02 | Q1,00 | PCWC | |复制
|* 6 | TABLE ACCESS FULL | FLAGGING | 18M| 4838M| 46989 (1)| 00:00:02 | Q1,00 | PCWP | |复制
--------------------------------------------------------------------------------------------------------------------------复制
我在下面的注释中得到:
-使用的动态统计: 动态采样 (级别 = 自动)
-由于表属性,并行度为4
-禁用PDML,因为索引未并行就绪
你能帮助我们理解这一点吗?根据我的理解,加载时不使用并行性。
除了约束索引我创建了所有的索引parallel。也试图改变约束索引的并行仍然得到 “PDML禁用,因为索引不是并行准备”。
在这种情况下如何进行?
专家解答
好的,首先,插入1800万行需要5个小时通常是错误的,例如
2000万行11秒,在我的笔记本电脑上。这将显示影响约束、索引、触发器等可能对您的负载有影响。所以理想情况下,如果你的要求允许,你想禁用这些东西,加载数据,然后重新启用。
当涉及到并行进行ins/upd/del修改时,您必须首先在会话级别启用它,即
alter会话启用并行dml;
SQL> create table t as 2 select e.* from scott.emp e, 3 ( select 1 from dual connect by level <= 20000000/14 ); Table created. SQL> create table t1 as select * from scott.emp where 1=0; SQL> set timing on SQL> insert /*+ APPEND */ into t1 2 select * from t; 19999994 rows created. Elapsed: 00:00:11.83复制
2000万行11秒,在我的笔记本电脑上。这将显示影响约束、索引、触发器等可能对您的负载有影响。所以理想情况下,如果你的要求允许,你想禁用这些东西,加载数据,然后重新启用。
当涉及到并行进行ins/upd/del修改时,您必须首先在会话级别启用它,即
alter会话启用并行dml;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1325次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
798次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
725次阅读
2025-03-06 09:41:49
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
468次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
363次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
316次阅读
2025-03-26 23:27:33
Oracle分区和执行计划相关的几个问题
听见风的声音
310次阅读
2025-03-07 08:51:42
数据库管理-第299期 数据库是否需要定期重启(20250306)
胖头鱼的鱼缸
252次阅读
2025-03-06 09:09:35
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
250次阅读
2025-03-19 14:41:51
风口浪尖!诚通证券扩容采购Oracle 793万...
Roger的数据库专栏
245次阅读
2025-03-24 09:42:53