插入 12000 条记录时 MyISAM 吞吐量激增

插入 12000 条记录时 MyISAM 吞吐量激增

我正在通过批量记录插入测试数据库性能。

除存储引擎外,两个系统完全相同

**Database      1000        4000        12000**
MySQL_InnoDB    60.95330976 218.2572161 262.1174723
MySQL_MyISAM    88.55827134 307.503075  684.8142441

这里的指标是吞吐量,定义为操作/秒。

如您所见,当插入 1000 条记录时,两者非常相似,同样为 4000 条。

我不确定为什么 MyISAM 在插入 12000 条记录时峰值会比 InnoDB 高。可能是因为缓冲区大小吗?我的默认值设置为 8MB,并且我发现 1000 条记录和 4000 条记录都在该缓冲区内,但 120000 条记录超过了 8MB 缓冲区大小。这可能是吞吐量呈指数级增长的原因吗?

我更感兴趣的是为什么 MyISAM 在 12000 次插入时每秒的操作数会出现如此指数级的激增,而 InnoDB 似乎更加线性。

答案1

使用 innodb 时,您可能会填充事务日志 ( innodb_log_size)。插入时,InnoDB 首先将所有内容写入事务日志。一旦进入日志,事务就会应用于数据库本身。这样,如果服务器在事务中途崩溃,它可以重播日志(重新应用事务)以保持数据的一致性。

这实际上意味着,每个数据都会被写入磁盘两次。

如果插入的内容不适合日志,则必须等到日志中的事务刷新到数据库。这可能是您看到性能大幅提升的原因。

(哦,注意日志大小。如果日志太大,服务器崩溃后的恢复可能会花费很长时间)

答案2

增加池大小肯定会对 InnoDB 性能产生非常明显的影响。尝试将其增加到 128/256 MB,然后重试测试。

这里您可以找到更多信息。

相关内容