我很好奇,是否有人在文件系统和数据库性能之间进行了任何实验或比较。在Linux上,我想知道什么是postgres数据库的最佳文件系统。另外,什么设置(inode等)最适合呢?根据数据库中的数据,这可能会大不相同吗?
如果您正在寻找与一般文件系统/数据库性能有关的问题,则此帖子有一些不错的信息。
但是,我想获得有关插入性能而不是读取性能的尽可能多的建议。感谢您提供的所有出色答案!
我很好奇,是否有人在文件系统和数据库性能之间进行了任何实验或比较。在Linux上,我想知道什么是postgres数据库的最佳文件系统。另外,什么设置(inode等)最适合呢?根据数据库中的数据,这可能会大不相同吗?
如果您正在寻找与一般文件系统/数据库性能有关的问题,则此帖子有一些不错的信息。
但是,我想获得有关插入性能而不是读取性能的尽可能多的建议。感谢您提供的所有出色答案!
Answers:
购买Greg Smith的“ postgresql high performance”副本。这是一本很棒的书,有两个或两个以上的章节是关于磁盘硬件和文件系统的。您将学到很多东西。
简而言之:没有简短的答案。
但我会尝试总结一下:
但是,当您真正问自己要使用什么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将不会启动。(但是,可能会感兴趣的是带有电池备份的硬件虚拟磁盘。)
恕我直言:使用最适合数据库文件的文件系统。将pg_xlog(带有符号链接,请参阅文档)移动到最快的设备上。
我曾经记得,与其他操作系统相比,经过调整的FreeBSD将为您提供更多的性能。尽管我确信此信息已经过时,并且可能首先是一个神话。但是您仍然可以尝试一下,请参阅以下内核设置指南:http : //developer.postgresql.org/pgdocs/postgres/kernel-resources.html