匿名用户

1级

2017-01-23 回答

一、 提高DML操作的办法:

简单说来:

1、暂停索引,更新后恢复.避免在更新的过程中涉及到索引的重建.

2、批量更新,每更新一些记录后及时进行提交动作.避免大量占用回滚段和或临时表空间.

3、创建一临时的大的表空间用来应对这些更新动作.

4、批量更新,每更新一些记录后及时进行提交动作.避免大量占用回滚段和或临时表空间.

5、创建一临时的大的表空间用来应对这些更新动作.

6、加大排序缓冲区

alter session set sort_area_size=100000000;

insert into tableb select * from tablea;

commit;

如果UPDATE的是索引字段,就会涉及到索引的重建,暂停索引不会提高多少的速度,反而有可能降低UPDATE速度,

因为在更新是索引可以提高数据的查询速度,重建索引引起的速度降低影响不大。

ORACLE优化修改参数最多也只能把性能提高15%,大部分都是SQL语句的优化!

update总体来说比insert要慢 :

几点建议:

1、如果更新的数据量接近整个表,就不应该使用index而应该采用全表扫描

2、减少不必要的index,因为update表通常需要update index

3、如果你的服务器有多个cpu,采用parellel hint,可以大幅度的提高效率

另外,建表的参数非常重要,对于更新非常频繁的表,建议加大PCTFREE的值,以保证数据块中有足够的空间用于UPDATE, 从而降低CHAINED_ROWS。

二、 各种批量DML操作:

(1)、oracle批量拷贝:

set arraysize 20

set copycommit 5000

copy from username/password@oraclename append table_name1

using select * from table_name2;

(2)、常规插入方式:

insert into t1 select * from t;

为了提高速度可以使用下面方法,来减少插入过程中产生的日志:

alter table t1 nologging;

insert into t1 select * from t;

commit;

(3)、CTAS方式:

create table t1

as

select * from t;

为了提高速度可以使用下面方法,来减少插入过程中产生的日志,并且可以制定并行度:

create table t1 nologging parallel(degree 2) as select * from t;

(4)、Direct-Path插入:

insert /*+append*/ into t1 select * from t;

commit;

为了提高速度可以使用下面方法,来减少插入过程中产生的日志:

alter table t1 nologging;

insert /*+append*/ into t1 select * from t;

Direct-Path插入特点:

1、 append只在insert … select …中起作用,像insert /*+ append */ into t values(…)这类的语句是不起作用的。在update、delete操作中,append也不起作用。

2、 Direct-Path会使数据库不记录直接路径导入的数据的重做日志,会对恢复带来麻烦。

3、 Direct-Path直接在表段的高水位线以上的空白数据块中写数据,不会重用高水位线以下的空间,会对空间的使用造成一定的浪费,对查询的性能也会造成一定的影响。而常规插入会优先考虑使用高水位线之下有空闲空间存在的数据块。因此理论上Direct-Path插入会比常规插入速度更快,因为Direct-Path直接使用新数据块,而常规插入要遍历freelist获取可用空闲数据块,如果同 nologging 配合,这种速度优势会更加明显。

4、 以append方式插入记录后,要执行commit,才能对表进行查询。否则会出现错误:ORA-12838: 无法在并行模式下修改之后读/修改对象。

5、 用append导入数据后,如果没有提交或者回滚,在其他会话中任何对该表的DML都会被阻塞(不会报错),但对该表的查询可以正常执行。

6、 在归档模式下,要把表设置为nologging,然后以append方式批量添加记录,才会显著减少redo数量。在非归档模式下,不必设置表的 nologging属性,即可减少redo数量。如果表上有索引,则append方式批量添加记录,不会减少索引上产生的redo数量,索引上的redo 数量可能比表的redo数量还要大。

7、 数据直接插入数据文件,绕过buffer cache并且忽略了引用完整性约束。

8、 不管表是否在nologging 下,只要是 direct insert,就不会对数据内容生成undo。

9、 Oracle在Direct-Path INSERT 操作末尾,对具有索引的表执行索引维护,这样就避免了在drop掉索引后,再rebuild。

10、 Direct-Path INSERT比常规的插入需要更多的空间。因为它将数据插入在高水位之上。并行插入非分区表需要更多的空间,因为它需要为每一个并行线程创建临时段。

11、 在插入期间,数据库在表上获得排他锁,用户不能在表上执行并行插入、更新或者删除操作,并行的索引创建和build也不被允许。但却可以并行查询,但查询返回的是插入之前的结果集。

(5)、并行DML:

如果你的服务器有多个cpu,采用parellel hint,可以大幅度的提高效率

ALTER SESSION ENABLE PARALLEL DML;

INSERT /*+ PARALLEL(tableA, 2) */INTO tableA

SELECT * FROM tableB;

为了提高速度可以使用下面方法,来减少插入过程中产生的日志:

INSERT /*+ PARALLEL(tableA, 2) */INTO tableA NOLOGGING

SELECT * FROM tableB;

oracle默认并不会打开PDML,对DML语句必须手工启用。即需要执行

alter table enable parallel dml命令。

并行DML特点:

1、在并行DML模式中,默认的就是DIRECT-PATH插入,为了运行并行DML模式,必须满足以下条件:

a、必须是Oracle企业版;

b、必须在session中使并行DML生效,执行以下sql语句:

ALTER SESSION { ENABLE | FORCE } PARALLEL DML;

c、必须指定table的并行属性,在创建的时候或者其他时候,或者在insert操作时使用“PARALLEL”提示。

d、为了使Direct-Path Insert模式失效,在INSERT语句中指定“NOAPPEND”提示,覆盖并行DML模式。

2、并行Direct-Path INSERT到分区表:

类似于serial Direct-Path INSERT,每个并行操作分配给一个或者多个分区,每个并行操作插入数据到各自的分区段的高水位标志之上,commit之后,用户就能看到更新的数据。

3、并行Direct-Path INSERT到非分区表:

每个并行执行分配一个新的临时段,并插入数据到临时段。当commit运行后,并行执行协调者合并新的临时段到主表段,用户就能看到更新的数据。

4、Direct-Path INSERT可以使用Log或者不使用Log。

5、另外不得不说的是,并行不是一个可扩展的特性,只有在数据仓库或作为DBA等少数人的工具在批量数据操作时利于充分利用资源,而在OLTP环境下使用并行需要非常谨慎。事实上PDML还是有比较多的限制的,例如不支持触发器,引用约束,高级复制和分布式事务等特性,同时也会带来额外的空间占用,PDDL同 样是如此。

oracle批次处理数据_如何加速Oracle大批量数据处理相关推荐

  1. oracle批量update数据_东方国信大数据面试真题

    东方国信 学长1 Hadoop工程师笔试题(金融事业部) 1)技术基础题(共十题,每题5分) (1)列举在Linux系统下可以在看系统各项性能的工具(区分CPU.内存.硬盘.网络等) (2)HDFS写 ...

  2. plsql删除大量数据_一次oracle大量数据删除经历

    oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...

  3. mysql oracle 备份数据库备份_完整备份Oracle数据库

    修改备份文件的有效时间(必须用spfile启动数据库)SQLgt; alter system set control_file_record_keep_time=30 scope=both; 修改备份 ...

  4. oracle删除的数据没有commit,在Oracle中误删除数据后并commit后的数据恢复办法

    在Oracle中误删除数据后并commit后的数据恢复办法 背景:表A数据误操作,被delete了,恢复. --1.先备份A表当前数据. --2.查询某 在Oracle中误删除数据后并commit后的 ...

  5. oracle 合并重复数据_三天三夜整理出来的数据库常见的面试题,让你直接拿走...

    1.触发器的作用? 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以联级运算.如,某表 ...

  6. oracle select 行数据_【赵强老师】什么是Oracle的数据字典?

    欢迎关注赵强老师微信公众号:myitshare 数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一 ...

  7. bootstraptable获取所有数据_一键获取oracle用户下所有表的表名与其数据量

    概述 作为DBA,对数据库中表段.索引段之类的数量,大概的级别是需要有个大致了解的,今天主要分享一个存储过程,可以很实用的获取到oracle用户下所有表的表名与其数据量. 查询当前用户名下所有表 se ...

  8. oracle 查询当年数据_查询ORACLE数据库TOP SQL使用情况

    使用BOOST和ORACLE::OCCI查询ORACLE数据库TOP SQL使用情况 /topsql.h#ifndef TOPSQL_H#define TOPSQL_H#include#include ...

  9. oracle批次处理数据_Oracle大批量删除数据方法(转)

    批量删除海量数据通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交. 下面是我的删除过程,我的数据表可以通过主键删除,测试过Delete和For all两种方法,for all在 ...

最新文章

  1. 解决:无法创建该DNS 服务器的委派
  2. CF650C Table Compression
  3. linux efi不要boot目录,linux – 找不到efi目录:grub-install的问题
  4. tb计算机存储单位_如何节省数TB的云存储
  5. 【Java基础篇】你真的懂switch语句吗?
  6. apache commons lang架包介绍
  7. sql server作业_在SQL Server中报告作业失败并发出警报
  8. 程序员面试宝典——第6章
  9. 华为ERPS配置步骤
  10. css背景颜色设置为半透明,关于css设置背景色透明,半透明
  11. Git 版本控制系统的安装与使用
  12. Busting Frame Busting: a Study of Clickjacking Vulnerabilities on Popular Sites
  13. springboot上传图片
  14. 交互式电子白板android,交互式电子白板_触摸屏电子白板_智能电子白板_GESEE国视科技...
  15. 英语单词记忆 词源法-思维导图(19)词源st/sist/stat/stin/stem-236
  16. 《阿尔比恩的种子》pdf、mobi、epub
  17. 对口升学考试计算机专业好考吗,2017届对口升学考试计算机专业月考三试题
  18. K-means最优K值计算(利用SSE)
  19. 如何在Linux上部署web程序
  20. flash特效原理 图片切换滚动

热门文章

  1. 数学基础 - 第十八章 平行四边形
  2. Excel批量合并相同内容单元格操作——WPS太秀了
  3. Nacos开机报错找不到java环境
  4. 第十七届全国大学生智能汽车竞赛创意组-百度智慧交通(丝绸之路)
  5. 软件测试的各种技术你知道吗?
  6. 华为服务器开机显示选择一个选项,win10系统频繁出现“选择一个选项”界面的解决方法...
  7. 给Android新手的六条建议,听说安卓不火了?
  8. Whole Word Masking
  9. Chrome插件:网易云音乐听歌识曲
  10. Java实现JWS生成与验签