insert into 并发死锁 问题

问题描述

insert into 并发死锁 问题

同时向同一个数据库的同一张表插入数据,用insert into 或者 load data infile 都会出现 锁索引的情况,造成死锁,哪些大神能够帮忙解决下。大大有赏。在线等,急!

下面是死锁的具体信息:

LATEST DETECTED DEADLOCK


160503 14:58:26
*** (1) TRANSACTION:
TRANSACTION FC644, ACTIVE 1 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 81 lock struct(s), heap size 14776, 165 row lock(s), undo log entries 104
MySQL thread id 8686, OS thread handle 0xd1c, query id 2055688 116.226.215.243 wangmeng update
INSERT INTO mayi-bg.pes_trade_2016_5(shop_id, date, seller_nick, payment, post_fee, consign_time, num, status, total_fee, created, pay_time, modified, end_time, buyer_nick, trade_id,seller_flag) VALUES(58583652,'2016-05-01','chengxuepin',69.00,0.00,'0000-00-00 00:00:00',1,'TRADE_CLOSED_BY_TAOBAO',89.00,'2016-05-01 16:07:22','0000-00-00 00:00:00','2016-05-02 06:38:44','2016-05-02 06:38:45','丑女芸儿',1856014565898906,0)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 2653 page no 2512 n bits 584 index index_trade_id of table mayi-bg.pes_trade_2016_5 trx id FC644 lock mode S waiting
Record lock, heap no 472 PHYSICAL RECORD: n_fields 2; compact format; info bits 32
0: len 8; hex 8006994b75944172; asc Ku Ar;;
1: len 8; hex 0000000000019a85; asc ;;

*** (2) TRANSACTION:
TRANSACTION FC63F, ACTIVE 2 sec inserting
mysql tables in use 1, locked 1
182 lock struct(s), heap size 31160, 1932 row lock(s), undo log entries 2121
MySQL thread id 8687, OS thread handle 0x470, query id 2055706 116.226.215.243 wangmeng update
INSERT INTO mayi-bg.pes_trade_2016_5(shop_id, date, seller_nick, payment, post_fee, consign_time, num, status, total_fee, created, pay_time, modified, end_time, buyer_nick, trade_id,seller_flag) VALUES(68285317,'2016-05-02','联新办公专营店',17.00,0.00,'0000-00-00 00:00:00',1,'TRADE_CLOSED_BY_TAOBAO',17.00,'2016-05-02 00:54:24','0000-00-00 00:00:00','2016-05-02 00:55:39','2016-05-02 00:55:05','润0827',1857253469651417,0)
?

解决方案

sql server死锁的问题
insert into时注意的问题
ORA-01461: can bind a LONG value only for insert into a LONG column 问题解决方案

解决方案二:

并发读写是不允许的,在程序中要使用加锁的方式来避免资源竞争。
另外,你也可以使用mongodb等no-sql数据库,已经做了这些处理

解决方案三:

如果你是insert一批数据进入一个table,当然会有比较长时间的锁。要解决锁的问题,要控制好事务的大小,如果是并行写入的话,数据不要产生冲突,特别是索引关键字段,否则会有锁产生。

时间: 2024-09-16 07:53:40

insert into 并发死锁 问题的相关文章

MYSQL RC模式insert update 可能死锁的情况

涉及的语句为 RC模式下 update根据主键更新和insert 其实这样的问题在RC模式下,要么是简单update问题,要么是insert造成的主键和唯一键检查唯一性时出现问题. 下面以主键问题为列子进行分析一下可能出现的情况. update  where条件更新为主键,锁结构出现在单行主键上,辅助索引包含隐含锁结构,当前读RC非唯一索引模式没有GAP锁, insert  插入印象锁,主键和辅助索引上会出现隐含锁结构, 但是在RC模式下没有GAP所以插入印象锁一般不会成为问题 表结构: +--

sql insert into .. select..死锁解决办法

方法一 insert into a select * from b with(xlock) where form_no=@form_no 方法二,存储过程 sp_who --sql2000及以上 dbcc inputbuffer(spid)--用于查看具体的语句 kill spid --杀掉进程. --还是 select * from sys.sysprocesses --sql2005及以上 a. 按平均 cpu 时间排在前五个的查询 此方案提供有关 cpu 时间.io 读写以及按平均 cpu

Innodb:RR隔离级别下insert...select 对select表加锁模型和死锁案列

最近有网友遇到了在RR隔离级别下insert A select B where B.COL=** 由于select表也就是B表引发的死锁的问题.分析死锁日志后,笔者进行模拟重现了这位网友遇到了2种场景并且在本文中进行详细的描述. 本文使用版本percona 5.7.14修改版,能够打印出事务所有的行锁信息结构链(不包含隐含锁) 本文中的测试是在RR隔离级别下完成的,RC不存在这样的问题 笔者对源码的理解有限,如有错误请指正 本文使用了自制工具innblock和bcview,前者用于扫描块结构后者

SQLServer 2008 R2 死锁监控及解决办法

1. 死锁原理     根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态.     死锁的四个必要条件: 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用. 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源. 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺. 循环等待条件(Circular wai

【MySQL】死锁案例之四

一 前言   死锁,其实是一个很有意思,也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见过 .关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋友有所帮助.本文介绍一例三个并发insert 导致的死锁,根本原因还是在于insert 唯一键申请插入意向锁这个特殊的GAP锁.其实称呼插入意向锁 为 Insert Intention Gap Lock 更为合理.二 案例分析2.1 环境准备  Percona server 5.6 RR模式 CREATE TABLE `

sql server中如何避免死锁

  一.死锁的四个必要条件 1.互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用. 2.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源. 3.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺. 4.循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源. 二. 避免死锁 1.按同一顺序访问对象 如果所有并发事务按同一顺序访问对象,

MySQL数据库之锁的详解

锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素.从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂.本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议. MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著

mysql锁定单个表的方法_Mysql

mysql锁定单个表的方法 复制代码 代码如下: mysql>lock table userstat read; mysql>unlock tables; 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM. 行级的典型代表引擎为INNODB. -我们实际应用中用的最多的就是行锁. 行级锁的优点如下: 1).当很多连接分别进行不同的查询时减小LOCK状态. 2).如果出现异常,可以减少数据的丢失.因为一次可以只回滚一行或者几行少量的数据. 行级锁

mysql锁表和解锁语句分享_Mysql

页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM. 行级的典型代表引擎为INNODB. -我们实际应用中用的最多的就是行锁. 行级锁的优点如下: 1).当很多连接分别进行不同的查询时减小LOCK状态. 2).如果出现异常,可以减少数据的丢失.因为一次可以只回滚一行或者几行少量的数据. 行级锁的缺点如下: 1).比页级锁和表级锁要占用更多的内存. 2).进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作. 3).