InnoDB和MyISAM最大不同有两点:一是支持事务,二是采用了行级锁 查看Mysql当前隔离级别: show variables like ‘transaction_isolation’; 示例数据 create
InnoDB和MyISAM最大不同有两点:一是支持事务,二是采用了行级锁
查看Mysql当前隔离级别:
show variables like ‘transaction_isolation’;
示例数据
create table test_innodb_lock (a int(11),b varchar(16))engine=innodb;
insert into test_innodb_lock values(1,"b2");
insert into test_innodb_lock values(2,"2000");
insert into test_innodb_lock values(3,"300asd0");
insert into test_innodb_lock values(4,"4asd000");
insert into test_innodb_lock values(5,"510a00");
insert into test_innodb_lock values(6,"80asd00");
insert into test_innodb_lock values(7,"897jht71");
create index test_innodb_a_ind on test_innodb_lock(a);
create index test_innodb_lock_b_ind on test_innodb_lock(b);
select * from test_innodb_lock;
开启两个会话,都改为手动提交
set autocommit=0; #关闭自动提交
在session1中执行更新操作,查看session2中的情况
session1:
session2:执行前和执行后均未变化,直到session1,session2,commit
在同一行进行更新操作,会阻塞;不是同一行不会阻塞
session1:
session2:
查看innoDB_row-_lock状态变量来分析系统上的行锁的争夺情况
show status like "innodb_row_lock%";
Innodb_row_lock_current_waits:当前正在等待锁定的数量 Innodb_row_lock_time:从系统启动到现在锁定总时间长度 Innodb_row_lock_time_avg:每次等待所花平均时间 Innodb_row_lock_time_max:从系统改动到现在等待最长的一次所花的时间 Innodb_row_lock_waits:系统刚启动后到现在总共等待的次数 当等待次数很高,而且每次等待时长也不小的时候,我们就需要分析系统中为什么会有如此多的等待,然后根据执行结果着手指定优化计划 优化建议: 1.尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁 2.合理设计索引,尽量缩小锁的范围 3.尽可能较少检索条件,避免间隙锁 4.尽量控制事务大小,减少锁定资源量和时间长度 5.尽可能低级别事务隔离
--结束END--
本文标题: 行锁
本文链接: https://lsjlt.com/news/6039.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0