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请求 ...
随机推荐
- android 高效显示Bitmap - 开发文档翻译
由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明“转”,那么均为原创,转贴请注明本博客链接链接 Displaying Bitmaps Efficiently 高效显示Bitmap Lea ...
- iOS开发中捕获Crash 发送Bug邮件
在开发过程中,我们有时候会留下Bug,用户在使用我们的app 的时候,有时会出现闪退,这时候我们可以让用户给我们发送邮件,以让我们开发人员更加快速的地位到Bug的所在,以最快的时间解决,同时也提高用户 ...
- Bernstein polynomials
Bernstein多项式能够用来一致逼近闭区间上的连续函数. 对于[0,1]上的连续函数f(x),定义Bernstein多项式 B_n(f,x) = sum{k=0..n} f(k/n)C(k,n)t ...
- StreamWrite-StreamRead 读写文本文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 配置SAP 采购合同审批
需求: 采购合同类型是MK,采购组织是POSC,采购组PGC,标识:估计价格是空,总价有值0.00 - 9999999999.00 RMB 满足以上条件的时候需要审批该合同. 配置: spro-> ...
- Writing a ServiceMain Function(使用RegisterServiceCtrlHandler函数)
The following global definitions are used in this sample. C++ #define SVCNAME TEXT("SvcName&q ...
- MYSQL 语法大全自己总结的
mysql语法大全 --------数据链接---------------------数据库服务启动net start mysql --关闭服务net stop mysql --登录 -u,-p后面不 ...
- codility上的问题(18) Rho 2012
从正整数1开始,产生一个数列,数列中的每个数是之前出现过的任意两个数的和(可以相等),问产生正整数A,需要的数列长度至少是多少?返回这样一个最短的序列. 例如A=42 可以这样[1, 2, 3, 6, ...
- DM6446开发攻略——u-boot-1.3.4移植(1)
http://zjbintsystem.blog.51cto.com/964211/282387转载 UBOOT的版本更新速度比较快,截止今天,稳定正式的版本是u-boot-2009.11-rc2 ...
- 【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
作者:iamlasong 1.接口说明 通过互联网訪问,运单跟踪信息查询接口基于HTTP协议开发,接口为RESTFul风格的Web Service,信息交互过程为用户按我方提供的web service ...