MySQL:MyISAM锁

MySQL:MyISAM锁

1.简介

MyISAM只支持表级锁。
MyISAM在执行查询(SELECT)前,会自动给涉及的所有表加读,在执行(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。

服务器锁状态

Table_locks_immediate:立即授予表锁请求的次数。
Table_locks_waited:无法立即授予表锁请求且需要等待的次数。

# 查看锁状态信息
show status like 'table_locks%';

MyISAM-status

常用命令

# 锁定写
lock tables demo write;
# 锁定写支持并发插入
lock tables demo read local;
# 锁定写支持别名
lock tables demo as d write;

# 解锁
unlock tables;

注意

  1. 一次锁定所有用到表。
  2. 如果需要使用别名,锁定时也要使用别名锁定。
  3. read锁定只能读(SELECT),write只能写(UPDATE、DELETE、INSERT等)否则会出现报错。

2.读写冲突演示

锁冲突演示,注意:这里手写锁定表只是为了演示需要。

read-write

3.并发插入

通过concurrent_insert控制:

  • 0: 不允许并发插入
  • 1: 如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录(默认配置)。
  • 2: 无论MyISAM中有没有空洞,都允许在表尾并发插入记录。
# 整理空间碎片,收回因删除记录而产生的中间空洞
OPTIMIZE TABLE table_name;

演示

注意:已提前将concurrent_insert值设置为2,方便演示

concurrent-insert

4.MyISAM锁调度

注意:

  1. MyISAM写比读优先,可能会有大量更新操作,使查询操作很难获得读锁造成阻塞。
  2. 需要长时间运行的查询操作,可能会使写进程“饿死”。

修改MyISAM的调度行为

  1. 指定启动参数low-priority-updates。
  2. 执行命令SET GLOBAL low_priority_updates=1,使该连接发出的更新请求优先级降低。
  3. 通过指定INSERT、UPDATE、DELETE语句的LOW_PRIORITY属性,降低该语句的优先级。
  4. 修改max_write_lock_count在一个表的读锁达到这个值后,MySQL就会暂时将写请求的优先级降低,给读进程一定获得锁的机会。

5.参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值