mysql innodb 事务操作的表锁及行锁-Deadlock found when trying to get lock; try restarting transaction的优化

原创 2016年10月29日 17:26:58

1.锁的类型

锁有共享锁(S)和排它锁(X)

以及隐性锁和显性锁。

如select * from xx for update

这样现性的增加了一个表锁在表之上。

而update和delete则会隐性的在表上或者行上增加一个锁。

2.行锁和表锁

(1)行锁

对记录的的锁定,如update和delete操作会加锁,这时关于这条记录的查询操作是不能进行的,需要等待;

(2)表锁

对表一级的锁定,所有对这个表的查询都将被挂起,直到事务完成。

3.删除操作增加锁的区别

如果要是批量删除某些记录,如果在高并发情况下,如果使用非主键和索引的字段进行删除,如用exist关键字的查询,则会将整个表进行了锁定。

这种情况下,好多的查询都处于等待的状态这样,性能自然不会高。

而如果使用主键索引的字段进行删除、如用游标进行删除,那么就是增加的行锁,锁定只是对行一级的锁定,并不影响对其他行的查询。


在更改了删除方式之后,Deadlock found when trying to get lock; try restarting transaction,这个错误有效的减少了。

这个错误是说,mysql发现了一个死锁,那么就重启这个事务,这样就解决了数据死锁的问题。

而且因为这个机制的存在,数据库用innodb引擎\4CORE\4G的条件下跑出40并发no thinking 的成绩,性能还是不错的。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nirvana52/article/details/52965484

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

参考文章:  http://blog.csdn.net/aesop_wubo/article/details/8286215  http://www.aichengxu.com/view/2405...
  • friendan
  • friendan
  • 2016-06-22 11:02:23
  • 2278

Deadlock found when trying to get lock; try restarting transaction

今天出现 org.springframework.dao.DeadlockLoserDataAccessException: Error updating database. Cause: ...
  • u012903926
  • u012903926
  • 2017-03-27 17:15:52
  • 895

Deadlock found when trying to get lock; try restarting transaction

1、错误描述 [ERROR:]2015-06-09 16:56:19,481 [抄送失败] org.hibernate.exception.LockAcquisitionException: err...
  • you23hai45
  • you23hai45
  • 2015-06-10 15:50:32
  • 3106

deadlock found when trying to get lock ;try restarting transaction

http://blog.sina.com.cn/s/blog_4acbd39c01014gsq.html innodb的行锁和解锁都是针对主键索引的。 如果查询时根据索引锁表,但更...
  • Yqq__00
  • Yqq__00
  • 2016-11-11 17:48:10
  • 437

mysql innodb 行锁解锁后出现1213 死表现象 Deadlock found when

[Err] 1213 - Deadlock found when trying to get lock; try restarting transaction 出现这个原因要记住一点就是:i...
  • mandytong
  • mandytong
  • 2015-08-12 13:52:28
  • 335

mysql数据库死锁:Deadlock found when trying to get lock; try restarting transaction

查看mysql死锁日志show engine innodb status找到信息中LATEST DETECTED DEADLOCK这一行,可以看到mysql的死锁信息详情---------------...
  • hy245120020
  • hy245120020
  • 2017-08-21 11:25:42
  • 327

mysql中innodb引擎的锁问题

一,概述     相对其他数据库而言,mysql的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如:myisam和memory存储引擎采用的是表级锁,bdb采用的是页面锁,但也支持...
  • fuzhongyu2
  • fuzhongyu2
  • 2016-10-12 10:09:02
  • 1153

mysql 的一个死锁问题解决

这里说的是innodb类型的死锁! 网上找了好多东西 各种命令查看死锁信息,后面这条能用: show engine innodb status;(根据mysql版本而异) 这命令在mysql...
  • djy18178
  • djy18178
  • 2014-11-25 11:49:04
  • 4655

mysql 共享锁 排他锁 防插入锁

  试验1事务1:  #!/usr/bin/pythonimport timeimport MySQLdb;conn = MySQLdb.connect(host="localhost",port=3...
  • rj03hou
  • rj03hou
  • 2010-01-27 13:45:00
  • 7620

Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction

工作中同事遇到此异常,查找解决问题时,收集整理形成此篇文章。问题场景问题出现环境: 1、在同一事务内先后对同一条数据进行插入和更新操作; 2、多台服务器操作同一数据库; 3、瞬时出现高并发现象;...
  • wo541075754
  • wo541075754
  • 2016-02-22 16:50:57
  • 31695
收藏助手
不良信息举报
您举报文章:mysql innodb 事务操作的表锁及行锁-Deadlock found when trying to get lock; try restarting transaction的优化
举报原因:
原因补充:

(最多只允许输入30个字)