- 浏览: 312703 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (118)
- oracle (16)
- java (13)
- jquery (16)
- hibernate (2)
- spring (14)
- struts (2)
- eclipse (1)
- birt (5)
- integrated skill (13)
- linux (9)
- css+html (5)
- redis (1)
- jqgrid (4)
- mybatis (2)
- multithreading (3)
- jvm (1)
- mvn (3)
- php (2)
- jms (2)
- photoshop (1)
- springmvc (3)
- cluster (1)
- cache (1)
- jquery-ui (2)
- 英语词根 (0)
- svn (0)
- ide (1)
- mysql (3)
- rich-text (1)
- golang (8)
- mac 10 (1)
- android (1)
- react (0)
- bootstrap (2)
- css (2)
- 1 (0)
- beego (1)
- pictures (1)
- java小生转战 (0)
- 转站通知 (0)
- 转站通知,,,啊啊啊 (1)
- threeperson (1)
- unity (1)
最新评论
-
zld406504302:
aaaddddddd
java小生转站threeperson博客 -
zld406504302:
aaaaaddd
java小生转站threeperson博客 -
zld406504302:
aaaaaaaaaaaa
java小生转站threeperson博客 -
乌发舞天:
UEditor 实例 -
van_2013:
请问这是订阅模式的配置吗?
SPRING JMS 整合ACTIVEMQ
[list]
今天对一个存有1000万数据的大表进行了优化,尽是简单的优化,效果很明显。下面把自己的优化经过简单总结备忘一下。
1:创建表的备份,把生产表的querySql copy后修改table 为temp_tbl
2:从原有表中copy 数据插入到temp_tbl中语句如下
insert into temp_tbl select * from source_tbl
3:查看表数据量
selct count(1) from temp_tbl
4:查看表所在空间大小
select segment_name, bytes/1024/1024/1024 from user_segments
where segment_NAME = 'TEMP_TBL';
5:查看当前表索引
select * from user_indexes where TABLE_Name = 'TEMP_TBL'
6:利用存储过程做基数数据准备
7:在java中开启100个线程模拟100个用户 对该表进行单次10000数据插入(前提:temp_tbl 表中存有1000万数据)
[/list]
今天对一个存有1000万数据的大表进行了优化,尽是简单的优化,效果很明显。下面把自己的优化经过简单总结备忘一下。
1:创建表的备份,把生产表的querySql copy后修改table 为temp_tbl
2:从原有表中copy 数据插入到temp_tbl中语句如下
insert into temp_tbl select * from source_tbl
3:查看表数据量
selct count(1) from temp_tbl
4:查看表所在空间大小
select segment_name, bytes/1024/1024/1024 from user_segments
where segment_NAME = 'TEMP_TBL';
5:查看当前表索引
select * from user_indexes where TABLE_Name = 'TEMP_TBL'
6:利用存储过程做基数数据准备
CREATE OR REPLACE PROCEDURE CASE_ACLINE_TEMP_INSERT AS SQL_STMT VARCHAR2(1000) ; TYPE T_CUR IS REF CURSOR; V_PCUR T_CUR; TYPE CASE_IDS_TBL IS TABLE OF CASE_INFO_TEMP.ID%TYPE INDEX BY PLS_INTEGER; CASE_IDS CASE_IDS_TBL ; RESULTCOUNT INTEGER ; BEGIN SQL_STMT := 'SELECT ID FROM CASE_INFO_TEMP WHERE ID > 725' ; EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM ('||SQL_STMT||') ' INTO RESULTCOUNT ; IF RESULTCOUNT = 0 THEN RETURN ; END IF ; OPEN V_PCUR FOR SQL_STMT; FETCH V_PCUR BULK COLLECT INTO CASE_IDS; FOR I IN CASE_IDS.FIRST .. CASE_IDS.LAST LOOP SQL_STMT := 'INSERT INTO CASE_ACLINE_TEMP SELECT ID,NAME,VALID,I_NODE ,'; SQL_STMT := SQL_STMT || 'J_NODE,I_OFF,J_OFF,NOTE,'||CASE_IDS(I)||',R,X,B,UPDATETIME,I_P,I_Q,'; SQL_STMT := SQL_STMT || 'J_P,J_Q,I_QC,J_QC FROM CASE_ACLINE WHERE CASE_ID=725' ; --DBMS_OUTPUT.PUT_LINE(SQL_STMT); EXECUTE IMMEDIATE SQL_STMT ; COMMIT ; END LOOP; CLOSE V_PCUR ; END CASE_ACLINE_TEMP_INSERT;
7:在java中开启100个线程模拟100个用户 对该表进行单次10000数据插入(前提:temp_tbl 表中存有1000万数据)
[/list]
@Service public class CaseAclineServiceImpl extends CaseServiceImpl<CaseAcline> implements CaseAclineService { @Autowired private CaseAclineDao aclineDao; public void insertTemp(int caseID, CountDownLatch counter) { long l1 = System.currentTimeMillis() ; this.aclineDao.insertTemp(caseID); counter.countDown() ; long l2 = System.currentTimeMillis() ; System.out.println("编号 "+caseID+ "插入消耗:"+(l2-l1)+"毫秒"); } public void queryTemp(int caseID, CountDownLatch counter) { long l1 = System.currentTimeMillis() ; Query q = new Query() ; q.addQueryParam("caseID", caseID) ; //PagingResult<CaseAcline> pr = this.aclineDao.queryTemp(q); this.aclineDao.insertTemp(caseID); //PagingResult<CaseAcline> caseAcline = this.aclineDao.queryTemp(q) ; long l2 = System.currentTimeMillis() ; System.out.println("编号 "+caseID+ " 查询消耗:"+((l2-l1)/1000)+"秒"); counter.countDown() ; } } /** * @filename: TestWorker * @description: TODO * @author java 小生 * @date 2013-2-27 上午11:32:28 */ public class TestWorker extends Thread{ private CaseAclineService caseAclineService; private CountDownLatch counter; private int caseID ; TestWorker(CaseAclineService caseAclineService,CountDownLatch counter,int caseID ){ this.caseAclineService = caseAclineService ; this.counter = counter ; this.caseID = caseID ; } @Override public void run(){ //System.out.println(caseID); caseAclineService.queryTemp(caseID, counter); } } /** * @filename: CaseAclineServiceTest * @description: TODO * @author java 小生 * @date 2013-2-26 下午11:27:50 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:applicationContext.xml"}) public class CaseAclineServiceTest{ CountDownLatch counter = new CountDownLatch(100); ExecutorService executorService = Executors.newCachedThreadPool(); public int caseID = 11796 ; @Autowired private CaseAclineService caseAclineService; //@Test public void doInsert(){ long l1 = System.currentTimeMillis() ; for (int i = 0; i < 100; i++) { executorService.submit(new TestWorker(caseAclineService,counter,caseID++)); } try { counter.await() ; long l2 = System.currentTimeMillis() ; System.out.println("100个线程插入完成,耗时:"+((l2-l1)/1000)+" 秒"); } catch (InterruptedException e) { e.printStackTrace(); } } @Test public void doQuqery(){ long l1 = System.currentTimeMillis() ; for (int i = 0; i < 100; i++) { executorService.submit(new TestWorker(caseAclineService,counter,caseID++)); } try { counter.await() ; long l2 = System.currentTimeMillis() ; System.out.println("100个线程查询完成,耗时:"+((l2-l1)/1000)+" 秒"); } catch (InterruptedException e) { e.printStackTrace(); } } }
8:插入操作情况如下
峰值 内存占用达85% ,上下文切换较高 , 100次插入,成功96 ,失败4个
耗时(秒) 线程数
0-60 17
0-70 31
0-100 48
成功 96
利用hints /*+APPEND*/ 做插入,不删除外键索引 ,执行情况如下:
耗时(秒) 线程数
0-10 35
0-20 41
0-30 24
成功 100
去掉外键索引后的执行情况如下:
耗时(秒) 线程数
0-1 8
0-2 12
0-3 24
0-4 43
0-5 13
成功 100
8:100个线程做关联查询查询操作(单次查询数据位10000)情况如下
没有添加任何索引的查询结果
耗时(秒) 线程数
0-40 13
0-50 70
0-60 17
添加索引后 100个线程都在1秒内完成查询操作
总结:为了提高插入速度 用刀了hints 中的/*+APPEND*/ 从表中末尾追加,避免对索引过多维护消耗时间;
为了提高查询的速度,增加了一个外键索引。
对于hint 和索引的细节 还请百度 或是google ,小生了解有限。
发表评论
-
java 调用oracle 管道表函数
2013-07-10 22:11 2062需求:用户导入100万白名单 ... -
sql实现多行数据比对更新或插入操作
2013-05-29 14:41 4944Merge语法 MERGE [hint] INTO [sche ... -
oracle conn /as sysdba 找不到实例
2013-03-07 11:47 1023oracle conn /as sysdba 找不到实例 ... -
oracle 维护、监控、优化常用sql
2013-03-06 09:46 9401) sql监控 SELECT SE.sid, schema ... -
oracle 编码修改
2013-03-05 15:40 686SQL> shutdown immediate; ... -
oracle10 用户无法连接到指定实例
2013-03-05 14:32 1299问题1:tns:could‘not find the iden ... -
oracle sql 转义
2012-07-26 18:15 2374今天要在字段里查找'%',涉及到oracle的转义 ... -
获得每个班的前两名学生
2012-06-27 12:33 970群里有个朋友问了一个是sql查询的问题:“获得每个班的两名学 ... -
oracle procdure loop 内异常后继续下一次循环
2012-05-21 22:35 22711)oracle procdure 内异常处理 ... -
java调用 数组作为参数的管道表函数
2012-05-03 17:29 495需求:用户导入100万白 ... -
oracle tkprof 分析sql执行计划
2012-03-26 18:49 991oracle tkprof 分析sql ... -
oracle sql执行计划autotrace 安装
2012-03-23 14:25 935小生对or ... -
oracle 管道表函数2
2012-01-06 15:47 1040由于上一篇关于管道表函数写的有些粗糙,追 ... -
oracle 管道表函数
2011-05-24 17:24 1105------创建一个类型 create or r ... -
oracle 函数返回一个集合
2011-01-10 23:23 1028create or repla ... -
oracle 存储过程
2011-01-06 11:20 869create or replace procedure ...
相关推荐
### Oracle千万级别数据简单操作详解 #### 一、创建表空间与分区表 在Oracle数据库中处理千万级别的数据时,合理的表空间管理和分区策略是非常重要的。以下是从给定的部分内容中提取的关键步骤: 1. **创建表空间...
#### Oracle Database Machine:硬件级数据仓库支持 Oracle Database Machine是专门为运行Oracle数据库而设计的高性能硬件平台,集成了Sun服务器和InfiniBand网络技术,专为数据仓库和OLTP应用程序提供强大支持。 ...
现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库类型 如:(orcal,sqlServer,csv 迁移至mysql) 2.在迁移数据库时,可以只迁移指定字段. ...4.保护数据完整性,设计失败处理
【基于Oracle数据库与ArcSDE的空间数据存取优化】 随着空间信息技术的快速发展,Oracle数据库作为关系型数据库的重要代表,其规模不断扩大,存储空间数据的需求日益增长。为了应对海量空间数据的管理和高效存取,...
Oracle 大数据量操作性能优化 Oracle大数据量操作性能优化是指在处理大量数据时,如何提高 Oracle 数据库的性能。该优化技术涉及到多个方面,包括分区、Direct Insert、并行和排序处理等。 分区是 Oracle 中的一种...
基于Oracle数据库的数据存取性能优化初探.pdf
在处理大型数据库,尤其是当数据量达到百万级甚至千万级时,Oracle数据库的性能优化显得尤为重要。在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识...
Oracle 10g 数据库海量数据分页查询优化 本文主要介绍 Oracle 10g 数据库中的一种优化的海量数据分页查询解决方案。该方案通过分析传统分页查询技术的不足,融合了多种技术,包括数据库优化策略、SQL 语句优化、...
标题中的“Oracle数据库大对象数据存取的两种实现方法及时间性能比较”指的是在Oracle数据库中处理大对象(LOB)数据的两种不同方法,并对比它们的性能。Oracle数据库中的大对象数据通常指的是非结构化的数据,如...
java快速插入千万级数据,亲测91秒插入1700万数据!!!
在Oracle数据库管理中,处理千万级别的数据记录时,性能优化变得尤为重要。对于大规模数据集的分页查询,传统的SQL查询方式可能无法满足高效性与响应速度的要求,因此,设计并实现一个高效的存储过程来实现分页功能...
oracle数据仓库国宝级资料(全套) 1、Oracle+10g数据仓库实践--数据仓库基础.pdf 2、Oracle+10g数据仓库实践--总体方案.pdf 3、Oracle+10g数据仓库实践--方案的总体优势.pdf 4、Oracle+10g据仓库实践--数据仓库工具的...
### Oracle 10g性能分析与优化:深入理解Latch及其优化策略 #### 一、Latch与Lock的区别 在Oracle数据库的性能优化过程中,理解和区分Latch与Lock是非常重要的。两者虽然都涉及资源的控制和访问,但其作用机制和对...
Oracle导Mysql适用于百、千万级别数据迁移,速度是kettle的10倍以上数据库迁移 数据迁移 千万级 亿万级数据,MySQL oracle关系型 现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库...
Oracle查询的优化技巧,对大数据量查询的时候可以节省不少时间。
8. **分区(Partitioning)**:Oracle10g支持多种分区策略,如范围、列表、哈希和复合分区,便于管理和优化大规模数据表。 9. **物化视图(Materialized Views)**:物化视图可以预先计算并存储复杂查询的结果,...
在 Oracle 数据库中,如果删除了大量数据(千万级别),可能会出现查询变慢的问题。下面我们将分析这个问题的原因,并提供解决方案。 问题的原因主要有两个方面: 1. 表空间的增长:当删除大量数据后,表空间可能...
《Oracle 10g性能优化》一书深入探讨了如何在Oracle 10g数据库环境中实现性能优化,针对企业级应用中的常见问题提供了一系列实用的解决方案。以下是对该主题的关键知识点进行的详细解读: ### 1. Oracle Database ...
Oracle大数据量操作优化