14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁
14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁 这个章节建立关于死锁的概念信息,它解释如何组织数据库操作来减少死锁和随后的错误处理: Deadlocks 是一个金典问题在事务数据库, 但是它们并不危险除非它们是如此拼单 以至于你根本不能运行某些事务 你必须写你的应用 以便它们总是准备重新执行一个事务 如果被回滚 InnoDB 使用自动row-level locking, 你可以得到死锁甚至在事务里, 插入或者删除单行记录。 那是因为那些操作不是真正的"原子的", 它们自动设置锁在(可能的多个)插入或者删除的index records。 你能处理 deadlocks 和降低其发生的可能性 使用下面的技术: 1.在任何时间, 执行SHOW ENGINE INNODB STATUS 命令来确定最近的死锁信息。 这个有助于你调整你的应用避免死锁: 2.如果频繁的死锁警告,搜集更多的扩展调试信息通过启用 innodb_print_all_deadlocks 配置选项 信息关于每个死锁信息, 不只是最后一个, 是记录在MySQL error log. 关闭这个选项当你完成调试时: 总是准备重新执行一个事务如果由于死锁失败,死锁并不危险,只是猜尝试一次 3. 保持事务尽可能的小和短,使它们不容易冲突 4. 立即提交事务 在做了一组相关的改变让它们不易冲突。 特别的, 不要让一个交互的mysql session 打开很长一段时间,没有提交事务 5. 如果你使用locking reads(SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE), 尝试使用一个较低的隔离级别 比如READ COMMITTED 6. 当在一个事务里修改多个表, 或者相同表的不同结果集, 做这些操作每次按一致的顺序。 然后事务形成良好的定义的队列,也不会死锁。 比如, 组织表操作到函数里,或者调用存储过程,相比编码很多类似的插入,更新和删除语句的类似序列在不同 的地方。
7. 在你的表上增加精心选项的索引,然后你的查询需要扫描更少的index records从而设置更少的锁, 使用EXPLAIN SELECT to 确定哪个索引MySQL 服务器视为最合适你查询的索引 8.使用更少的锁,你可以容许一个SELECT 从老的快照返回谁, 不需要增加子句 FOR UPDATE or LOCK IN SHARE MODE。 使用READ COMMITTED隔离级别在这里是更好的,因为每个一致性读在相同的事务读取它自己最新鲜的快照。 9.如果没有其他帮助,序列化你的事务 使用表级锁。 正确的方式是使用LOCK TABLES 在你的事务表上,比如InnoDB 表, 开始事务设置 autocommit = 0 不是START TRANSACTION (关闭自动提交) 不要调用unlock tables 直到你显示的提交事务。 比如,如果你需要写一个表t1,从表t2读取,你可以这么做: SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES; Table-level locks 阻止并发更新表, 避免死锁代价是更少的响应对于一个繁忙的系统
14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁的更多相关文章
- 14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁
14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁 这个部分建立在概念信息关于deadlocks 在章节 14.5.5.2, "D ...
- [LeetCode] 924. Minimize Malware Spread 最大程度上减少恶意软件的传播
In a network of nodes, each node i is directly connected to another node j if and only if graph[i][j ...
- 14.5.5 Deadlocks in InnoDB
14.5.5 Deadlocks in InnoDB 14.5.5.1 An InnoDB Deadlock Example 14.5.5.2 Deadlock Detection and Rollb ...
- 14.3.5.1 An InnoDB Deadlock Example
14.3.5 Deadlocks in InnoDB 14.3.5.1 An InnoDB Deadlock Example 14.3.5.2 Deadlock Detection and Rollb ...
- MySQL error : Deadlock found when trying to get lock; try restarting transaction
在使用 MySQL 时,我们有时会遇到这样的报错:“Deadlock found when trying to get lock; try restarting transaction”. 在 14. ...
- (转)雅虎WEB前端网站优化 -- 34条军规
雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 ...
- 雅虎WEB前端网站优化 -- 34条军规
雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 ...
- Effective Objective-C [上]
网上看到的 http://esoftmobile.com/2013/08/10/effective-objective-c/ 本文是针对<Effective Objective-C>一书的 ...
- Yahoo34条军规——雅虎WEB前端网站优化
雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 ...
随机推荐
- 重探 DFT
感觉上次学习DFT简直是乱来了.不知道误导了多少人,这里深感抱歉. 这次我再看了看<算法导论>,觉得收获很大,终于粗略的知道DFT的原理了! 如何将两个多项式相乘 对于一个n次多项式,\( ...
- OSX: 真的吗?Mac OS X重大漏洞 改时钟获系统最高权限
9月3日才注意到这个在8月28日刊登在英文网站9月1日在驱动之家的,关于OS X系统的sudo漏洞没有修补的新闻,今天才有时间成文上传. 这个sudo漏洞是在2013年2月27日被公布出来的,它的注册 ...
- Java I/O流-ObjectInputStream、ObjectOutputStream
一.整体代码 ObjectStreamDemo.java import java.io.File; import java.io.FileInputStream; import java.io.Fil ...
- Java__jar包的简单操作
工作需要研究了下jar,这里就举个简单的例子,以helloworld为例吧 1.启动eclipse编写代码: 次步不做赘述 package cn.test.jar; public class Hell ...
- SQL SERVER递归查询
SQL SERVER 进行递归查询 有如下数据表
- HDU5090模拟,hash
/* HDU 5090 算是一道简单模拟题.但当中有非常深的hash思想 这是本人的第一道hash题 更是本人的第一道纸质代码不带编译不带执行提交AC的题 值得纪念 废话讲这么多之后,讲述题中思想 因 ...
- 可执行程序的入口点在那里?(强化概念:程序真正的入口是mainCRTstartup)
今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写wi ...
- 用lambda表达式声明委托
首先来分享一段代码: Func<int, int, int> addMethod = (int x, int y) => (x + y); 熟悉的人肯定知道这句话是什么意思,可是不熟 ...
- 基于Greenplum Hadoop分布式平台的大数据解决方案及商业应用案例剖析
随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发 ...
- java反射小样例
package reflect; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExc ...