在Centos 5.5上使用简单的PostgreSQL 8.4.4查询极慢的IO

Modified on: Thu, 22 Aug 2019 02:00:02 +0800

我看到的奇怪且极其缓慢的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

我不知道为什么磁盘利用率和等待率如此之高,读/写速率如此之低。这可能是什么原因?

正在查询的表只有几个varchar列,其中一个是last_name,它被索引(实际上lower(last_name)被索引)。查询本身很简单:

SELECT * FROM consumer_m WHERE lower(last_name) = 'hoque';

这是解释输出:

                                           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)

另请注意,数据库位于auto_vacuum上,因此未执行显式真空/分析。

作者:,ehsanul

最佳答案

您的设备是/dev/xvdb1的事实意味着您在Xen下运行。您的存储配置如何?是否存在对底层设备的争用,以及iostat如何在上查看

除非你可以尽可能地消除这种可能性,否则我就会指出性能不佳的旋转式旋转器。

基本上,解决像这样的性能问题的整体方法是考虑可能发生瓶颈的所有层,然后设计测试以消除每个层,直到你找出问题为止。

作者:,mattdm

相关问答

添加新评论