在Oracle中,当一个表有这么多索引时,如何提高插入的性能?
我们有一个表,上面有大约100个索引。因此,当我尝试向该表中插入大量行时,执行插入操作需要花费太多时间。我尝试了并行和附加提示,但没有多大帮助在Oracle中,当一个表有这么多索引时,如何提高插入的性能?,oracle,query-optimization,oracle12c,database-performance,database-administration,Oracle,Query Optimization,Oracle12c,Database Performance,Database Administration,我们有一个表,上面有大约100个索引。因此,当我尝试向该表中插入大量行时,执行插入操作需要花费太多时间。我尝试了并行和附加提示,但没有多大帮助 在这种情况下,是否有其他方法可以提高插入性能?(我不想先禁用然后再启用触发器)使用解释计划来确保正确使用追加和并行提示-这些提示可能会出现错误的方法有很多 下面是一个针对大型数据仓库语句的良好解释计划示例: create table test1(a number); explain plan for insert /*+ append parallel
在这种情况下,是否有其他方法可以提高插入性能?(我不想先禁用然后再启用触发器)使用解释计划来确保正确使用追加和并行提示-这些提示可能会出现错误的方法有很多 下面是一个针对大型数据仓库语句的良好解释计划示例:
create table test1(a number);
explain plan for
insert /*+ append parallel enable_parallel_dml */ into test1
select 1 from test1;
select * from table(dbms_xplan.display);
Plan hash value: 1209398148
--------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 2 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10000 | 1 | 2 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | LOAD AS SELECT (HYBRID TSM/HWMB)| TEST1 | | | | Q1,00 | PCWP | |
| 4 | OPTIMIZER STATISTICS GATHERING | | 1 | 2 (0)| 00:00:01 | Q1,00 | PCWP | |
| 5 | PX BLOCK ITERATOR | | 1 | 2 (0)| 00:00:01 | Q1,00 | PCWC | |
| 6 | TABLE ACCESS FULL | TEST1 | 1 | 2 (0)| 00:00:01 | Q1,00 | PCWP | |
--------------------------------------------------------------------------------------------------------------------
Hint Report (identified by operation id / Query Block Name / Object Alias):
Total hints for statement: 1 (U - Unused (1))
---------------------------------------------------------------------------
0 - STATEMENT
U - parallel
Note
-----
- dynamic statistics used: dynamic sampling (level=2)
- automatic DOP: Computed Degree of Parallelism is 2
为了获得良好的并行直接路径性能,以下是解释计划中需要注意的主要事项:
alter session enable parallel dml
)如果仍然存在问题,请使用SQL监控报告查找有关实际执行计划、行、时间和等待事件的信息。生成报告通常很简单,只要
从dual
选择dbms\u sqltune.report\u sql\u monitor(“您的sql\u ID”)。如果您在此处发布结果,可能有人会找到提高性能的方法。您是否尝试过sql loader(sqlldr)命令行工具?您最初提到索引,然后在结束时给出了关于禁用和启用触发器的注释。你知道到底是什么导致了速度的缓慢吗?是索引维护吗?还是运行触发器?或者其他什么(未索引的外键是比较常见的)?例如,如果性能问题是您有昂贵的行级触发器(可能部分是因为它们强制每行进行上下文转换),那么这与索引维护的问题非常不同。100索引-非常令人印象深刻!它们都是必需的吗?您可以监视索引的使用情况。注意,在运行查询时,Oracle能够组合多个索引。对于每个可能的查询,您不需要专用的复合索引。