文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


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

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 语句(并发插入)。但是,如果要在持有锁的同时使用服务器外部的进程操作数据库,则不能使用此选项。