在PostgreSQL上创建GIST索引太慢

时间:2019-07-02 10:25:41

标签: postgresql indexing postgresql-9.4 gist-index

我在PostgreSQL中有一个具有以下结构的数据库:

@media(max-width: 500px) {
.logo {
    font-size: 1.5em;
  }
}

数据库包含约146.000.000条记录,包含该数据的表的大小为:

Column    |         Type          | Collation | Nullable |                    Default                     
-------------+-----------------------+-----------+----------+------------------------------------------------
 vessel_hash | integer               |           | not null | nextval('samplecol_vessel_hash_seq'::regclass)
 status      | character varying(50) |           |          | 
 station     | character varying(50) |           |          | 
 speed       | character varying(10) |           |          | 
 longitude   | numeric(12,8)         |           |          | 
 latitude    | numeric(12,8)         |           |          | 
 course      | character varying(50) |           |          | 
 heading     | character varying(50) |           |          | 
 timestamp   | character varying(50) |           |          | 
 the_geom    | geometry              |           |          | 
Check constraints:
    "enforce_dims_the_geom" CHECK (st_ndims(the_geom) = 2)
    "enforce_geotype_geom" CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL)
    "enforce_srid_the_geom" CHECK (st_srid(the_geom) = 4326)

我尝试使用以下命令在几何字段public | samplecol | table | postgres | 31 GB | 上创建GIST索引:

the_geom

但是需要太长时间。它已经运行了2个小时。

基于这个问题Slow indexing of 300GB Postgis table Ask Question,在创建索引之前,我在psql控制台中执行了

create index samplecol_the_geom_gist on samplecol using gist (the_geom);

但是创建索引花费的时间太长。有人知道为什么吗?如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

恐怕您必须将其搁置。

除了maintenance_work_mem高以外,实际上没有调整选项。 增加max_wal_size会有所帮助,因为您得到的检查点会更少。

如果您不能长时间使用ACCESS EXCLUSIVE锁,请尝试使用CREATE INDEX CONCURRENTLY,这会更慢,但不会阻止并发数据库活动。