美文网首页程序猿的进阶屋
mysql进阶08(MyISAM并发插入数据)

mysql进阶08(MyISAM并发插入数据)

作者: 机智的老刘明同志 | 来源:发表于2018-08-21 02:01 被阅读8次

        之前明哥提到过Myiam表的读和写是串行的,但是这是就总体而言,在一定条件下MyISAM表也支持查询和插入操作的并发进行.

        MyISAM存储引擎有一个系统变量concurrent_insert,专门用于充值其并发插入的行为,其值分别可以为0,1和2

        1 当concurrent_insert = 0 时,不允许并发插入

        2 当concurrent_insert = 1时,如果myisam表中没有空洞(即表的中间没有被删除的行),myisam允许在一个进程读表的同时,另一个进程从表尾插入记录,这就是mysql的默认设置

        3 当concurrent_insert = 2时,无论myisam表中有没有空洞,都允许在表尾并发插入记录

查看concurrent_insert 变量值并将其修改为2

        下图所示concurrent_insert=2时,当左侧mysql客户端加上local关键字后,添加删除修改是失败的,但是右侧mysql客户端可以执行添加操作,并且左侧mysql客户端是无法查看到才添加的数据

   下图所示concurrent_insert=1时,当左侧mysql客户端加上local关键字后,添加删除修改是失败的,但是右侧mysql客户端不可以执行添加操作,只有解锁右侧客户端才会添加成功

一个进程请求某个myisam表的读锁,同时另一个进程也请求同一表的写锁?mysql如何处理?

        写进程先获得锁,即使读请求先到锁等待队列,写请求后到,写锁也会插入到读锁队列。mysql认为写请求比读请求更重要。myisam不太适合于有大量更新操作和查询操作的原因。因此大量的更新操作会造成查询操作很难获得读锁,从而可能永远堵塞

        解决方法: set low_priority_updates =1; 使该连接发出的更新请求优先级降低(insert,delete也可以通过这种方法指定)

相关文章

网友评论

    本文标题:mysql进阶08(MyISAM并发插入数据)

    本文链接:https://www.haomeiwen.com/subject/mkoriftx.html