Nie*_*ian 6 postgresql central-processing-unit io performance-tuning
我目前真的在为一个性能问题而苦苦挣扎,当我的数据库服务器处于“重”负载时,我所有的数据库查询比平时多花费 1000 倍。
我有一台运行 ubuntu 12.04 并托管我的 postgresql 9.2 数据库的服务器。服务器在 Hetzner.de 上,它是 EX6s(8 核氙气,32Gb ram 和两个 3T HDD,在使用 ubuntus 软件 raid 的 RAID1 设置中)。当我运行大量查询(我经常在晚上完成)时,我发现几乎所有 CPU 使用量都花在了 CPU I/O 等待上。我安装了新的遗物监控,我似乎找不到任何其他迹象表明可能是这种 CPU I/O 等待的根本原因,这显然是我的性能和吞吐量的瓶颈。
所以问题是,这个 CPU I/O 等待是什么,它在等待什么?
我添加了所有我可以从下面的新遗物中获得的概览图表。我在看什么?一定有明显的瓶颈吧?我应该在哪里潜水?
数据库服务器 CPU 使用率 - 告诉我有问题的邪恶者 https://rpm.newrelic.com/public/charts/cEdIvvoQZCr
数据库服务器平均负载 https://rpm.newrelic.com/public/charts/cMNdrYW51QJ
数据库服务器物理内存 https://rpm.newrelic.com/public/charts/c3dZBntNpa1
数据库服务器磁盘 I/O 使用 - 如您所见,磁盘似乎没有被充分利用(几乎没有) https://rpm.newrelic.com/public/charts/9YEVw6RekFG
数据库服务器网络 I/O (Mb/s) - 该网络是一个千兆内部网络,所有通信都在其上进行。 https://rpm.newrelic.com/public/charts/lKiZ0Szmwe7
按挂钟时间排名前 5 位的数据库操作 https://rpm.newrelic.com/public/charts/dCt45YH12FK
数据库吞吐量 https://rpm.newrelic.com/public/charts/bIbtQ1mDzMI
数据库响应时间 https://rpm.newrelic.com/public/charts/fPcNL8WA6xx
更新:
做完之后,sudo iostat -k 1
我开始怀疑了。我得到了很多这样的输出,这是我在 NR 中看不到的:
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.00 0.00 0.00 0 0
sdb 0.00 0.00 0.00 0 0
sdc 546.00 2296.00 6808.00 2296 6808
sdd 593.00 1040.00 7416.00 1040 7416
md1 0.00 0.00 0.00 0 0
md0 0.00 0.00 0.00 0 0
md2 1398.00 3328.00 13064.00 3328 13064
md3 0.00 0.00 0.00 0 0
Run Code Online (Sandbox Code Playgroud)
简而言之,您需要更快的磁盘。
当进程处于 iowait 时,这意味着它们已经发出 IO 请求,并且正在等待该请求的结果。有了足够的 RAM,您的大部分工作集将被缓存在 RAM 中,因此,读取不会对这种 IO 争用产生很大影响,因此写入通常是罪魁祸首。
关于您的磁盘 IO 图,我怀疑 New Relic 出于某种原因没有正确收集 IO 指标。我建议可能研究像 Munin 这样的辅助数据收集系统。除此之外,您可以通过发出以下命令实时查看磁盘 IO:
$ iostat -k 1
Run Code Online (Sandbox Code Playgroud)
这将输出实时磁盘读取和写入,以 kbps 为单位。我怀疑你会在那里看到很多 New Relic 没有看到的活动。
归档时间: |
|
查看次数: |
7535 次 |
最近记录: |