AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 14351
In Process
Elijah
Elijah
Asked: 2009-05-30 00:20:12 +0800 CST2009-05-30 00:20:12 +0800 CST 2009-05-30 00:20:12 +0800 CST

在 PostgreSQL 上插入性能的最佳文件系统是什么?

  • 772

我很好奇是否有人在文件系统和数据库性能之间进行过任何实验或比较。在 Linux 上,我想知道 postgres 数据库的最佳文件系统是什么。此外,哪些设置(inode 等)最适合它?这是否会根据数据库中的数据而大不相同?

如果您正在寻找与一般文件系统/数据库性能相关的问题,这篇文章有一些很好的信息。

但是,我希望尽可能多地获得关于插入性能而不是读取性能的建议。感谢所有伟大的答案!

performance filesystems database postgresql
  • 7 7 个回答
  • 20992 Views

7 个回答

  • Voted
  1. Janning
    2011-04-30T14:45:12+08:002011-04-30T14:45:12+08:00

    购买 Greg Smith 的“postgresql 高性能”副本。这是一本很棒的书,有两章或更多章是关于磁盘硬件和文件系统的。你会学到很多东西。

    简而言之:没有简短的答案。

    但我会尝试总结一下:

    • 在你知道你在做什么之前不要使用 ext2。
    • 使用 ext3 时,请注意 fsync 调用导致的检查点峰值,请参见第 113 页、第 82 页和第 79 页
    • 使用 ext4 或 xfs
    • 还有其他选择

    但是,当您真的在问自己要使用什么 FS 时,您应该阅读这本书!

    • 15
  2. Magnus Hagander
    2009-06-06T00:39:29+08:002009-06-06T00:39:29+08:00

    首先,您首先需要一个可靠的文件系统,然后再快速。这排除了一些选择......

    性能测试表明,XFS 通常提供最佳性能。一旦你达到磁盘非常接近满的情况,它就会出现一些稳定性问题,但只要你监控没有发生这种情况,它会给你带来更好的性能。

    理论上,您不需要 pg_xlog 目录的日志文件系统,但速度差异通常很小,不值得。对于数据目录,您确实应该始终拥有一个元数据日志文件系统。

    • 7
  3. ConcernedOfTunbridgeWells
    2009-05-30T01:14:57+08:002009-05-30T01:14:57+08:00

    数据库管理系统通过数据库日志实现自己的日志,因此在日志文件系统上安装这样的 DBMS 会通过两种机制降低性能:

    1. 冗余日志增加了磁盘活动量

    2. 物理磁盘布局可能是碎片化的(尽管某些日志文件系统确实有清理这种情况的机制)。

    3. 大量磁盘活动可能会填满日志,从而导致虚假的“磁盘已满”情况。

    几年前我见过一个实例,这是在 HP/UX 机器上的 Baan 安装上的 LFS 文件系统上完成的。该系统存在持续的性能和数据损坏问题,直到有人发现文件系统是用 LFS 格式化的。

    保存数据库文件的卷通常会有少量的大文件。DBMS 服务器通常会有一个设置,用于配置在单个 I/O 中读取多少块。较小的数字适用于大容量事务处理系统,因为它们可以最大限度地减少冗余数据的缓存。较大的数字适用于执行大量顺序读取的数据仓库等系统。如果可能,将文件系统分配块大小调整为与 DBMS 设置的多块读取大小相同。

    一些数据库管理系统可以处理原始磁盘分区。这会带来不同程度的性能提升,在具有大量内存的现代系统上通常会更少。在缓存文件系统元数据的空间较少的旧系统上,磁盘 I/O 的节省非常显着。原始分区使系统更难管理,但提供了可用的最佳性能。

    RAID-5 卷比 RAID-10 卷产生更多的写入开销,因此具有大量写入流量的繁忙数据库在 RAID-10 上的性能会更好(通常要好得多)。日志应该放置在物理上独立的磁盘卷中。如果您的数据库很大并且大部分是只读的(例如数据仓库),那么如果这不会过度减慢加载过程,则可能会将其放在 RAID-5 卷上。

    控制器上的回写式缓存可以为您带来性能上的胜利,但代价是创建了一些(可能不太可能但可能)导致数据损坏的故障模式。最大的性能优势在于高度随机的访问负载。如果要执行此操作,请考虑将日志放在单独的控制器上并禁用日志卷上的回写缓存。然后日志将具有更好的数据完整性,并且单个故障不能同时取出日志和数据量。这允许您从备份中恢复并从日志中前滚。

    • 4
  4. bortzmeyer
    2009-06-10T01:16:13+08:002009-06-10T01:16:13+08:00

    我做了这么详细的报告,但它只有法语。如果您阅读法语或对自动翻译工具感到满意...您可以重复使用该方法并自己运行它。

    执行摘要:我使用了 pgbench。Linux I/O 调度器对性能的重要性很小,文件系统也只有一点点。因此,如果您赶时间,请选择默认值。我选择了 JFS。

    • 4
  5. David Pashley
    2009-06-06T00:46:11+08:002009-06-06T00:46:11+08:00

    文件系统只是问题的一部分。通过更改 IO 调度程序,您可以获得显着的性能提升。幸运的是,这很容易测试,因为您可以动态更改 IO 调度程序。我建议在典型负载下尝试每一个几天,看看哪个能提供最佳性能。

    • 3
  6. some
    2009-06-15T19:02:44+08:002009-06-15T19:02:44+08:00

    几个月前我做了一些测试:

    我有一个小型测试程序,它创建了 50 个线程,其中每个线程将 1000(或者如果是 10000)行插入到同一个表中。

    • 使用 EXT3 上的数据库和 4 磁盘 RAID5 需要 50 秒。
    • 使用 ramdisk 上的表(使用表空间)仍然需要 50 秒。它没有更快的原因是所有内容都记录在 pg_xlog 目录中,该目录仍然在同一个 RAID 5 上。
    • 我将 pg_xlog 移动到 4 磁盘 RAID0(条带),并且相同的程序在 40 秒内运行。
    • 出于测试目的,我将 pg_xlog 移至 ramdisk 并将其他所有内容放在 EXT3 4 磁盘 RAID 上。该程序在不到 5 秒后完成。

    但是将 pg___xlog 放在软件 ramdisk 上不是一种选择:如果您丢失了 pg_xlog 目录的内容,postgres 将无法启动。(但存在可能感兴趣的带有备用电池的硬件 ramdisk。)

    恕我直言:对数据库文件使用您最熟悉的文件系统。将 pg_xlog(带有符号链接,请参阅文档)移动到您拥有的最快的设备。

    • 2
  7. Martin P. Hellwig
    2009-06-06T01:38:32+08:002009-06-06T01:38:32+08:00

    我记得我记得经过调整的 FreeBSD 会比其他操作系统提供更多的性能。虽然我确信这些信息已经过时并且可能首先是一个神话。但是您仍然可以尝试一下,请参阅内核设置指南:http: //developer.postgresql.org/pgdocs/postgres/kernel-resources.html

    • 0

相关问题

  • 关于 ext4 的 FUD 是否合理?或者在某些生产系统中使用是否安全?

  • IIS 6.0 (Windows Server 2003) 上的 HTTP 压缩

  • ZFS 与 XFS

  • 上线的第一天:如何不杀死您的网站

  • IIS 优化

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve