症状
MySQL 5.7升级到MySQL8.0后,插入和删除查询运行较慢
原因
transaction_write_set_extraction MySQL 5.7中默认情况下该参数是禁用的 。而 MySQL 8.0中的参数发生了变化,默认值 是 XXHASH64, 当启用二进制日志记录时,这可能会导致插入和删除查询的性能下降。当 transaction_write_set_extraction 启用时,CPU使用率会稍高,这会影响更新性能。
注意:如果组复制被启用,它必须持续使用“XXHASH64”。
解决办法
建议设置transaction_write_set_extraction =OFF,然后重新启动并监视插入/删除执行时间,如果有任何改进的话。
也可以通过以下方式在线进行更改:
<code >mysql > SET GLOBAL transaction_write_set_extraction=OFF;
如果您在线更改了变量,它不会对正在复制的事务生效,直到通过“STOP REPLICA”和“START REPLICA”完全停止并重新启动复制副本。
还有其他参数可以提高性能,如下所示。
- innodb-use-fdatasync 参数
这innodb-use-fdatasync 是MySQL 8.0.26中添加的一个参数,它可能会提高支持fdatasync()的操作系统的性能。可以通过以下命令动态更改它:
<code >mysql > SET GLOBAL innodb_use_fdatasync=ON;
- 参数
这innodb_log_writer_threads是MySQL 8.0.22中添加的一个参数,它禁用并发日志缓冲区功能,因为该功能被认为在某些情况下会降低性能。
针对该问题提出的相关错误:错误30088404-8.0的并发日志缓冲区导致低端架构上的CPU性能下降
该变量可以通过以下命令动态更改:
<code >mysql > SET GLOBAL innodb_log_writer_threads=OFF;