Roc*_*t04 1 postgresql indexing
这类似于我最近发布的一个问题,其中 COPY 命令为大型数据集挂起。在那种情况下,这是由于外键约束。但在这种情况下,我正在创建一个索引,所以我认为 FK 不会成为问题,即使我仍然禁用了表上的触发器以防万一。我试图btree index在一个有 100 亿行的表上添加一个常规。该索引位于两个int字段上。我尝试运行它并且它永远运行,所以我认为它可能太慢了,我增加到max_parallel_maintenance_workers8 和maintenance_work_mem2047MB(我在 Windows 上,所以它是最大值)。
那时,事情似乎进展得更快了,但同样的问题发生了:我可以看到文件pgsql_tmp/pgsql_tmpxxxx.x.sharedfileset夹中的文件在增长,直到它们停止但索引创建似乎从未完成。
我想知道我是否出于某种原因设置了太多工人,所以我尝试将其设置为 4,同样的问题。文件最后一次修改是在凌晨 3 点 20 分左右,现在是早上 7 点 35 分,它仍在运行。文件夹中的文件为 261GB,与表大小相比看起来差不多,每次我运行该进程时它都会以该大小停止,所以我假设它已经创建了索引,我只是不知道它可能在做什么这一点。万一重要,该表在另一个有 10 亿条记录的表上有一个外键,但表上的触发器被禁用,这对我在表中加载数据很有用。我检查了锁,没有,它不等待任何锁,这是有道理的,因为这是一个测试数据库,其中包含我为测试某些事情而创建的虚拟数据,
创建索引分几个阶段运行。必须读取表,必须对值进行排序,并且必须在磁盘上创建索引。
在某些阶段,您会看到临时文件在增长,而在其他阶段则不会,即使CREATE INDEX仍在工作。也许它此刻正在写入索引文件。
所以要有耐心,它会完成。
如果你很紧张pg_locks,看看是否CREATE INDEX被什么东西挡住了。如果它是 a CREATE INDEX CONCURRENTLY,则可能是这种情况,它做了更复杂的处理。
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |