安徽做网站的公司,系统开发软件,dedeampz 部署wordpress 网站访问慢,微信抽奖小程序怎么做场景:如下代码,获取数据库连接,删除权限的时候,会造成数据库死锁.
代码
日志#xff1a; 数据库#xff1a;
SHOW OPEN TABLES where In_use 0; 问题分析#xff1a;测试环境Centos7操作系统#xff0c;Mysql5.7.40版本程序运行正常#xff0c;开发环境Windows操…场景:如下代码,获取数据库连接,删除权限的时候,会造成数据库死锁.
代码
日志 数据库
SHOW OPEN TABLES where In_use 0; 问题分析测试环境Centos7操作系统Mysql5.7.40版本程序运行正常开发环境Windows操作系统Mysql5.7.40一旦执行这段代码就会造成数据库死锁对比两个环境数据库配置文件发现差别很大经过尝试发现是数据库事务隔离级别配置造成的开发环境my.ini配置文件中没有事务隔离级别相关的配置。
事务隔离级别查询
SHOW VARIABLES LIKE tx_isolation; 添加事务隔离级别配置:
transaction_isolationREAD-COMMITTED 查询事务隔离级别: 修改Mysql事务隔离级别之后SQL执行正常。
经过分析baidu.com,是由于间隙锁Gap Lock造成的。
MySQL InnoDB支持三种行锁定方式
行锁Record Lock锁直接加在索引记录上面。间隙锁Gap Lock锁加在不存在的空闲空间可以是两个索引记录之间也可能是第一个索引记录之前或最后一个索引之后的空间。Next-Key Lock行锁与间隙锁组合起来用就叫做Next-Key Lock。
间隙锁概念
当我们用范围条件(between)而不是相等条件()检索数据并请求共享或排他锁时InnoDB会给符合条件的已有数据记录的索引项加锁对于键值在条件范围内但不存在的记录叫做 “间隙(GAP)”InnoDB也会对这个间隙加锁这种锁机制就是所谓的间隙锁(NEXT-KEY)锁。
间隙锁作用
防止幻读防止数据误删/误改
间隙锁隐患
事务会锁住了需要插入数据的区域一直在进行数据处理导致插入数据一直在等待对插入的性能就有很大影响了必须等到事务结束才能进行插入性能会降低。