【总结】大规模数据(300万条)测试时,需要注意的问题。
来源:互联网 发布:python应聘有什么要求 编辑:程序博客网 时间:2024/05/17 07:18
前言
前两天,执行了一个batch处理300万条数据
程序执行了33小时11分40秒
并且产生了10G多的log文件
事前准备(数据导入)
①数据导入所采取的方式
执行数据数据插入时,我们选择的方式最好是批处理
写一个存储过程,来对数据进行插入操作。
在oracle下面,我们还可以选择sqlldr命令导入ctl文件的方式导入数据。
②如何执行导入数据用的存储过程(分批次执行多次,不要直接循环300万次)
使用存储过程导入数据时,我们不要一下子就执行300万循环
我们可以把他分组为10万执行30次。
select create_date_100000();
select create_date_100000();
select create_date_100000();
③注意导入时,备份文件的清理
在postgre数据库上,执行存储过程生成数据时
会产生大量的备份文件,吃掉硬盘空间
我们要对这些备份文件及时进行删除处理
这么执行效果好像也不是太好
最佳执行方案:
每次执行1万件,执行300次
select create_date_10000();
。。。
。。。
select create_date_10000();
以上为100个,执行时可以一起执行的(两个叹号的那个图标),不用等这1个执行完了,再执行下一个(其实就是批处理,一次执行100个存储过程,每个存储过程生成1万条数据);
每次执行100个,每个1万件的执行时间大约是25秒到33秒之间
所以执行100万件也就需要50分钟,在这期间注意清空数据库的备份文件
如果单独执行10万件,所需的时间大约是15分钟
执行500万件直接卡死!!
程序的实施执行(注意log级别要使用真实环境下的,不应该有debug级别)
注意程序执行时的log级别
在这种情况下debug级别的log不应该出现
事后处理(如何更快的删除数据)
在执行完程序之后,我们一定要对我们插入数据库中的数据进行删除
在删除数据时,我们应该采取部分删除的方式。
比如
delete from TBL_USER_INFO where update = '20120426' AND user_id like '0%';
delete from TBL_USER_INFO where update = '20120426' AND like '1%';
使用这种方式来删除数据
要比直接
delete from TBL_USER_INFO where update = '20120426'
一下删除300万条的数据效果要好。
(注: ①update = '20120426' 是我们为了让寄存的数据与新插入的数据相互区分,所特定设置的值
select count(user_id) from TBL_USER_INFO where update = '20120426'
所得到的值就是300万
②user_id是我们这张表的主键,同时也是设置了索引的列)
- 【总结】大规模数据(300万条)测试时,需要注意的问题。
- 【总结】大规模数据测试,数据准备时需要注意的问题(【保护已有数据】【大规模数据影响普通测试】【不要着急删除数据】)
- 大规模数据作成时的注意点。
- 大规模数据生成 (500万条数据)
- 测试项目中需要注意的问题
- WebView使用时需要注意的细节问题(持续总结)
- 数据整合需要注意的问题
- socket 发送数据需要注意的问题
- 数据可视化中需要注意的问题
- 大规模导出线上HBsase数据出现的问题总结
- 进行一个robotium的测试项目需要注意的问题
- 需要注意的问题
- 需要注意的问题
- 使用FlashPlayer11.2测试右键需要注意的问题
- 手机client端测试需要注意的问题
- 学习AS编程时需要注意的10条注意事项
- 基于.NET的系统开发需要注意的问题总结
- 测试大数据(快速排序)100万条数据
- 异地数据库导入数据内容
- Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法
- ACTIVITY 跳转 通信
- Windows核心编程【2】小结
- Linux_常用命令耗时统计
- 【总结】大规模数据(300万条)测试时,需要注意的问题。
- php定时计划常用实现方法
- 浅议Windows 2000/XP Pagefile组织管理
- 这么多数据库组件,实际使用中会不会影响效率?
- repo 的用法和理解
- easyUI属性汇总
- step by step 安装svn for ubuntu
- 自定义View自定义属性
- ubuntu 安装svn