【问题标题】:PostgreSQL VACUUM/CLUSTER/UPDATE disk at 100% but only 5MB/secPostgreSQL VACUUM/CLUSTER/UPDATE 磁盘 100% 但只有 5MB/秒
【发布时间】:2015-06-09 18:02:45
【问题描述】:

我遇到了一个非常奇怪的PostgreSQL 9.4 行为。当它在一张大桌子上运行UPDATE,或对一张大桌子执行VACUUMCLUSTER 时,它似乎会挂起很长时间。事实上,我只是在第二天结束了这个过程。奇怪的是 CPU 处于空闲状态,同时磁盘活动处于 100%它只报告 4-5 MB/秒的读取和写入(参见 nmap 和 @ 的屏幕截图987654328@).

我的服务器是 24CPU、32GB RAM 和 RAID1 (2 SAS 15K x 2)。通常,当磁盘利用率为 100% 时,它可以提供 120-160 MB/s 的组合读/写,这几乎可以无限期地保持在 >100MB/秒的持续 IO。

系统变得非常缓慢甚至终端命令行。我猜它与共享内存和虚拟内存有关。发生这种情况时,PostgreSQL 会消耗配置的最大共享内存。

我已禁用交换 vm.swappiness=0。我没有玩过vm.dirty_ratiovm.dirty_background_ratio 等。系统大页面被禁用vm.nr_hugepages=0

以下是我的postgresql.conf 设置:

shared_buffers = 8200MB
temp_buffers = 12MB
work_mem = 32MB
maintenance_work_mem = 128MB
#-----------------------------------------------------
synchronous_commit = off
wal_sync_method = fdatasync
checkpoint_segments = 32
checkpoint_completion_target = 0.9
#-----------------------------------------------------
random_page_cost = 3.2      # RAIDed disk
effective_cache_size = 20000MB  # 32GB RAM
geqo_effort = 10
#-----------------------------------------------------
autovacuum_max_workers = 4
autovacuum_naptime = 45s
autovacuum_vacuum_scale_factor = 0.16
autovacuum_analyze_scale_factor = 0.08

磁盘速度只有 5MB/秒,怎么能达到 100%?即使是最费力的随机读/写例程也应该快一个数量级。它一定与 PostgreSQL 处理映射/共享内存的方式有关。 postgres 9.1 也没有发生这种情况。

我正在尝试自学磁盘/内存行为,但此时我需要专业人士的帮助。

【问题讨论】:

  • 我们有一个similar problem perf top 告诉你什么? (请注意,由 Vacuumd 完成的随机 I/O 可能比顺序 I/O 慢几个数量级。将 1 字节写入 1000 个文件意味着 100% 的磁盘使用率和非常低的传输率。)

标签: linux postgresql ubuntu ubuntu-14.04 postgresql-9.4


【解决方案1】:

经过长时间的调查,我发现磁盘饱和与低读/写速度和IOPS 数字之间存在相关性。 IOPS的数量越大,IO饱和带宽越低。我的问题中的一个屏幕截图有“Transfers/sec”。当数字变高时,传输率会下降。

不幸的是,在数据库配置方面没有什么可以做的。 PostgreSQL 严重依赖共享内存映射文件到内存页。当需要将一些/所有内存页面同步回磁盘时,它可能有数万/数十万个脏页要同步用于具有大表的数据库。它会导致大量的随机磁盘访问和大量的小原子 IO。

由于在我的情况下安装SSD 和启用writeback 都不是一个选项,因此我不得不从不同的角度解决问题。我分别处理了每个案例。

我的UPDATE 语句每次运行时都会影响一半以上的或表记录。我每次都重新创建表,而不是进行更新。这几乎使性能翻了一番。

CLUSTER-ing 表会导致重建所有表索引,但执行集群的索引除外。对于具有许多索引的大型表,这是在执行集群时要牢记的重要考虑因素。

我还将VACUUM 替换为ANALYSE,这似乎对表性能影响不大,但运行速度明显快于VACUUM

【讨论】:

    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2020-07-31
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多