Jua*_*bar 8 mysql innodb myisam performance insert
我已经开始使用 MySQL 8 (8.0.12),我意识到这个版本中的“插入”比 MySQL 5.6 或 MySQL 5.7 慢。表是 MyISAM 还是 InnoDB 都没有关系,只有一个“插入”,只有一条记录,服务器在 MySQL 8 中大约需要 0.2 ~ 0.3 秒。在 MySQL 5.7 中相同的“插入”只需要 0.003 秒或更短.
我已经放弃了 Windows Defender 或其他防病毒程序,硬盘的写入速度不是问题,因为我在同一台服务器上有一个虚拟机,VM 有 MySQL 5.7,结果也很好:0.003 秒或更少。
我已经在不同 SO 的不同计算机上测试了相同的“插入”,结果总是相同的:MySQL 5.7(或 5.6)需要 0,003 秒或更短,同时 MySQL 8 每次插入需要 0.2 ~ 0.3 秒,只有一条记录. “创建”也较慢。
我觉得奇怪的是,在 MySQL 8 中,简单的“选择”或“带连接的选择”比以前的版本更快。我认为问题在于写入磁盘的查询,但不是磁盘限制,可能是 my.ini 或其他 MySQL 设置中的指定限制。
在这里,我将在 MySQL 8 中性能缓慢的脚本留给您:
CREATE TABLE `ciiu_test2` (
`id` INT(11) NULL DEFAULT NULL,
`codbut` VARCHAR(11) NULL DEFAULT NULL,
`ciiu` VARCHAR(8) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
;
Run Code Online (Sandbox Code Playgroud)
MySQL 5.7 中的执行时间:0.016 秒 MySQL 8.0.12 中的执行时间:0.140 秒
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (1, '18237', '2750');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (2, '18238', '9491');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (3, '18245', '9411');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (4, '18248', '2221');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (5, '18264', '3520');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (6, '18265', '4645');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (7, '18268', '6202');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (8, '18276', '6512');
INSERT INTO `ciiu_test2` (`id`, `codbut`, `ciiu`) VALUES (9, '18290', '4210');
Run Code Online (Sandbox Code Playgroud)
MySQL 5.7 中的执行时间:0.002 秒 MySQL 8.0.12 中的执行时间:0.681 秒
请不要建议我用多条记录优化“插入”。具体来说,我需要在 MySQL 8 中获得与 MySQL 5.7 中的每个“插入”相同的时间。
我预先感谢您在此问题上为我提供的帮助。
Jos*_*ine 10
5.7 和 8.0 之间的区别在于 MySQL 8.0 中默认启用二进制日志记录(用于复制和 PITR)。要在 8.0 中不使用二进制日志运行,请使用--disable-log-bin.
更多细节二进制日志
二进制日志包含描述数据库更改的“事件”,例如表创建操作或表数据的更改。它还包含可能进行更改的语句的事件(例如,不匹配任何行的 DELETE),除非使用基于行的日志记录。二进制日志还包含有关每个语句花费多长时间更新数据的信息。二进制日志有两个重要目的:
- 对于复制,主复制服务器上的二进制日志提供了要发送到从服务器的数据更改的记录。主服务器将其二进制日志中包含的事件发送到其从服务器,从服务器执行这些事件以进行与主服务器相同的数据更改。请参见第 17.2 节,“复制实现”。
- 某些数据恢复操作需要使用二进制日志。恢复备份后,将重新执行备份后记录的二进制日志中的事件。这些事件使数据库从备份点开始更新。请参见第 7.5 节 “使用二进制日志的时间点(增量)恢复”。
Jua*_*bar -1
“5.7 和 8.0 之间的区别在于,MySQL 8.0 中默认启用二进制日志记录(用于复制)。要在 8.0 中不使用二进制日志记录运行,请使用 --disable-log-bin 启动 MySQL 服务器。”
为了做到这一点,我这样编辑了 my.ini 文件:
[mysqld] skip-log-bin
Run Code Online (Sandbox Code Playgroud)
然后我重新启动服务,速度与 MySQL 5.7 相同或更好。
来源:https ://forums.mysql.com/read.php?24,668698,668704#msg-668704
| 归档时间: |
|
| 查看次数: |
9323 次 |
| 最近记录: |