ehs*_*nul 10 postgresql performance hard-drive iostat
我看到的奇怪且极其缓慢的 IO 模式是这样的(输出iostat -dxk 1 /dev/xvdb1):
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.99 0.99 7.92 3.96 12.00 1.96 2206.00 502.00 99.41
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 100.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 100.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.99 0.00 3.96 0.00 8.00 0.99 2220.00 1004.00 99.41
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 100.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.99 0.99 0.00 7.92 0.00 16.00 1.14 2148.00 1004.00 99.41
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.01 0.00 0.00 100.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvdb1 0.00 0.00 1.00 1.00 4.00 8.00 12.00 2.01 1874.00 502.00 100.40
Run Code Online (Sandbox Code Playgroud)
我不知道为什么磁盘利用率和等待这么高,读/写率这么低。这可能是什么原因?
被查询的表只有几个varchar列,其中之一是last_name,它是被索引的(实际上lower(last_name)是被索引的)。查询本身很简单:
SELECT * FROM consumer_m WHERE lower(last_name) = 'hoque';
Run Code Online (Sandbox Code Playgroud)
这是解释输出:
QUERY PLAN
-------------------------------------------------------------------------------------------------
Bitmap Heap Scan on consumer_m (cost=2243.90..274163.41 rows=113152 width=164)
Recheck Cond: (lower((last_name)::text) = 'hoque'::text)
-> Bitmap Index Scan on consumer_m_last_name_index (cost=0.00..2215.61 rows=113152 width=0)
Index Cond: (lower((last_name)::text) = 'hoque'::text)
Run Code Online (Sandbox Code Playgroud)
另请注意,数据库位于 auto_vacuum 上,因此未执行显式真空/分析。
事实上,您的设备/dev/xvdb1意味着您正在 Xen 下运行。你的存储是如何配置的?是否存在对底层设备的争用,以及如何iostat看待它?
除非你能尽可能地消除这种情况,否则我将指出糟糕的表现归咎于旋转的旋转器。
基本上,解决此类性能问题的总体方法是考虑可能出现瓶颈的所有层,然后设计测试以消除每一层,直到隔离问题为止。
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |