• 欢迎访问微视觉网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入微视觉微视觉-影视后期交流
  • 本站全面支持自动充值,目的是更好的服务大家!
  • 本站全面开启SSL服务,请放心使用!
  • 如果您觉得本站对你非常有用,那么赶紧使用Ctrl+D 收藏吧

细聊MySQL的Innodb存储引擎(二)

数据库 Jason.w.wei 2年前 (2016-09-03) 984次浏览 已收录 26个评论

上一篇主要和大家探讨了下 Innodb 的锁机制与隔离机制。
本篇来和大家一起研究下在使用 Innodb 是会出现的问题以及如何解决它们。
Innodb 是如何解决幻读问题的
什么是幻读?听起来似乎很高端,但实际上它只是反映了事务中的一种数据不一致的情况。下面看我来描述这样一个场景,通过这个场景,大家就能很清楚的知道幻读到底是什么意思。
打开两个客户端,设为 A 和 B
A 客户端

mysql> start transaction; (步骤一)
Query OK, 0 rows affected (0.00 sec)
mysql> select * from b; (步骤二)
+----+------+
| id | name |
+----+------+
| 10 | abd  |
| 99 | NULL |
|  1 | wang |
|  7 | eeee |
|  2 | wei  |
|  3 | ak47 |
|  9 | ffff |
+----+------+
7 rows in set (0.00 sec)
mysql> mysql> select * from b;(步骤六)
+----+------+
| id | name |
+----+------+
| 10 | abd  |
| 99 | NULL |
|  1 | wang |
|  7 | eeee |
|  2 | wei  |
|  3 | ak47 |
|  9 | ffff |
+----+------+
7 rows in set (0.00 sec)
mysql> insert into b (id,name) values (100,'abc’); (步骤七)
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'

B 客户端

mysql> start transaction; (步骤三)
Query OK, 0 rows affected (0.00 sec)
mysql> insert into b (id,name) values (100,'abc’); (步骤四)
Query OK, 1 row affected (0.00 sec)
mysql> commit; (步骤五)
Query OK, 0 rows affected (0.01 sec)

=。= what? 明明步骤六查询结果没有值为 100 的 id,为啥插入时提示重复 key 呢?这个值为 100 的 id 在事务 A 中“凭空”的产生了,这种现象就称之为幻读。
由于 REPEATABLE-READ 隔离级别是参照第一次查询的时间点快照来保持一致性读的,所以当事务 B 提交插入数据后,事务 A 仍然显示旧版本的结果集来保持数据的一致性。而这样恰好就成为了引起幻读的原因。
那么,如何解决幻读问题呢?要解决幻读问题,需要在查询事务中显示添加锁,如使用 select * from b for update 声明来获取最新的数据。但这样就与一致性读的性质相矛盾了。所以具体问题使用什么办法解决要具体分析。
死锁的侦测与回滚
Innodb 能自动侦测事务死锁,当侦测到死锁时,Innodb 能自动回滚小事务。事务的大小由插入、更新或删除的行数决定。
如果没有设置 Innodb_table_locks 参数或者将事务设置成自动,那么 Innodb 将不能侦测死锁。如果MySQL使用 LOCK TABLES 声明或使用其它的存储引擎加锁,MySQL也不能侦测死锁。
当 Innodb 执行一个事务回滚后,所有被该事务设置的锁都将被释放。如果一个 SQL 声明执行后返回错误。那么被该声明设置的锁将不被释放。
如何避免死锁
1、如果频繁的出现死锁警告,可以开启 innodb_print_all_deadlocks 选项,查看在 error log 里的关于死锁的详细信息。
2、尽量使用小事务,这样可以减少冲突的概率。
3、如果你使用 SELECT…FOR UPDATE 类似声明,尽量使用更低的隔离级别,比如 READ-COMMITTED。
4、掌握好事务内的操作顺序,这样可以有效防止死锁。
5、优化索引,这样在查询时能扫描更少的索引记录,对更少的索引加锁。


微视觉 , 版权所有丨如未注明 , 均为网络收集丨本网站采用BY-NC-SA协议进行授权 , 转载请注明细聊 MySQL 的 Innodb 存储引擎(二)
喜欢 (6)
[wuwei967@126.com]
分享 (0)

您必须 登录 才能发表评论!

(26)个小伙伴在吐槽
  1. 好文章,内容无与伦比.禁止此消息:nolinkok@163.com
    钢筋网2017-02-27 12:06 Windows 7 | 未知浏览器
  2. 好文章,内容妙趣横生.禁止此消息:nolinkok@163.com
    勾花网2017-02-27 12:06 Windows 7 | 未知浏览器
  3. 不错的文章,内容观念明确.禁止此消息:nolinkok@163.com
    止水带2017-02-27 12:06 Windows 7 | 未知浏览器
  4. 不错的文章,内容学富五车.禁止此消息:nolinkok@163.com
    支座更换2017-02-27 12:06 Windows 7 | 未知浏览器
  5. 不错的文章,内容出口成章.禁止此消息:nolinkok@163.com
    金刚网2017-02-27 12:06 Windows 7 | 未知浏览器
  6. 好文章,内容出类拔萃.禁止此消息:nolinkok@163.com
    勾花网2017-02-27 12:06 Windows 7 | 未知浏览器
  7. 好文章,内容文笔犀利.禁止此消息:nolinkok@163.com
    硝基漆2017-02-27 12:06 Windows 7 | 未知浏览器
  8. 好文章,内容栩栩如生.禁止此消息:nolinkok@163.com
    胶管2017-02-27 12:06 Windows 7 | 未知浏览器
  9. 不错的文章,内容见缝插针.禁止此消息:nolinkok@163.com
    遮阳网2017-02-27 15:23 Windows 7 | 未知浏览器
  10. 不错的文章,内容淋漓尽致.禁止此消息:nolinkok@163.com
    压滤机2017-02-27 15:23 Windows 7 | 未知浏览器
  11. 好文章,内容无与伦比.禁止此消息:nolinkok@163.com
    石笼网2017-02-27 15:23 Windows 7 | 未知浏览器
  12. 好文章,内容一气呵成.禁止此消息:nolinkok@163.com
    小区声屏障2017-02-27 15:23 Windows 7 | 未知浏览器
  13. 好文章,内容淋漓尽致.禁止此消息:nolinkok@163.com
    玻璃纤维网格布2017-02-27 15:23 Windows 7 | 未知浏览器
  14. 不错的文章,内容十全十美.禁止此消息:nolinkok@163.com
    钢格板2017-02-27 15:23 Windows 7 | 未知浏览器
  15. 好文章,内容一气呵成.禁止此消息:nolinkok@163.com
    边坡防护网2017-02-27 15:23 Windows 7 | 未知浏览器
  16. 好文章,内容见缝插针.禁止此消息:nolinkok@163.com
    雷诺护垫2017-02-28 10:19 Windows 7 | 未知浏览器
  17. 好文章,内容见缝插针.禁止此消息:nolinkok@163.com
    格宾网2017-02-28 10:19 Windows 7 | 未知浏览器
  18. 好文章,内容完美无缺.禁止此消息:nolinkok@163.com
    钢板网2017-02-28 10:19 Windows 7 | 未知浏览器
  19. 好文章,内容笔下生辉.禁止此消息:nolinkok@163.com
    勾花网2017-02-28 10:19 Windows 7 | 未知浏览器
  20. 好文章,内容文风幽默.禁止此消息:nolinkok@163.com
    安平配货站2017-02-28 10:19 Windows 7 | 未知浏览器
  21. 好文章,内容出口成章.禁止此消息:nolinkok@163.com
    轧花网2017-02-28 10:19 Windows 7 | 未知浏览器
  22. 不错的文章,内容十全十美.禁止此消息:nolinkok@163.com
    衡水人才2017-02-28 10:19 Windows 7 | 未知浏览器
  23. 不错的文章,内容才思敏捷.禁止此消息:nolinkok@163.com
    止水带2017-02-28 10:19 Windows 7 | 未知浏览器
  24. 不错的文章,内容博学多才.禁止此消息:nolinkok@163.com
    玻璃钢冷却塔2017-03-01 10:52 Windows 7 | 未知浏览器
  25. 不错的文章,内容才思敏捷.禁止此消息:nolinkok@163.com
    果冻胶2017-03-01 10:52 Windows 7 | 未知浏览器
  26. 不错的文章,内容字字珠玉.禁止此消息:nolinkok@163.com
    胶管2017-03-01 10:53 Windows 7 | 未知浏览器