概述
前言
前两天,执行了一个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万条)测试时,需要注意的问题。的全部内容,希望文章能够帮你解决【总结】大规模数据(300万条)测试时,需要注意的问题。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复