附加文件会导致碎片吗?

时间:2013-11-11 22:34:42

标签: mysql linux windows file file-io

如果我们附加到文件而不是更新更快的随机访问文件 我想知道如果我们附加到文件,我们不会得到碎片吗? 我读了那些数据库MySQL首先将数据附加到基于日志的文件中,然后最终将数据保存到实际的“表”中。

我想知道我们是否附加到文件并且文件大小发生了变化,我们是否会出现碎片并且出现与在随机访问文件中使用写入时相同的问题?

1 个答案:

答案 0 :(得分:0)

(首先,让我们解决这个问题:文件系统级碎片只是微软文件系统上的一个问题。以下关于碎片的评论仅适用于Microsoft文件系统,因为这个问题几乎与Linux文件系统无关)

您似乎在MySQL中混合了两种不同的机制:

The Binary Log

  

二进制日志包含描述数据库更改的“事件”,例如表创建操作或对表数据的更改。

这真的是一个日志。它在每个事务结束时按顺序编写,并在提交新事务时无限增长。为了完整起见,我们要提一下,当日志到达max_binlog_sizeàla logrotate时,会重新启动新文件。

此文件在您描述时会受到碎片影响,因为它会不断增长。但是这种碎片对性能几乎没有影响,因为它没有被大量使用。

The Redo Log

  

在崩溃恢复期间使用的基于磁盘的数据结构,用于纠正由未完成的事务写入的数据。 (...)在意外关闭之前未完成更新数据文件的修改会自动重播 [因此其名称]

此日志比日志更像缓冲区。此日志包含一组固定大小的文件,在启动时分配一次。首先将对数据库的更改按顺序写入此缓冲区,然后传输到实际的数据文件中。

此缓冲区实际上不会碎片化,因为它的大小是固定的。碎片可能总是因为其他因素而发生,但无论如何都应该是最小的。


PS:在生产中,我总是会避免使用Windows作为MySQL的主机操作系统。无论如何,与Linux相比,Windows上的性能仍然有点落后。

PPS:Tables need defragmentation,无论基础文件系统如何