关于 ORACLE 大数据量操作 的调优
来源:互联网 发布:大数据分析关键技术 编辑:程序博客网 时间:2024/06/06 00:36
由于系统进入到压力测试阶段,需要准备大量数据来模拟测试环境,其中就牵涉到一些大的数据量的操作。以下是一些心得。
1. 如果需要对一个大数据量的表进行全表更新,那是非常耗时的。那么此时不如使用 CREATE table_temp as (select b.x,b.y,b.z from table b )来代替update。
以下是几种可以使用这种方法的场景:
a. 假设表A有3个字段(x,y,z),其中y需要被全盘更新为一个统一的值1
那么可以这样:a.1 先建立一个a的临时表A_temp create table A_temp as select t.x,1,t.z from A t;
a.2 然后把A表上的建立索引、主键一类的SQL语句记录下来
a.3 然后drop掉A表,并且把A_temp表改名为A
a.4 最后在A表上重建索引、主键
这两者之间的效率相差数十倍。
2. 对大数据量操作的效率的调优
按照一般情况下的调优,当然是创建一个3000万数据的临时表,然后以这个临时作为基础数据,写存储过程,使用循环,不断插入数据:
(假设B表是目标表,B_TEMP是我建立的包含了3000万数据的临时表,B的字段也有3个,x,y,z,其中y,z分别是年和月)
--------------------这样写的结果就是速度超慢---------------------------------------
month integer;
year integer;
nowdate date := sysdate ;
begin
for c in 1..36 loop
select addmonths(nowdate ,1) into nowdate from dual;
month :=to_number(to_char(nowdate,'MM'));
year :=to_number(to_char(nowdate,'yyyy'));
insert into B (x,y,z) select (x,year,month) from B_TEMP;
end loop;
end insert_p ;
然后,进入到数据库所在机器,使用机器上自带的sqlplus来执行这个存储过程insert_p
--------------------这样写的结果就是速度超慢---------------------------------------
所以,我们要开启并发
简单的说,就是使用多个cpu同时来写(当然,前提是你有多个cpu)
启动并发的步骤如下:
a. 打开,并调整表的并行度(值根据cpu的个数来定)
b. 将表置为“无事件记录”模式
在sqlplus下敲入:alter session enable parallel dml;
d. 在sql语句中添加 parallel参数,以及 nologging参数
create or replace procedure insert_p as
month integer;
year integer;
nowdate date := sysdate ;
begin
for c in 1..36 loop
select addmonths(nowdate ,1) into nowdate from dual;
month :=to_number(to_char(nowdate,'MM'));
year :=to_number(to_char(nowdate,'yyyy'));
insert into /*+ parallel (B,8) */ B nologging (x,y,z) select/*+ parallel (B_TEMP,8) */ x,year,month from B_TEMP;
end loop;
end insert_p ;
综上几步,可以最大限度地使用已有的CPU,大幅提高执行效率。当然,写的不对的请大家指正,并强烈期待有高手前来补充。
- 关于 ORACLE 大数据量操作 的调优
- oracle中大数据量join操作的试验
- 数据库大数据量的操作
- 关于hibernate的大数据量的处理
- oracle大数据量的导入和导出
- ORACLE大数据量下的分页解决方法
- oracle中大数据量更新的测试
- ORACLE大数据量下的分页解决方法
- Oracle 大数据量下的数据迁移
- ORACLE大数据量下的分页解决方法
- ORACLE大数据量下的分页解决方法
- oracle insert 大数据量的经验
- 大数据量下的数据操作
- 对于大数据量csv文件的操作
- 关于大数据量模糊查询的方法
- 关于大数据量的处理思路
- 关于大数据量的GP服务实现
- 关于大数据量的数据库设计问题
- V4L2摄像头获取单幅图片测试程序
- Visual Studio统计有效代码行数
- php长连接处理整理
- Apache+php+mysql在windows下的安装与配置图解
- timer linux编程学习
- 关于 ORACLE 大数据量操作 的调优
- 《设计模式——可复用面向对象软件的基础》学习笔记(1.2)Design patterns in Smalltalk MVC
- ARM未来世界开启传送门6-预备第2天
- 十年的程序员生涯
- oracle学习记录之一
- 好文章记录-为防止丢失
- 不用arp欺骗进行嗅探以及会话劫持
- mongodb指南(三) - developer zone - 快速启动MongoDB
- Linux DM9000网卡驱动程序完全分析