我有一个 RAID10 服务器并让 Postgres 将日志(pg_xlog aka WAL)写入同一个 RAID10 阵列。
我在同步模式下使用带有大缓冲区的 WAL,并进行大量批量插入和更新,因此希望使用该缓冲区。
将日志拆分到一个额外的磁盘上,而不是在 raid10 中是个好主意吗?我可以用 2 个磁盘填充 RAID,但这真的能改善什么吗?
我期待有人能说出一些优点和缺点。
我有一个 RAID10 服务器并让 Postgres 将日志(pg_xlog aka WAL)写入同一个 RAID10 阵列。
我在同步模式下使用带有大缓冲区的 WAL,并进行大量批量插入和更新,因此希望使用该缓冲区。
将日志拆分到一个额外的磁盘上,而不是在 raid10 中是个好主意吗?我可以用 2 个磁盘填充 RAID,但这真的能改善什么吗?
我期待有人能说出一些优点和缺点。
您询问了利弊,在给出分离日志的标准建议时很少有人提到的弊端是它会减慢您的读取速度,因为您现在专用于读取的主轴更少。您采用哪种方式取决于数据库中读取与写入的比率。如果它是 99% 的读取(例如 Web 服务器场景),那么通过分离日志,您最终可能不会获得任何东西。
另一个很少提到的可能问题是,如果您只将单个数据库日志放在该主轴上,那么将日志放在单独的主轴上只会给您顺序写入。如果你的服务器有 10 个活动数据库,那么将它们的所有日志放在同一个磁盘上不会给你顺序写入,它们将分布在不同的日志文件上。然后再次将它们放在 10 个单独的镜像驱动器上意味着您需要将 20 个驱动器专用于日志,这也可能是不可能的。在这种情况下,一个好的解决方案是为您的日志文件使用 SSD 存储,当您发现您的环境没有顺序写入时,它在随机写入上的性能要好得多。
来自PostgreSQL 文档:
在其他来源中,可以发现将日志移动到单独的磁盘可能会将您的数据库性能提高 10-50%。
是的,单独的 RAID 集可能会提高性能,因为磁盘将专用于 xlog,这是所有写入争用的地方。它也或多或少完全是顺序的(写入是顺序的,但也有文件系统元数据),raid 控制器比然后优化更多。
它的缺点显然是您可能会在此磁盘上浪费大量空间,因为您无法购买足够小而不会浪费的磁盘。