为什么 GCP 持久 SSD 磁盘这么慢?

为什么 GCP 持久 SSD 磁盘这么慢?

我在自定义虚拟机 us-central1 上有 500GB SSD 持久磁盘(4 个 vCPU,18 GB 内存)

它用于 PostgreSQL 10。(由于某些原因,Cloud SQL 无法使用:没有合理的停机时间就无法进行迁移,等等)

在此处输入图片描述

GCP 承诺该磁盘的 IOPS 为 15k,但实际上只有 5k。postgres 进程卡在 IOWait 状态(最高 50%)

在此处输入图片描述 在此处输入图片描述

一些细节:Spikes 是在应用服务器(而不是数据库服务器)上运行的数据处理作业,它通过主键从 postgresql 请求大量数据。

GCP 磁盘有什么问题,为什么 SSD 磁盘这么慢?

iostat 10

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          13.06    0.00   10.84   37.13    0.00   38.97

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          0          0
sda               5.00        27.20        24.00        272        240
sdb            5310.90     41790.00       883.60     417900       8836

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          13.46    0.00   10.83   35.85    0.00   39.86

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
loop0             0.00         0.00         0.00          0          0
sda               5.00         0.80        34.00          8        340
sdb            4962.40     38276.00      1578.40     382760      15784

在此处输入图片描述

更新型多巴胺:升级虚拟机,但没有成功: 在此处输入图片描述

答案1

替代理论:瓶颈不是磁盘。

iowait 是数据库在负载下的一个常见状态,即使是 SSD 也比 DRAM 慢。但是,顶部输出还显示了大量空闲周期和休眠进程。对于纯粹受磁盘限制的问题,这种情况比我预期的要多。

独立于 DBMS 找到磁盘的限制。使用fio类似实例上的合成 IO 生成器尝试 15k IOPS。如果可以实现宣传的性能,则瓶颈在其他地方。

研究数据库性能分析工具来更深入地了解正在发生什么以及正在等待什么。查询计划分析将显示它正在尝试做什么。收集统计数据将准确地告诉后端正在等待什么,并且可以显示在很好的可视化。等待客户端或锁或其他东西可能会将吞吐量限制在磁盘理论承载能力以下。

答案2

我在 us-central1-a 创建了一个虚拟机,具有自定义配置(4 个 vCPU,18 GB 内存)和 500gb SSD,并运行菲奥并发现iops=14995我同意@约翰·马霍瓦尔德 不是磁盘限制了 iops

相关内容