首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免表锁的关键点是什么?

避免表锁的关键点是什么?
EN

Database Administration用户
提问于 2011-04-27 10:51:56
回答 2查看 435关注 0票数 3

MySQL在我的公司使用,大多数数据库管理部门都致力于解决表锁问题。避免表锁的关键点是什么(我的意思是在数据库端,甚至在软件-Java-)

EN

回答 2

Database Administration用户

发布于 2011-04-27 15:09:03

首先,快速回顾一下什么是死锁。假设您有两个会话,1和2,以及两个资源,A和B。然后出现以下顺序:

  1. 会话1获得资源A的锁
  2. 会话2获得对资源B的锁定
  3. 会话1请求资源B上的锁,但必须等到会话2释放它。到目前为止我们都很好
  4. 会话2请求资源A上的锁-但是会话1被阻塞,永远不能向前释放它。会发生死锁。

对此,您的DBA所能做的数量非常有限,因为这种情况起源于应用程序,它只是在数据库中显示自己。最好采用始终以相同顺序锁定资源的约定。如果我们的惯例是始终锁定顺序A,B,那么我们的场景将是:

  1. 会话1获得资源A的锁
  2. 会话2请求A上的锁,但必须等待会话1
  3. 会话1获得资源B的锁,完成它的工作,并同时释放两者
  4. 会话2获得A和B的锁,完成它的工作,并同时释放两者。没有死锁。
票数 3
EN

Database Administration用户

发布于 2011-04-28 08:34:48

还可以通过更改MYSQL引擎来更改锁粒度。InnoDB为您提供行级锁定,与MyISAM的表级锁定相比,该锁更好。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/2388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档