繁体   English   中英

MySQL MyISAM-执行插入而不锁定

[英]MySQL MyISAM - Do inserts without locking

如何始终在不锁定表的情况下插入MySQL MyISAM数据库?

当我加载100,000条记录时,其他进程似乎已锁定。

基本上,即使表中有孔,所以在插入过程中也没有表锁定时,我是否可以强制使用currently_inserts = 2?

是否可以动态设置会话的并发插入? 参见http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html

非锁定刀片还有哪些其他方法?
“插入延迟”会阻止插入过程中的表锁定吗? 参见http://dev.mysql.com/doc/refman/5.5/en/insert-delayed.html

如果您以小批量方式执行插入,则使用INSERT DELAYED将使从表中选择的客户端基本上获得优先权,因此它们不会阻塞。 如果在一张照片中插入数千行,则可能会锁定表一段时间。 可以帮助加快插入速度的另一件事是暂时告诉DB跳过唯一检查。 这将阻止对任何唯一键的持续分析,但不会阻止表的锁定。 您必须确定插入的内容是唯一的。

当进行多次插入时,InnoDB通常是更好的选择,因为它将锁定行而不是表。 您的插入内容将花费更长的时间,但是您的客户将看到更好的并发性能。

我有同样的问题。 我试图将2,500,000条记录插入MyISAM表中。 它是一个独立的表,所以锁不让我担心。 但是插入过程只是冻结了整个数据库服务器。

所以我做了什么:

  • 删除所有INDEX-es(在过程结束时添加它们)
  • 每插入2500行
  • 使用INSERT DELAYED INTO

而已。

当任何插入发生时,IIRC MyISAM会锁定表..只要重新阅读并确认:

为了达到很高的锁定速度,MySQL对除InnoDB,BDB和NDBCLUSTER以外的所有存储引擎使用表锁定(而不是页面,行或列锁定)

取自: http : //dev.mysql.com/doc/refman/5.0/en/table-locking.html

如果您知道任何非锁定MyISAM插入,请告诉我-因为这是我每天都会遇到的问题(我不喜欢InnoDB的空间消耗和速度)

MySQL确实支持在MyISAM表的同一表中并行插入。

我的ISAM

MySQL对MyISAM,MEMORY和MERGE表使用表级锁定,一次只允许一个会话更新这些表,从而使其更适合于只读,以只读为主的应用程序或单用户应用程序。

但是,MyISAM表的上述行为可以通过parallel_insert系统变量进行更改,以实现并发写入。 您可以根据需要将属性的值设置为12 详情请参阅链接。

因此,事实上,MySQL确实支持InnoDB和MyISAM存储引擎的并发插入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM