如何最小化mysqld写入磁盘的字节数?

Pan*_*nek 4 mysql linux raspberry-pi

我在树莓派(raspbian系统)上使用mysql服务器来存储传感器读数。每分钟将一条长度为20字节的记录插入mysql表。

但是iotop命令显示mysqld进程每分钟写入200K。我想最大程度地减少写入sd卡的数据量,以延长其耐用性(我已经应用了一些修复程序来防止sd卡损坏,例如日志和其他黑客的tmpfs)。

当只有20B的数据插入表时,为什么mysqld写入200K字节?有没有办法在上述情况下最小化写入,调整mysql服务器?

有趣的是,vmstat命令不会在“ io / bo”列中显示太多写入磁盘的数据

我使用的是MySQL服务器版本5.5.33-0 + wheezy1和innoDB表。

更新:

Bill在下面的详尽回答使我意识到,使用mysql服务器对于简单的传感器记录来说是一个过大的杀伤力。最终我迁移到了sqlite。对于相同的表结构,sqlite每个事务写入的字节数比mysql少6倍(约30kb),这对于RPi sd卡来说更好。我仍在进行优化,因为如前所述,每个事务仅写入20b的实际数据。

Bil*_*win 5

InnoDB将记录写入512字节对齐的事务日志(ib_logfile *)。它还将信息写入第一个日志的标题。这不是可配置的,但是您可以通过将innodb_flush_log_at_trx_commit变量更改为0 来降低写入频率。

然后,无论您在页面上仅写了一个20字节的行,修改后的页面都会以16KB的页面写入磁盘。在MySQL 5.6中,您可以使用innodb_page_size变量将页面大小减小到4KB。

在将页写入表空间中的相应位置之前,还将页写入双写缓冲区。您可以使用innodb_doublewrite变量禁用doublewrite缓冲区。

页面也可以写入回滚段。这是不可配置的。

还有二进制日志。这与InnoDB无关,它可用于任何存储引擎。我假设如果您在Raspberry Pi上,则不需要二进制日志。您可以使用log_bin变量禁用二进制日志(只是不要设置此变量,默认条件是禁用它)。

您还可以禁用常规查询日志和慢速查询日志。

还有一个错误日志,但是您不能禁用它。