myisam表锁及锁粒度调节

本文探讨了MyISAM存储引擎的并发插入机制及其锁行为。详细解释了系统变量concurrent_insert的不同设置如何影响表的读写操作,并介绍了几种调节读写冲突的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

myisam支持表锁,对表的读写是串行执行的,在一定条件下,Myisam表也支持查询和插入操作的并发执行。
Myisam存储引擎有一个系统变量concurrent_insert,专门用以控制其并发插入的行为,其值分别可以为0、1、2
当concurrent_insert为0时,不允许并发插入
当concurrent_insert为1时,若Myisam表中没有空洞(即表的中间没有被删除的行),Myisam允许在一个进程读表的同时,
另一个进程从表尾插入记录,这也是Myisam的默认设置。
当concurrent_insert为2时候,无论Myisam表是否有空洞,都允许在表尾并发插入记录。
Myisam存储引擎的读锁和写锁是互斥的,读写操作是串行的,那么一个进程请求某个Myisam表的读锁,同时另外一个进程也请求同一表
的写锁,MySql会先处理写锁。不仅如此,即使读请求写到锁等待队列,写请求后到,写锁也会查到读锁之前。这是Mysql通常认为写请求
比较重要的原因。因此大量的写请求会阻塞查询操作,从而导致永久阻塞,这也是Myisam为什么不适合高并发的一个原因吧~
Mysql也提供一种折中的办法来调节读写冲突,即给系统参数max_write_lock_count设置一个合理的值。

Myisam锁粒度调节:

1、通过指定启动参数low-priority-updates,使Myiasm引擎默认给予读请求以优先的权利。

2、通过执行命令SET LOW_PRIORITY_UPDATES=1,使该连接发出的更新请求优先级降低。

3、通过指定insert,update,delete语句的LOW_PRIORITY属性,降低语句的优先级。

转载于:https://www.cnblogs.com/liufofu/p/4141975.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值