Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有TimescaleDB的PostgreSQL在索引创建期间仅使用单个核心_Sql_Postgresql_Ubuntu_Timescaledb - Fatal编程技术网

带有TimescaleDB的PostgreSQL在索引创建期间仅使用单个核心

带有TimescaleDB的PostgreSQL在索引创建期间仅使用单个核心,sql,postgresql,ubuntu,timescaledb,Sql,Postgresql,Ubuntu,Timescaledb,我们有一个有几十亿行的PostgreSQL超级表,我们正试图在其上创建一个唯一的索引,如下所示: 在public.device_数据上创建唯一索引device_数据__deviceid__value_type__时间戳__idx(device_id,value_type,“timestamp”DESC) 我们创建的超表格如下所示: 选择create_hypertable('device_data','timestamp') 由于我们希望尽可能快地创建索引,因此我们希望并行化索引创建,并遵循以下步

我们有一个有几十亿行的PostgreSQL超级表,我们正试图在其上创建一个唯一的索引,如下所示:

在public.device_数据上创建唯一索引device_数据__deviceid__value_type__时间戳__idx(device_id,value_type,“timestamp”DESC)

我们创建的超表格如下所示:

选择create_hypertable('device_data','timestamp')

由于我们希望尽可能快地创建索引,因此我们希望并行化索引创建,并遵循以下步骤

我们测试了
work\u mem
maintenance\u work\u mem
max\u worker\u进程
max\u parallel\u maintenance\u workers
max\u parallel\u workers
的各种设置。我们还在表上设置
parallel_workers
设置:
ALTER table device_数据集(parallel_workers=10)。但无论我们做什么,索引创建总是只使用一个核心(我们有16个可用),因此创建需要很长时间

你知道我们可能会错过什么吗


我们的PostgreSQL版本是12.5,服务器运行Ubuntu 18。

不幸的是,Timescale目前不支持并行索引创建。我建议提交一个Github问题,请求支持它。这是一个有点沉重的任务,可能不会很快得到优先考虑。我认为另一个可能有用的选项是在这里使用
transaction\u per\u chunk
选项,允许用户控制索引的创建方式,因此一个简单的api可以为所有将来的块创建索引,但不能在旧块上创建索引,然后允许您调用
create\u index(chunk\u name,ht\u index\u name)
在所有块上,然后您可以在自己的代码中并行化该操作。这最终是一个简单得多的提升,因为并行索引创建的事务性是最难的部分。

第二个选项是否也适用于唯一索引?我们正在使用
建立非唯一索引。。。使用(timescaledb.transaction\u/块),但据我所知,此选项不能与唯一索引一起使用。也可以在这里看到(也许是你写了这篇评论?)。你知道有没有计划支持
transaction\u per\u chunk
的唯一索引?嗯……这可能有点困难,但我可以想象,你可以构建唯一索引,然后在构建块上的所有索引后进行操作,以使其成为超表上的索引。我会在你提交的问题中包括这一点,甚至可能为此单独打开一个问题。