关于mysql中数据插入时间过慢问题

目前往MySQL中一次性插入大约一万五千条数据,每条数据九百多列,总共需要十分钟左右,请问时间是否过慢,如果过慢该如何解决?

19个回答

如是普通PC级服务器(或是更好一点的消费级服务器),你每条数据平均占用时间为40MS,考虑到你的每条数据有900多列。这样的话,已经不慢了。

如想更快的话:
1、查看是否有索引,索引是以降低插入、删除、修改时的性能,提高查询的性能。所以索引会影响插入的性能,当然自增ID的主键不在此列。
2、查看能否优化数据结构,一条记录900多列过多了。是否有大量重复数据,如有则可以优化。
3、查看能否分表,一个表一次就要插入15000行记录,太多了。是否需要经常查询所有的这些数据,如不是则可以优化(如索引不可避免,则更应如此)。
4、使用事务,一次处理如500行左右。
5、考虑MYSQL本身的日志、备份机制是否可以关掉。(这一点我也不熟)
6、使用更好的服务器。

cyang421
cyang421 回复weixin_41986182: 查询不可避免,如果分表的话会不会影响查询效率,另外分表应该按照什么依据来分
大约 2 年之前 回复

如果有索引的话,建议利用分表操作。万级的数据必须要用垂直分表操作,这样每天插入的数据在不同的表中,索引也就在不同的表的索引中,减少插入带来的效率问题。

“ 网上购物系统”的主要功能模块

看你是如何操作的?如果通过工具导入,使用事务应该会快一些。

这个跟电脑有关,电脑装大的程序多了也会慢的

慢 数据更好的组织与存储 也就是数据结构更好一些有利于数据的存取

慢可能是因为计算机存储功能的大小有关也有可能跟数据存储的数据结构有关,建议可以释放电脑内存或者选择比较好的数据结构

qq_42163775
qq_42163775 有很多种情况可以影响到数据插入的快慢,如电脑本身的配置,用存储过程可以更快。
大约 2 年之前 回复
cyang421
cyang421 回复r0328p: 怎么界定是否是比较好的数据结构?
大约 2 年之前 回复
cyang421
cyang421 回复r0328p: 怎么界定是否是比较好的数据结构?
大约 2 年之前 回复
cyang421
cyang421 回复r0328p: 怎么界定是否是比较好的数据结构?
大约 2 年之前 回复

是什么需求一次要插入这么多数据 自增ID插入是比较快的 建议分成几个batch插入 每个batch几百条 异步执行
mysql可以进行分库分表 多机插入也可以解决

向有索引的表插入数据,是会越来越慢的,因为插入数据之后需要冲减索引。

向有索引的表插入数据,建议分成几个batch插入 每个batch几百条 异步执行

共19条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于mysql使用存储过程插入大量数据的问题

创建数据库 create database ceshi; use ceshi; 创建表 create table ce( id int not null auto_increment, name varchar(50) default null, pw char(50), primary key(id)); 存储过程 delimiter // create procedure insert_ce(in item int) begin declare counter int; declare i int; set counter=item; while counter >=1 do insert into ce values(counter,concat('mysqls',counter),repeat('ab',5)); set counter =counter-1; set i=i+1; if i=1000 then set i=0; commit; end if; end while; end // delimiter ; 十万条数据使用的时间是40分钟 另一钟方法: create table t_2 (id serial,name char(5)) ; delimiter $$ SET AUTOCOMMIT = 0$$ create procedure test02(in i int) begin declare v_cnt decimal (10) default 0 ; dd:loop insert into t_2 values (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'), (null,'aaaaa'); commit; set v_cnt = v_cnt+10 ; if v_cnt = i then leave dd; end if; end loop dd ; end;$$ delimiter ; 十万条数据使用的时间是7分钟 设置缓存的话不到两种方法都是一份钟不到就好了,朋友说有可能是默认缓存过小的原因。可是,两种方法在同一个机子上测试,没有设置缓存,所用的时间就是差很多。 想问一下是什么原因造成的,还想知道插入多少条数据提交一次才是最优插入,第二种方法的注释?

向mysql中插入50000条数据怎么那么慢。。。

package cn.itcast.bath; import java.sql.Connection; import java.sql.PreparedStatement; import org.junit.Test; import cn.itcast.jdbc.JDBCUtils; public class Bath { @Test public void demo1() { Connection conn=null; PreparedStatement stat=null; long start = System.currentTimeMillis(); try { conn=JDBCUtils.getConnection(); String sql ="insert into person values(?,?,?)"; stat=conn.prepareStatement(sql); for (int i = 1; i <=50000; i++) { stat.setInt(1, i); stat.setString(2, "name"+i); stat.setString(3, "email"+i); stat.addBatch(); if(i%1000==0) { stat.executeBatch(); stat.clearBatch(); } } } catch (Exception e) { e.printStackTrace(); }finally{ long end = System.currentTimeMillis(); System.out.println("执行时间:"+(end-start)); JDBCUtils.release(stat, conn); } } }

MySql 千万级数据量 查询很慢

![图片说明](https://img-ask.csdn.net/upload/201907/09/1562638890_925956.png) ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562638089_178461.png) 如图:numberrecord 表 3600W数据量。 需求是去重掉 time 与 number一致的数据。 我用的去重插入复制表的方法。 目前已经执行12个小时了,一夜没睡。 试过用java去处理,多线程分页查询去重,jvm直接崩溃。 ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562638251_87062.jpg) VM options : -Xms5000m -Xmx8000m 电脑内存16G的 问题2就是3600W数据 SELECT number FROM numberrecord where time <'2019-07-08' group by number 需要查询出 2019-07-08之前的所有number数据. 这个sql 如何优化。 time,number都有索引 求大牛给个高效率解决方案。

mysql批量插入耗时问题,求解

使用mysql批量插入时,发现进行sql的string语句拼接特别耗时,数据库执行插入时间还算比较快。想问有什么好的解决方案可以提高sql的string语句拼接速度(一次插入200条,每条数百列数据)?另外进行insert批量插入时,插入的记录是否会被更改?比如替换或者删除?

MySQL插入数据缓慢,建立session连接需要很长时间是怎么回事?

为什么在执行Mysql插入的时候会等待20-30秒,就是建立SessionFactory的这个过程。 program strt: 2013-09-22 16:22:40.413 complete build SessionFactory: 2013-09-22 16:23:10.299 open session begin transaction time: 2013-09-22 16:23:10.322 这是我在命令行打印的运行时间,还是一个新手,希望高手指点!

mysql 一张超级大表,加字段很慢怎么办

假设一张表已经有5000w数据了,现在想加一个字段,加字段特别慢, 并且加字段的同时要停服务,想问下行业上的解决方案是什么,主要还是 加字段速度特别慢的问题,如果能解决不停止服务加字段那就更好了, 希望有人能解决!,谢谢。

用java向mysql中导入大量txt数据

用java向mysql中导入大量txt数据大约一百万条,怎样能用jdbc高效的存储,不用jdbc有其他方法也可以,重要的是,快![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/4.gif)求大神指点一二,尽量不要发百度连接啥的,我差不多都找过了,说的详细点,![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif)跪求

mysql 数据库中 blob 类型存储数字 无法正常插入更新

事情是这样的,在Mysql数据库中有个字段是blob类型的,里面存放的是 8字节无符号整数, 类似于 33454690,45672389,这样一类数值,我使用select 语句select conv(hex(bc.DataTimeStamp) ,16,10) as DataTimestamp 是可以正常显示的,现在我想把 33454690 这个数字 查找出来,加1,变为 33454691,再存放回去。 使用语句 insert into VALUES (33454691) 或者 insert into VALUES (conv(33454691 ,10,16)) 或者 insert into VALUES (concat('0x',hex(33454691))) ,都是不行的,在更新之后 查询,发现都变了样 编程不是我想要的。 原因是 mysql 的转换函数 conv 、concat 函数都是返回的字符串,mysql 会把返回的结果 当做字符串 再进行二进制转换 保存进入 blob,结果就是错的了。 我仅仅是想实现 insert into values (0x22C304) ,但是我不知道 0x22C304 是怎么由 33454691 转换而来并且不被当做字符串处理的。 谢谢大家,在线等。

请教存储过程执行很慢,如何优化?

BEGIN DECLARE personPlaneId BIGINT; DECLARE starttime datetime; #开始时间 DECLARE endtime datetime; #结束时间 DECLARE sumStudyTime INT; #当前学时 DECLARE targetStudyTime INT; #目标学时 DECLARE id1_count BIGINT default 0; #t_stage_info 第一阶段count DECLARE id2_count BIGINT default 0; #t_stage_info 第二阶段count DECLARE id3_count BIGINT default 0; #t_stage_info 第三阶段count DECLARE firstEndTime datetime; #第一阶段结束时间 DECLARE secEndTime datetime; #第二阶段结束时间 DECLARE thirdEndTime datetime; #第三阶段结束时间 DECLARE done INT DEFAULT 0; #声明光标 DECLARE cur1 CURSOR FOR SELECT p1.id, p1.start_learn_time start_time, p1.last_date end_time, p1.sum_study_time,p1.target_study_time FROM t_person_plan p1 LEFT JOIN t_person_plan_record p2 ON p1.id = p2.person_plan_id WHERE p1.license_type = 7 AND p1.last_date <= CURRENT_DATE(); #t_person_plan_record p2 这个表数据大概500多万条 #当游标到达尾部时,mysql自动设置done=1 declare continue handler for SQLSTATE '02000' SET done = 1; OPEN cur1; REPEAT /* 移动游标并赋值 */ fetch cur1 into personPlaneId,startTime,endTime,sumStudyTime,targetStudyTime; if NOT done then #获取第一阶段结束时间 SET firstEndTime = (SELECT add_time FROM t_person_plan_record WHERE person_plan_id=personPlaneId AND chapter_id=29611); #获取第二阶段结束时间 SET secEndTime = (SELECT add_time FROM t_person_plan_record WHERE person_plan_id=personPlaneId AND chapter_id=29625); #获取第三阶段结束时间 SET thirdEndTime = (SELECT add_time FROM t_person_plan_record WHERE person_plan_id=personPlaneId AND chapter_id=29734); #获取主键标识 SELECT count(1) into id1_count from t_stage_info where person_plan_id=personPlaneId AND stage=1; SELECT count(1) into id2_count from t_stage_info where person_plan_id=personPlaneId AND stage=2; SELECT count(1) into id3_count from t_stage_info where person_plan_id=personPlaneId AND stage=3; IF sumStudyTime <= 12 THEN IF id1_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,startTime,endTime,sumStudyTime,targetStudyTime,1); ELSE UPDATE t_stage_info SET end_time=endTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1; END IF; #当学到第二阶段时 ELSEIF sumStudyTime>12 AND sumStudyTime<=14 THEN #更新第一阶段数据 IF id1_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,startTime,firstEndTime,sumStudyTime,targetStudyTime,1); ELSE UPDATE t_stage_info SET end_time=firstEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1; END IF; #更新第二阶段数据 IF id2_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,firstEndTime,endTime,sumStudyTime,targetStudyTime,2); ELSE UPDATE t_stage_info SET end_time=endTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=2; END IF; #当学到第三阶段时 ELSEIF sumStudyTime>14 THEN #如果thirdEndTime为空则取最后学习的时间 SET thirdEndTime = CASE WHEN thirdEndTime IS NULL THEN endTime ELSE thirdEndTime END; #更新第一阶段数据 IF id1_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,startTime,firstEndTime,sumStudyTime,targetStudyTime,1); ELSE UPDATE t_stage_info SET end_time=firstEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=1; END IF; #更新第二阶段数据 IF id2_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,firstEndTime,secEndTime,sumStudyTime,targetStudyTime,2); ELSE UPDATE t_stage_info SET end_time=secEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=2; END IF; #更新第三阶段数据 IF id3_count=0 THEN INSERT INTO t_stage_info(person_plan_id,start_time,end_time,sum_study_time,target_study_time,stage) VALUES(personPlaneId,secEndTime,thirdEndTime,sumStudyTime,targetStudyTime,3); ELSE UPDATE t_stage_info SET end_time=thirdEndTime,sum_study_time=sumStudyTime WHERE person_plan_id=personPlaneId AND stage=3; END IF; END IF; end if; UNTIL done END REPEAT; close cur1; END 现在执行了2小时才有了10几万数据, 我在t_person_plan_record 表里对‘person_plan_id ’建了索引, 在表t_stage_info 对person_plan_id ’建立了索引,其他我就不知道怎么优化了, 请问大神,还能怎么优化比较好呢?

MYSQL查询用到的主键id索引问题

CREATE TABLE `mytest` ( `id` int(10) NOT NULL AUTO_INCREMENT, `a` int(50) DEFAULT NULL, `b` int(50) DEFAULT NULL, `c` int(50) DEFAULT NULL, `index` int(50) DEFAULT NULL, `remark1` varchar(255) DEFAULT NULL, `remark2` varchar(255) DEFAULT NULL, `remark3` varchar(255) DEFAULT NULL, `remark4` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10059857 DEFAULT CHARSET=utf8 COMMENT='测试1000万数据'; 本人菜鸟,希望大佬们多多指教 这是本人测试建的表,插入了1000万数据,主要是为了测试一下mysql千万数据分页查询时的速度,查询8000000往后100条数据 建表因为主键id唯一自增,所以默认为主键索引 ![查看索引](https://img-ask.csdn.net/upload/201903/28/1553762081_28446.png) SELECT * from mytest limit 8000000,100 > OK > 时间: 8.106s 此查未使用到索引,耗时比较久 SELECT * from mytest where id>(SELECT id from mytest LIMIT 8000000,1) limit 100 > OK > 时间: 5.87s 此处似乎用到了索引,速度有所提升? 这是explain结果 ![图片说明](https://img-ask.csdn.net/upload/201903/28/1553763277_276647.png) 此处是外面查询用到了索引,子查询未用到索引吗?试了多次发现都是差不多这个速度,感觉还是挺慢的 然后 按理说主键id已经是自增索引,查询速度应该很快才对吧,这时候我又对主键id这个字段单独创建了一个普通索引 CREATE index id_index on mytest(id) > OK > 时间: 26.275s ![查询索引](https://img-ask.csdn.net/upload/201903/28/1553762745_778699.png) 查看索引发现和主键索引应该没啥区别,可是,,, 发现查询居然变快了不少??? SELECT * from mytest limit 8000000,100 > OK > 时间: 9.242s 这里未用到索引 SELECT * from mytest where id>(SELECT id from mytest LIMIT 8000000,1) limit 100 > OK > 时间: 1.853s 这是explain结果 ![图片说明](https://img-ask.csdn.net/upload/201903/28/1553763018_643436.png) **这里应该是用到了索引,可是为什么会出现这种情况呢,主键id也是索引,查询就比较慢,单独对id创建了一个普通索引查询速度居然变快了许多,想了半天没明白为啥,求前辈们指教** 此外查询时我也尝试连表查询 SELECT * from mytest a join (SELECT id from mytest limit 8000000,100) b on a.id=b.id; 发现和SELECT * from mytest where id>(SELECT id from mytest LIMIT 8000000,1) limit 100;这个查询耗时几乎一致 附一下表数据 ![图片说明](https://img-ask.csdn.net/upload/201903/28/1553764984_854206.png)

mysql 访问量过大,造成链接不上的情况

mysql 访问量过大,造成链接不上的情况 硬件:16核心CPU ,32G内存,100M带宽 软件,php5.6,+mysql 5.7 用途,接口调用 mysql 基本配置: ``` [client] #password = your_password port = 3306 socket = /tmp/mysql.sock [mysqld] binlog_cache_size = 192K thread_stack = 384K join_buffer_size = 4096K query_cache_type = 0 max_heap_table_size = 1024M port = 3306 socket = /tmp/mysql.sock datadir = /www/server/data skip-external-locking performance_schema_max_table_instances=400 table_definition_cache=400 key_buffer_size = 512M max_allowed_packet = 100G table_open_cache = 1024 sort_buffer_size = 2048K net_buffer_length = 8K read_buffer_size = 2048K read_rnd_buffer_size = 1024K myisam_sort_buffer_size = 64M thread_cache_size = 192 query_cache_size = 0M tmp_table_size = 1024M explicit_defaults_for_timestamp = true #skip-networking skip-name-resolve skip-grant-tables max_connections = 2800 max_connect_errors = 100 open_files_limit = 65535 sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #log-bin=mysql-bin #binlog_format=mixed server-id = 1 expire_logs_days = 10 slow_query_log=1 slow-query-log-file=/www/server/data/mysql-slow.log long_query_time=3 back_log = 900 #log_queries_not_using_indexes=on #loose-innodb-trx=0 #loose-innodb-locks=0 #loose-innodb-lock-waits=0 #loose-innodb-cmp=0 #loose-innodb-cmp-per-index=0 #loose-innodb-cmp-per-index-reset=0 #loose-innodb-cmp-reset=0 #loose-innodb-cmpmem=0 #loose-innodb-cmpmem-reset=0 #loose-innodb-buffer-page=0 #loose-innodb-buffer-page-lru=0 #loose-innodb-buffer-pool-stats=0 #loose-innodb-metrics=0 #loose-innodb-ft-default-stopword=0 #loose-innodb-ft-inserted=0 #loose-innodb-ft-deleted=0 #loose-innodb-ft-being-deleted=0 #loose-innodb-ft-config=0 #loose-innodb-ft-index-cache=0 #loose-innodb-ft-index-table=0 #loose-innodb-sys-tables=0 #loose-innodb-sys-tablestats=0 #loose-innodb-sys-indexes=0 #loose-innodb-sys-columns=0 #loose-innodb-sys-fields=0 #loose-innodb-sys-foreign=0 #loose-innodb-sys-foreign-cols=0 default_storage_engine = InnoDB innodb_data_home_dir = /www/server/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /www/server/data innodb_buffer_pool_size = 1024M innodb_log_file_size = 512M innodb_log_buffer_size = 128M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 100 innodb_max_dirty_pages_pct = 90 innodb_read_io_threads = 16 innodb_write_io_threads = 16 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 256M sort_buffer_size = 4M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout ``` 一旦并发量有点大,可能会有一个查询阻塞,就会造成链接不上数据库或者php报错: connect() to unix:/tmp/php-cgi-56.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: ,问题应该在于数据库这边,数据库是独立的服务器,web有web的服务器,访问走的内网,不占用带宽。

从数据库向solr导入数据,本来两分钟就可以,突然变的很慢,几个小时都导不完?

![图片说明](https://img-ask.csdn.net/upload/202002/12/1581508807_59533.png)我把以前的索引删除了。重新导入就出现很慢的问题

远程连接mysql数据库SQL执行缓慢

我在本地使用远程服务器上的MySQL数据库时,就算是执行简单的语句都会比较缓慢,而关联的表多了的话基本执行不出结果,但是在远程服务器上本地执行却是飞快,有没有哪位同行解决过这种问题。

多线程大数量map的插入效率问题

在做项目的时候碰到一个棘手的问题,希望高手能帮忙解决一下: 在处理大数据量的时候大概每秒1000个数据量,我开了两个线程:一个线程用于处理接收数据,另一个用于处理数据:接收数据有一个map<int,int>类型,包在一个vector里大致结构如下 vector<StaticInfo> recv; Struct StaticInfo { map<int,int>key_value; } 处理数据单元:需要将所有接收数据Key,value计算总和,并保存在一个容器里map<int,int>测试结果发现cpu占用高达100%以上!请问高手有没有好的办法...多谢了

在Laravel 5.7中插入/更新一百万行的最快方法

<div class="post-text" itemprop="text"> <p>I'm using Laravel 5.7 to fetch large amounts of data (around 500k rows) from an API server and insert it into a table (call it Table A) quite frequently (at least every six hours, 24/7) - however, it's enough to insert only the changes the next time we insert (but at least 60-70% of the items will change). So this table will quickly have tens of millions of rows.</p> <p>I came up with the idea to make a helper table (call it Table B) to store all the new data into it. Before inserting everything into Table A, I want to compare it to the previous data (with Laravel, PHP) from Table B - so I will only insert the records that need to be updated. Again it will usually be around 60-70% of the records.</p> <p><strong>My first question</strong> is if this above-mentioned way is the preferred way of doing it, in this situation (obviously I want to make it happen as fast as possible.) I assume that searching for an updating the records in the table would take a lot more time and it would keep the table busy / lock it. Is there a better way to achieve the same (meaning to update the records in the DB).</p> <hr> <p>The second issue I'm facing is the slow insert times. Right now I'm using a local environment (16GB RAM, I7-6920HQ CPU) and MySQL is inserting the rows very slowly (about 30-40 records at a time). The size of one row is around 50 bytes. </p> <p>I know it can be made a lot faster by fiddling around with InnoDB's settings. However, I'd also like to think that I can do something on Laravel's side to improve performance.</p> <p>Right now my Laravel code looks like this (only inserting 1 record at a time):</p> <pre><code>foreach ($response as $key =&gt; $value) { DB::table('table_a') -&gt;insert( [ 'test1' =&gt; $value['test1'], 'test2' =&gt; $value['test2'], 'test3' =&gt; $value['test3'], 'test4' =&gt; $value['test4'], 'test5' =&gt; $value['test5'], ]); } </code></pre> <p><code>$response</code> is a type of array.</p> <p><strong>So my second question:</strong> is there any way to increase the inserting time of the records to something like 50k/second - both on the Laravel application layer (by doing batch inserts) and MySQL InnoDB level (changing the config).</p> <p>Current InnoDB settings:</p> <pre><code>innodb_buffer_pool_size = 256M innodb_log_file_size = 256M innodb_thread_concurrency = 16 innodb_flush_log_at_trx_commit = 2 innodb_flush_method = normal innodb_use_native_aio = true </code></pre> <p>MySQL version is 5.7.21.</p> <p>If I forgot to tell/add anything, please let me know in a comment and I will do it quickly.</p> <p><strong>Edit 1:</strong> The server that I'm planning to use will have SSD on it - if that makes any difference. I assume MySQL inserts will still count as I/O.</p> </div>

web项目在执行大量的插入语句时执行一段时间后卡死

SSH框架,在页面有一个poi 批量导入excel的功能,每读取excel一行,保存为一个实体然后循环insert到DB里。刚开始程序运行正常,但是一段时间过后,系统出现卡死,不再执行insert sql ,刷新页面也没有响应,只能重启服务器。期间程序没有报错,myeclipse也不是内存溢出导致的卡死,因为点击其他功能模块时不会出现上述所说的问题,只有在执行大量的insert sql 时才会。 因为代码没有报错我也就不贴代码了。 我自己想的不知道是不是hibernate在做insert时由于数据量大导致链接关闭,但是我设置数据库连接池断开时间是1800s,事实上也没有超过。由于不知道hibernate底层的源码是怎样执行insert的,希望有大神说说,为什么在执行少量的insert时系统不会卡死,但处理大量数据并长时间insert的就是卡死。 虚心求各位指导!谢谢大家。如果有需要我会贴出代码。感谢。 更改过后的代码,但是又有新的问题 ``` @Override public void save(List<T> list) { long begin = System.currentTimeMillis(); Session session = getSession(); try { for (int i = 0; i < list.size(); i++) { session.save(list.get(i)); if (i%50 == 0 && i != 0) { session.flush(); session.clear(); } } } catch (Exception e) { e.printStackTrace(); } finally{ session.clear(); } long end = System.currentTimeMillis(); System.out.println((end-begin)/1000.0); } ``` 这是basedao,是spring管理hibernate,加了2个属性 ``` <prop key="hibernate.jdbc.fetch_size">100</prop> <prop key="hibernate.jdbc.batch_size">50</prop> ``` 方法是根据不同的实体批量insert,虽然现在执行大量insert时不会中断,但是我有4个实体要连续执行批量insert,在insert完前2个实体后,我在第三个实体调用批量导入的方法设了断点,程序并没有停在断点上,又出现了卡死的情况。PS:不知道是不是在insert第二个实体那里就卡死了,还是说执行完第二个批量insert就卡死了,反正我在第三个批量insert方法前断点没进,并且系统卡死,只能重启。 请大家不吝赐教!感谢!

Mybatis执行insert all 的时候 越来越慢是什么原因

情况描述: 数据库是Oracle 每次从表里取出10000条数据 进行计算 结果大概500~1000条 然后把这几百条数据批量插入数据库中 插入的表没有索引 就是很简单的几个字段 第一次执行 大概3S左右就插入成功了 第二次执行一下要50S左右 再往下越来越长。。不知道什么原因 有大佬遇到过吗 还有就是 当这个insert all变慢之后 对数据库进行 ddl操作都会卡死。。。而dml没有影响~ java这边数据库连接池用的druid ![这是第一次](https://img-ask.csdn.net/upload/201808/22/1534902304_166443.png) ![这是第二次](https://img-ask.csdn.net/upload/201808/22/1534902180_574360.png) sql如下 ``` <insert id="batchInsertArriveInfo" parameterType="java.util.List" useGeneratedKeys="false"> insert all <foreach collection="list" item="info" index="index"> into T_ARRIVAL_STATION_INFORMATION (BUS_PATH_ID,STATION_SN,TASK_STATUS,ARR_TIME,BUS_PATH_NAME,RUN_FLAG,VEHICLE_ID,station_name,station_id) values ( #{info.busPathId},#{info.stationSn},#{info.taskStatus}, #{info.arrTime},#{info.busPathName},#{info.runFlag}, #{info.vehicleId},#{info.stationName},#{info.stationId} ) </foreach> select 1 from dual </insert> ```

实时大数据写入数据库

项目:IOCP的多线程(工作线程)解析大量客户端发送过来的数据;这个数据量是非常大的,上千个客户端,每50MS发送一个数据包过来,要把他们写入数据库。以下是我做的两种设计,均不能成功。 1.简单地通过程序一条一条地执行SQL语句写入数据库,失败,效率极低,淘汰。 2.我目前的处理是把这个SQL语句做一个拼接(...+SQL语句+;+SQL 语句+;+...),然后一并执行,写入数据库,但是这么设计的话,内存会一直涨,因为写入数据库的速率小于IOCP解析出来的数据所形成的SQL语句,它是占内存。 需解决的问题如下: 在不做分布式数据库设计的情况,有什么高性能的写数据库的方法, 我是用的数据库是SQL server 2008 ,用VC++ 实现,因为C#的话,微软封装了相应的类。求高手指教

上亿条记录的表的查询问题

一个6亿条记录的表a,一个3亿条记录的表b,通过外键tid关联,如何最快的查询出满足条件的第50000到50200条数据?

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

C++(数据结构与算法)78:---分而治之

一、分而治之的思想 分而治之方法与软件设计的模块化方法非常相似 分而治之通常不用于解决问题的小实例,而要解决一个问题的大实例。一般步骤为: ①把一个大实例分为两个或多个更小的实例 ②分别解决每个小实例 ③把这些小实例的解组合成原始大实例的解 二、实际应用之找出假币 问题描述 一个袋子有16个硬币,其中只有一个是假币,这个假币比其他的真币重量轻(其他所有真币的重量都是相同的)...

springboot+jwt实现token登陆权限认证

一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制,符合开发需求;更多精彩原创内容关注公主号知识追寻者,读者的肯定,就是对作者的创作的最大支持; 二 jwt实现登陆认证流程 用户使用账号和面发出post请求 服务器接受到请求后使用私...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

早上躺尸,晚上干活:硅谷科技公司这么流行迟到?

硅谷科技公司上班时间OPEN早已不是什么新鲜事,早九晚五是常态,但有很多企业由于不打卡,员工们10点、11点才“姗姗来迟”的情况也屡见不鲜。 这种灵活的考勤制度为人羡慕,甚至近年来,国内某些互联网企业也纷纷效仿。不过,硅谷普遍弹性的上班制度是怎么由来的呢?这种“流行性迟到”真的有那么轻松、悠哉吗? 《动态规划专题班》 课程试听内容: 动态规划的解题要领 动态规划三大类 求最值/计数/可行性 常...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

立即提问
相关内容推荐