存储过程-mysql快速制造千万级别测试数据

Mysql数据库,非mariadb。给某张表插入数据,方法:写存储过程

过程如下:

delimiter //
create procedure proc1()
begin
set @a=1;
while @a<10000001do 
insert into  uc_play_log(app_id,bobo_client_id,content_code,content_type,create_time,event,main_folder,play_time,title,user_id) values('bobo',1.101,'002','vod','2018-05-12 11:08:11','playing','惊悚','200','电锯惊魂2','test001');
set @a=@a+1;
end while;
end
//
delimiter ;

执行

call proc1();

注意:mariadb和mysql不一样的,此处只是对于Mysql的操作。

原来造的测试数据都很少,没有发现当有百万级别的数据的时候,插入原来是那么慢的。
5分钟才插入不到2万条,我的内心是崩溃的,于是百度各种方法,终于找到一个。

便是改 mysql的这个参数: InnoDB_flush_log_at_trx_commit
看看该参数的解释:

这个参数控制缓冲区的数据写入到日志文件以及日志文件数据刷新到磁盘的操作时机.在正式环境中建议设置成1。
设置0时日志缓冲每秒一次被写到日志文件,并且对日志文件做向磁盘刷新的操作,但是在一个事物提交不做任何操作.
设置1时在每个事物提交时,日志缓冲被写到日志文件,并且对日志文件做向磁盘刷新的操作
设置2时在每个事物提交时,日志缓冲被写到日志文件,但不对日志文件做向磁盘刷新的操作,对日志文件每秒向磁盘做一次刷新操作.

此参数不设置的话默认值是1,要是改的话后果就是可能会丢失数据,因为是1s提交一次,而不是每次事务提交时就提交。但是造数据一般在测试环境,我觉得先改为0 也没有什么大的影响,造好数据可以再改回去。

这个参数要在 my.cnf配置里面设置,直接在mysql客户端设置貌似不生效的。

设置后再插入,1000万大概10分钟,百万不到1分钟,可以了吧。

你可能感兴趣的:(存储过程-mysql快速制造千万级别测试数据)