我目前正在清理一张有两个索引、2.5亿活跃行和大约同样数量的死行(或更多)的表。我从我的客户端电脑(笔记本电脑)向服务器发出了VACUUM FULL ANALYSE命令。它已经在处理这个任务了大约3-4天左右,我想知道它是否会很快结束,因为我还有很多工作要做!
该服务器配备四核Xeon 2.66 GHz处理器、12 GB内存和一个连接到2个10K rpm 146 GB SAS硬盘的RAID控制器,以RAID 1配置运行Suse Linux操作系统。我在想...
首先,VACUUM后台进程似乎只使用了一个核心。其次,我没有看到非常高的I/O写入与I/O空闲时间比率。第三,通过调用procinfo
,我可以推断出VACUUM进程大部分时间(88%)都在等待I/O。
那么为什么它不通过线程利用更多的核心来过载RAID控制器(获得高I/O写入空闲比)?如果I/O负载不高,为什么它要等待I/O?为什么它没有利用所有这些强大的资源来加快速度?在我看来,特别是当它正在处理一个巨大的表格并且它是唯一在工作的时候,VACUUM可以和应该是多线程的。
另外,有没有办法在postgresql.conf中配置它以使其多线程执行这样的VACUUM操作?我可以杀掉它,仍然从它的部分清理中受益吗?我需要在那张表上工作。
[我使用的是PostgreSQL 8.1]
再次感谢