mysql - 减少 MySQL 中非关键数据的写入 I/O?

标签 mysql myisam

我有一个包含大约 200 万行的 MySQL 表,以及一个每秒更新大约 100 行的脚本。我想减少正在进行的磁盘写入 I/O 的数量。对于这个特定的表,ACID 并不重要,因为如果我在崩溃中丢失一些行,脚本只会在适当的位置恢复。即使我失去了过去一个小时的工作,也没什么大不了的。

该表使用的是 InnoDB,但我切换到 MyISAM,因为我想如果它不记录每次写入,可以将 I/O 减少一半。

但即使使用 MyISAM,也有很多写 I/O 正在进行。表 + 索引占用大约 1300 MB 的磁盘空间,但 MySQL 每小时向磁盘写入大约 1600 MB。我计算过,如果每一行都可以非常有效地写入磁盘,那么每小时大约写入 160 MB。所以它写入的数据量大约是它需要的数据量的 10 倍。我意识到效率低下,但我猜测大部分写入是因为它会将整个页面写入磁盘。

有什么方法可以减少它的写入频率,所以它会一直等到每页上的更多行被更新,这样它才能更有效地进行写入(即使在发生崩溃时会丢失更多数据)?

最佳答案

如果您使用的是 innodb,则可以将 innodb_flush_log_at_trx_commit 设置为 2,例如。这极大地改善了我们系统更新期间的 I/O。

这里有一些关于设置的说明: http://www.mysqlperformanceblog.com/?s=innodb_flush_log_at_trx_commit

关于mysql - 减少 MySQL 中非关键数据的写入 I/O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598111/

相关文章:

mysql - INSERT 重复键后检索自动增量值

mysql - 如何在同一张表中使用 ORDER BY 更新表?

php - MYSQL SELECT DISTINCT 在结果集中有附加列

MySQL 锁表被忽略

Mysql 搜索 - InnoDB 和事务与 MyISAM 的全文搜索

php - Mysql创建排序索引性能简单频繁查询

php - 使用 PHP 从数组生成下拉菜单,将行项目与 MySQL 条目匹配

java - JPA EclipseLink - 通过主键维护顺序获取多个对象

php - 从 mysql 获取主类别的子类别

php - mysqli_use_result() 和并发性