首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向写入磁盘的mySQL表-> 180 to插入几个字节

问向写入磁盘的mySQL表-> 180 to插入几个字节
EN

Stack Overflow用户
提问于 2018-03-25 21:51:09
回答 1查看 72关注 0票数 0

我的RaspberryPi每5分钟读取一次温度/空气压力传感器,并将数据和时间戳写入CSV文件。让它每次大约是25个字节。

作为一种实验,我还将数据写入mySQL数据库(MariaDB,InnoDB),因为这允许简单的查询、来自不同进程的数据访问等等。为了更快地访问,时间戳是主键。

原则上,时间戳是4字节,每个值4字节浮动,因此总共大约12字节。当然,数据组织有更多的字节,但是使用iotop -Pa,我发现每5分钟,大约180 to被写入磁盘。即使在考虑日志记录时也是如此,而且时间戳可能是主键。

,有人知道DB在那里做什么吗?也许,有什么可以减少这种情况的地方吗?

我担心数据会被一次又一次地覆盖,尽管数据库驻留在USB闪存驱动器上,而不是内部SD卡上,但这将很快耗尽驱动器。(是的,我知道,在这种媒体上建立数据库不是个好主意,但我没想到会如此糟糕)

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 16:35:58

对于事务的每一次提交,MySQL都会向InnoDB重做日志写入一条记录。写入大小至少为512字节,即使行大小较小。您可以通过将更改分组为事务来减少写操作(请参阅https://www.percona.com/blog/2012/10/08/measuring-the-amount-of-writes-in-innodb-redo-logs/)。

还可以将MySQL设置为在提交时推迟对重做日志文件的写入。如果您的设备在提交的事务到达磁盘之前崩溃,这将有丢失数据的风险。

如果启用了二进制日志,MySQL也可能会写入它的二进制日志(您可能不在这样的设备上,但您应该检查)。

当需要将已更改的页面从RAM刷新到磁盘时,首先MySQL会将页面写入“双写段”,然后将真正的页面写入各自的磁盘位置。这是为了防止在页写入期间崩溃,这可能损坏您的数据库。如果您更关心降低写I/O而不是风险,则可以禁用双写活动(但在数据库损坏后不要抱怨)。

  • 将组更改为事务
  • 注释掉binlog,如果有设置的话
  • innodb_doublewrite=0
  • innodb_flush_log_at_trx_commit=0

另见http://www.tocker.ca/2013/11/04/reducing-mysql-durability-for-testing.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49481327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档