| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> rc 和rr 模式下的死锁问题 -> 正文阅读 |
|
[大数据]rc 和rr 模式下的死锁问题 |
问题描述:线上项目高峰期突然出现死锁问题!用户操作出现卡顿,后台直接抛出deadlock? 查看日志发现是在update表的时候出现DeadlockLoserDataAccessException异常 (Deadlock found when trying to get lock; try restarting transaction...)。 问题分析: 查看日志是更新数据时抛出的异常(所以考虑的时锁竞争引发的锁等待超时回滚),因为时老版本维护的人比较多,查看sql语句发现没有加索引,事务隔离级别为rr,至此问题解决(rr 隔离级别下,锁机制未加索引,走的是netkey 机制锁住全表(排他锁),rc 隔离级别下 只会锁一行) 解决方案 :给sql 语句加上索引,或者事务隔离级别设为rc(建议设为rc,虽然可能会产生幻读和不可重复读但是我们可以业务上避免或者手动加锁) 后文: 一直说更新语句如果不走索引锁的是全表,为什么是博主说是锁rc模式下锁的是一行记录,博主也很奇怪,偶然间看过这么一句话(RC和RU级别下不用去确保多次读取数据的一致性, 就不会有间隙锁(防止出现幻读),以及行锁升级表锁) 看实测把 创建一个学生表
设置数据库隔离级别 set session transaction isolation level repeatable ?read; 执行开启事务更新表记录,查看锁住的表记录
innodb_trx查看事务锁的状态和事务的隔离级别以及权重和所住的表记录下图可以看到只锁住了一行记录 ?查看rr隔离级别下未设置索引更新语句
由下图看全表都被锁住了 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:37:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |