文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  并发插入

10.11.3 并发插入

MyISAM 存储引擎支持并发插入以减少给定表上读取器和写入器之间的争用:如果 MyISAM 表的数据文件中没有空洞(中间删除的行),则可以在 SELECT 语句从表中读取行的同时执行 INSERT 语句以将行添加到表的末尾。如果有多个 INSERT 语句,它们将排队并按顺序执行,并与 SELECT 语句同时执行。并发 INSERT 的结果可能不会立即显示。

可以通过设置 concurrent_insert 系统变量来修改并发插入处理。默认情况下,该变量设置为 AUTO(或 1),并发插入的处理方式如上所述。如果 concurrent_insert 设置为 NEVER(或 0),则禁用并发插入。如果该变量设置为 ALWAYS(或 2),则即使对于已删除行的表,也允许在表末尾进行并发插入。另请参阅 concurrent_insert 系统变量的说明。

如果使用二进制日志,则对于 CREATE ... SELECTINSERT ... SELECT 语句,并发插入将转换为正常插入。这样做是为了确保您可以在备份操作期间通过应用日志来重新创建表的精确副本。请参阅 第 7.4.4 节“二进制日志”。此外,对于这些语句,将在 selected-from 表上放置读取锁,以便阻止对该表的插入。其结果是,该表的并发插入也必须等待。

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

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

对于 LOCK TABLEREAD LOCALREAD 之间的区别在于,READ LOCAL 允许在持有锁时执行非冲突的 INSERT 语句(并发插入)。但是,如果要在持有锁的同时使用服务器外部的进程来操作数据库,则不能使用此选项。