• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 并发插入

    MyISAM存储引擎支持并发插入,减少读者和作者之间的竞争给定表:如果一个MyISAM表已经在数据文件中没有孔(中删除的行),一个INSERT语句可以执行行添加到表的末尾同时该SELECT语句正在从表中读取行。如果有多个INSERT语句,它们将与这些SELECT语句同时排队并按顺序执行。并发的结果INSERT可能不会立即可见。

    所述concurrent_insert系统变量可以被设置为修改并发插入处理。默认情况下,变量设置为AUTO(或1),并发插入操作如前所述。如果concurrent_insert设置为NEVER(或0),则禁用并发插入。如果将变量设置为ALWAYS(或2),则即使对于已删除行的表,也允许在表末尾进行并发插入。另请参见concurrent_insert系统变量的描述。

    如果使用二进制日志,则并发插入将转换为CREATE ... SELECTor INSERT ... SELECT语句的普通插入。这样做是为了确保您可以通过在备份操作期间应用日志来重新创建表的精确副本。请参见“MySQL服务器二进制日志”。另外,对于那些语句,在从选定表中放置了读取锁,从而阻止了对该表的插入。结果是该表的并发插入也必须等待。

    使用LOAD DATA,如果指定CONCURRENTMyISAM表满足并发插入的条件(也就是说,中间不包含空闲块),则其他会话可以在LOAD DATA执行时从表中检索数据。即使没有其他会话同时使用该表,使用该CONCURRENT选项LOAD DATA也会影响性能。

    如果指定HIGH_PRIORITY,则--low-priority-updates使用该选项启动服务器时它将覆盖该选项的效果。这还会导致不使用并发插入。

    LOCK TABLE,之间的差READ LOCAL并且READREAD LOCAL允许不冲突的INSERT语句(并发插入),而锁被保持来执行。但是,如果您要在持有锁的同时使用服务器外部的进程来操作数据库,则不能使用此功能。

    上篇:表锁定问题

    下篇:元数据锁定