我很好奇是否有人在文件系统和数据库性能之间进行过任何实验或比较。在 Linux 上,我想知道 postgres 数据库的最佳文件系统是什么。此外,哪些设置(inode 等)最适合它?这是否会根据数据库中的数据而大不相同?
如果您正在寻找与一般文件系统/数据库性能相关的问题,这篇文章有一些很好的信息。
但是,我希望尽可能多地获得关于插入性能而不是读取性能的建议。感谢所有伟大的答案!
我很好奇是否有人在文件系统和数据库性能之间进行过任何实验或比较。在 Linux 上,我想知道 postgres 数据库的最佳文件系统是什么。此外,哪些设置(inode 等)最适合它?这是否会根据数据库中的数据而大不相同?
如果您正在寻找与一般文件系统/数据库性能相关的问题,这篇文章有一些很好的信息。
但是,我希望尽可能多地获得关于插入性能而不是读取性能的建议。感谢所有伟大的答案!
购买 Greg Smith 的“postgresql 高性能”副本。这是一本很棒的书,有两章或更多章是关于磁盘硬件和文件系统的。你会学到很多东西。
简而言之:没有简短的答案。
但我会尝试总结一下:
但是,当您真的在问自己要使用什么 FS 时,您应该阅读这本书!
首先,您首先需要一个可靠的文件系统,然后再快速。这排除了一些选择......
性能测试表明,XFS 通常提供最佳性能。一旦你达到磁盘非常接近满的情况,它就会出现一些稳定性问题,但只要你监控没有发生这种情况,它会给你带来更好的性能。
理论上,您不需要 pg_xlog 目录的日志文件系统,但速度差异通常很小,不值得。对于数据目录,您确实应该始终拥有一个元数据日志文件系统。
数据库管理系统通过数据库日志实现自己的日志,因此在日志文件系统上安装这样的 DBMS 会通过两种机制降低性能:
冗余日志增加了磁盘活动量
物理磁盘布局可能是碎片化的(尽管某些日志文件系统确实有清理这种情况的机制)。
大量磁盘活动可能会填满日志,从而导致虚假的“磁盘已满”情况。
几年前我见过一个实例,这是在 HP/UX 机器上的 Baan 安装上的 LFS 文件系统上完成的。该系统存在持续的性能和数据损坏问题,直到有人发现文件系统是用 LFS 格式化的。
保存数据库文件的卷通常会有少量的大文件。DBMS 服务器通常会有一个设置,用于配置在单个 I/O 中读取多少块。较小的数字适用于大容量事务处理系统,因为它们可以最大限度地减少冗余数据的缓存。较大的数字适用于执行大量顺序读取的数据仓库等系统。如果可能,将文件系统分配块大小调整为与 DBMS 设置的多块读取大小相同。
一些数据库管理系统可以处理原始磁盘分区。这会带来不同程度的性能提升,在具有大量内存的现代系统上通常会更少。在缓存文件系统元数据的空间较少的旧系统上,磁盘 I/O 的节省非常显着。原始分区使系统更难管理,但提供了可用的最佳性能。
RAID-5 卷比 RAID-10 卷产生更多的写入开销,因此具有大量写入流量的繁忙数据库在 RAID-10 上的性能会更好(通常要好得多)。日志应该放置在物理上独立的磁盘卷中。如果您的数据库很大并且大部分是只读的(例如数据仓库),那么如果这不会过度减慢加载过程,则可能会将其放在 RAID-5 卷上。
控制器上的回写式缓存可以为您带来性能上的胜利,但代价是创建了一些(可能不太可能但可能)导致数据损坏的故障模式。最大的性能优势在于高度随机的访问负载。如果要执行此操作,请考虑将日志放在单独的控制器上并禁用日志卷上的回写缓存。然后日志将具有更好的数据完整性,并且单个故障不能同时取出日志和数据量。这允许您从备份中恢复并从日志中前滚。
我做了这么详细的报告,但它只有法语。如果您阅读法语或对自动翻译工具感到满意...您可以重复使用该方法并自己运行它。
执行摘要:我使用了 pgbench。Linux I/O 调度器对性能的重要性很小,文件系统也只有一点点。因此,如果您赶时间,请选择默认值。我选择了 JFS。
文件系统只是问题的一部分。通过更改 IO 调度程序,您可以获得显着的性能提升。幸运的是,这很容易测试,因为您可以动态更改 IO 调度程序。我建议在典型负载下尝试每一个几天,看看哪个能提供最佳性能。
几个月前我做了一些测试:
我有一个小型测试程序,它创建了 50 个线程,其中每个线程将 1000(或者如果是 10000)行插入到同一个表中。
但是将 pg___xlog 放在软件 ramdisk 上不是一种选择:如果您丢失了 pg_xlog 目录的内容,postgres 将无法启动。(但存在可能感兴趣的带有备用电池的硬件 ramdisk。)
恕我直言:对数据库文件使用您最熟悉的文件系统。将 pg_xlog(带有符号链接,请参阅文档)移动到您拥有的最快的设备。
我记得我记得经过调整的 FreeBSD 会比其他操作系统提供更多的性能。虽然我确信这些信息已经过时并且可能首先是一个神话。但是您仍然可以尝试一下,请参阅内核设置指南:http: //developer.postgresql.org/pgdocs/postgres/kernel-resources.html