mysql innodb 多线程插入_mysql innodb 并发插入问题,包大量死锁错误

开了10个并发写线程,没1000条记录批量提交一次,结果mysql包大量死锁错误!

"Deadlock found when trying to get lock; try restarting transaction"

引擎用的是Innodb 主键字段是auto_increament.

mysql 有这么脆弱吗?create table ASIA_ODDS(

id int NOT NULL AUTO_INCREMENT,

match_id INT DEFAULT 0,

match_bet007_id INT NOT NULL,

company_id SMALLINT NOT NULL ,

first_pk DECIMAL(9,4) DEFAULT 0,

first_host_odds DECIMAL(9,4) DEFAULT 0,

first_guest_odds DECIMAL(9,4) DEFAULT 0,

pk DECIMAL(9,4) ,

host_odds DECIMAL(9,4) DEFAULT 0,

guest_odds DECIMAL(9,4) DEFAULT 0,

is_end TINYINT DEFAULT 0,

is_zd TINYINT DEFAULT 0 ,

changeState char(3) DEFAULT '000',

last_update_time timestamp ,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我的测试java代码如下:public class TestInsertAsiaOdds {

public static void main(String args[]) {

final long s = System.currentTimeMillis();

CyclicBarrier latch = new CyclicBarrier(10, new Runnable() {

public void run() {

System.out.print("耗时:" + (System.currentTimeMillis() - s));

}

});

//10个线程并发插入500w条数据

List lt = new ArrayList();

for (int i = 0; i < 10; i++) {

Thread t = new Thread(new Task(5000000, latch));

lt.add(t);

}

//启动线程

for (Thread t : lt) {

t.start();

}

}

private static class Task implements Runnable {

private int count;

private CyclicBarrier latch;

private String insSql = "insert into asia_odds2(match_id, match_bet007_id, company_id, first_pk, first_host_odds, first_guest_odds, pk, host_odds, guest_odds, is_end, is_zd, changeState) values(?,?,?,?,?,?,?,?,?,?,?,?)";

public Task(int count, CyclicBarrier latch) {

this.count = count; this.latch = latch;

}

public void run() {

Connection conn = null;

PreparedStatement ps = null;

try {

conn = getConn(); //设为自动提交

conn.setAutoCommit(true);

ps = conn.prepareStatement(insSql);

for (int i = 0; i < count; i++) {

ps.setInt(1, 1);

ps.setInt(2, 2);

ps.setInt(3, 3);

ps.setDouble(4, 1.1);

ps.setDouble(5, 1.1);

ps.setDouble(6, 1.1);

ps.setDouble(7, 1.1);

ps.setDouble(8, 1.1);

ps.setDouble(9, 1.1);

ps.setInt(10, 0);

ps.setInt(11, 0);

ps.setString(12, "000");

ps.addBatch();

//1000一批提交一次

if (i % 1000 == 0) {

ps.executeBatch();

ps.clearBatch();

}

}

ps.executeBatch();

} catch (Exception ex) {

ex.printStackTrace();

} finally {

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

try {

latch.await();

} catch (BrokenBarrierException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

运行一段时间后就会报:java.sql.BatchUpdateException: Deadlock found when trying to get lock; try restarting >transaction at >com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1669) at >com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1085)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是SEO策略呢

从2005年后&#xff0c;我基本都只是给大型网站做SEO&#xff0c;因为给大型网站做SEO&#xff0c;效果非常的明显&#xff0c;价格自然也可以收的非常高。总结这两年来我做过的几十家大型网站的SEO经验&#xff0c;我发现&#xff0c;SEO策略是最为重要的。什么是SEO策略呢&am…

infor wms 项目启动_广汽本田增城工厂No.2L WMS项目正式启动

Warehouse导读&#xff1a;近日&#xff0c;在生管科No.2L办公室&#xff0c;广汽本田增城工厂No.2L WMS项目启动大会如期召开。生产管理科&#xff0c;IT科&#xff0c;FNL以及汉得信息有限公司的WMS项目组成员参加了本次启动大会。Management2018年10月&#xff0c;生管科已经…

mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis

背景&#xff1a;现有业务扩展字段&#xff0c;都存在feature字段&#xff0c;存在语义不清晰以及&#xff0c;难以利用索引查询问题Mysql 5.7后推出利器&#xff0c;JSON虚拟列&#xff0c;即实现了业务语义统一&#xff0c;也支持索引查询加速一、简单描述MySQL 5.7.7 labs版…

asp.net core安全事项(中)

上传文件上传文件是造成风险的很大因素&#xff0c;所以对上传文件进行处理是重要的&#xff0c;首先要处理的是&#xff1a;a、上传文件大小限制&#xff1b;b、上传文件类型(能过扩展或&#xff0c;或文件头)限制&#xff1b;c、上传的名称要替换掉&#xff1b;d、上传的文件…

TCL:花开刹那还是浴火重生

TCL&#xff1a;花开刹那还是浴火重生 [url]http://www.sina.com.cn[/url] 2008年04月07日 15:24 民营经济报本报记者 叶键 TCL3月份公布了2007年财报&#xff0c;公司净利润达3.9亿元&#xff0c;并于3月27日“摘星脱帽”&#xff0c;恢复为“TCL集团”的自由身&#xff0c;…

http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析

上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF&#xff0c;很多客户找到我们想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提醒大家渗透测试网站必须要拿到授权才能测试哦&#xff01;3.…

如何手动连上mysql_如何手动安装MySql

想安装当然要先有一个MySql的安装包 这里使用的是mysql-5.7.12-winx64安装包百度云&#xff1a;http://pan.baidu.com/s/1kVAuXuv       密码&#xff1a;hr391.要将压缩包解压到你的指定位置(最好将要用的工具文件分类放好)例如&#xff1a;D:javaAppmysql-5.7.12-winx6…

WebRTC成为W3C和IETF正式标准

喜欢就关注我们吧&#xff01;2021年1月26日&#xff0c;W3C&#xff08;万维网联盟&#xff09;和 IETF &#xff08;互联网工程任务组&#xff09;同时宣布 WebRTC&#xff08;Web Real-Time Communications&#xff0c;Web 实时通信&#xff09;现发布为正式标准&#xff0c…

weblogic搭建

weblogic的安装过程&#xff1a;首先下载server910_linux32.bin文件&#xff0c;你可以有多种打开方式&#xff0c;可以通过命令行&#xff0c;但我更偏重于双击打开&#xff0c;然后一路next,当然过程中的一些许可要求你的接受,好了 weblogic的第一步安装完成。接着创建weblog…

ironpython3发布时间_.NET 基金会项目介绍-DLR/IronPython2/IronPython3

DLR/IronPython2/IronPython3 是属于 .Net 基金会的一个项目&#xff0c;本文将简要介绍该项目相关的信息。 中文介绍中文介绍内容翻译自英文介绍&#xff0c;主要采用意译、如与原文存在出入&#xff0c;请以原文为准。 DLR/IronPython2/IronPython3 DLR 是基于 .NET Framewor…

mysql非安装_mysql 非安装版的配置

一直以来都是使用wamp中集成的mysql数据库&#xff0c;今天突然想试试下载一个mysql的zip包进行配置。一、下载mysql非安装版下载地址可以到&#xff1a;http://dev.mysql.com/downloads/mysql/ &#xff0c;或者直接点击下载mysql-32bit&#xff1a;http://cdn.mysql.com/Down…

Xamarin.Forms: 无限滚动的ListView(懒加载方式)

说明 在本博客中&#xff0c;学习如何在Xamarin.Forms应用程序中设计一个可扩展的无限滚动的ListView。这个无限滚动函数在默认的Xamarin.Forms不存在&#xff0c;因此我们需要为此添加插件。在这里我们需要知道无限滚动时如何工作的。首先&#xff0c;显示固定的数据。一旦用户…

Lucifer的一场暴强围英雄表演

http://w3g.replays.net/doc/cn/2008-4-9/12077828953425064279.html围所欲围

javaweb应用开发与实践pdf_基于阿里云打造「云原生」Web应用——「懒猪行」Web应用开发实践...

作者&#xff1a;阿里云MVP 刘远程背景『懒猪行』专注于境外自由行S2B业务&#xff0c;涉及分销、终端用户服务、供应链等多个服务环节&#xff0c;随着业务规模的不端增加&#xff0c;我们一直在探索Web应用开发的最佳实践&#xff0c;以加快Web应用的迭代效率&#xff0c;为B…

python大型项目中的日志模块_Python中日志模块的使用

前言程序和脚本往往是无人值守运行的&#xff0c;一旦发生问题&#xff0c;就需要我们去追溯当时的情况来定位问题的原因。这便需要我们在程序和脚本中引入日志的功能。相比于print信息&#xff0c;使用logging日志有以下优点可以记录输出日志的时间、文件、函数以及代码行&…

OSI强调:SSPL并不是开源许可证

喜欢就关注我们吧&#xff01;日前&#xff0c;开放源代码促进会 OSI&#xff08;Open Source Initiative&#xff09;强调&#xff0c;SSPL 并不是一个开源许可证。OSI 表示&#xff0c;SSPL&#xff08;Server Side Public License&#xff09; 是一种典型的 “fauxpen”&…

.NET Remoting

轉自:http://www.iiiedu.org.tw/knowledge/knowledge20030430_2.htm.NET Remoting 資策會數位教育研究所講師 董淑惠     概念簡介 微軟以往使用COM/DCOM的技術來處理分散式系統架構&#xff0c;透過Client端的Proxy代理程式來呼叫遠端Server機器上的物件。.NET Framework則…

jdbc连接mysql8的一些坑_mysql8.0 jdbc连接注意事项

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼url增加参数useSSL 和时区 : jdbc:mysql://localhost:3306/mydb?useSSLfalse&serverTimezoneUTCdriver变化: com.mysql.jdbc.Driver > com.mysql.cj.jdbc.Driver常见错误提示1&#xff1a;如果driver没有添加cj&#xff0c…

通过python实现linux切换用户_Python操作远程服务器切换到root用户

在自动化运维过程中&#xff0c;需要远程服务器切换到root用户下执行命令&#xff0c;尝试了一些方法&#xff0c;得到如下好用的方法&#xff0c;供大家使用&#xff1a; import time import paramiko def verification_ssh(host,username,password,port,root_pwd,cmd): spara…

RabbitMQ 入门:1. Message Broker(消息代理)

Message Broker&#xff08;消息代理&#xff09;维基百科对 Message Broker 的定义是&#xff1a;Message broker是一种中介程序模块&#xff0c;它把消息从发送方的正式消息传递协议转化为接收方的正式消息传递协议。这个定义略繁琐&#xff0c;下面看看 RabbitMQ 官网对 Mes…