我首先在 SSD 上创建了一个 postgres 拥有的目录,并创建了表空间,如下所示:
CREATE TABLESPACE ssd_tablespace LOCATION '/ssd/pgdata';
我继续移动重要的表及其上的所有索引(这只显示一个分区,而且我也修改了父表):
ALTER TABLE coreg_2010_a SET TABLESPACE ssd_tablespace;
ALTER INDEX coreg_2010_a_pkey SET TABLESPACE ssd_tablespace;
ALTER TABLE visits_2010_a SET TABLESPACE ssd_tablespace;
ALTER INDEX visits_2010_a_pkey SET TABLESPACE ssd_tablespace;
所有操作均成功,我确认已在 psql 中设置了表空间。移动的表之间也有外键,但这些不是可以移动的索引。
iostat
显示我正在通过正在运行的脚本对我移动的表进行操作,SSD 上有少量写入活动(虽然不多)INSERT
。但是,出于某种原因,绝大多数写入活动都在旧硬盘上(而且我只写入 ssd_tablespace 中的表)。此外,带有索引的表的总大小似乎超过了 SSD 上已用完的空间,尽管我尚未正确确认这一点。
如果插入的表(及其索引)已移动到新硬盘上的新表空间,为什么我仍然可以写入旧硬盘?
作为参考,以下是以iostat -dxk 5
5 秒为间隔显示的内容。/dev/xvde1
是旧硬盘,而/dev/xvdc1
是与 ssd_tablespace 关联的 SSD:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvde1 0.00 486.60 0.00 453.40 0.00 3760.00 16.59 0.85 1.87 1.87 84.72
xvdb1 0.00 1.20 0.00 0.80 0.00 8.00 20.00 0.00 0.00 0.00 0.00
xvdc1 0.00 26.20 0.00 11.20 0.00 149.60 26.71 0.00 0.29 0.14 0.16
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvde1 0.00 561.40 0.00 523.60 0.00 4340.00 16.58 0.86 1.65 1.65 86.40
xvdb1 0.00 1.20 0.00 0.60 0.00 7.20 24.00 0.00 0.00 0.00 0.00
xvdc1 0.00 26.20 0.00 13.20 0.00 157.60 23.88 0.02 1.21 0.06 0.08
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
xvde1 0.00 524.80 0.00 489.40 0.00 4056.00 16.58 0.85 1.72 1.73 84.56
xvdb1 0.00 1.00 0.00 2.00 0.00 12.00 12.00 0.00 1.20 0.40 0.08
xvdc1 0.00 24.60 0.00 10.80 0.00 141.60 26.22 0.00 0.07 0.07 0.08
根据要求,输出如下iostat -dx 5
:
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
xvde1 3.00 1078.20 31.40 469.00 2664.00 12379.20 30.06 1.29 2.57 1.46 73.04
xvdb1 0.00 1.00 0.00 0.60 0.00 12.80 21.33 0.00 1.33 1.33 0.08
xvdc1 0.00 7.40 0.00 5.00 0.00 99.20 19.84 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
xvde1 6.00 1067.60 32.80 425.40 2768.00 11944.00 32.11 1.37 3.00 1.53 70.16
xvdb1 0.00 1.00 0.00 0.60 0.00 12.80 21.33 0.00 0.00 0.00 0.00
xvdc1 0.00 6.80 0.00 6.00 0.00 102.40 17.07 0.00 0.00 0.00 0.00
答案1
如果您只谈论写入,那可能是因为 pg_xlog 目录中的事务日志仍在旧驱动器上。我建议将表移回常规硬盘驱动器,并将 pg_xlog 目录(即进行同步写入的目录)移至 SSD。