On Sat, Jun 8, 2024 at 12:53 PM Lok P <loknath...@gmail.com> wrote:

> Hello,
> We have a few tables having size ~5TB and are partitioned on a timestamp
> column. They have ~90 partitions in them and are storing 90 days of data.
> We want to create a couple of indexes on those tables. They are getting the
> incoming transactions(mainly inserts) 24/7 , which are mostly happening on
> the current day/live partition. Its RDS postgres version 15.4. So in this
> situation
>
> Should we go with below i.e one time create index command on the table..
>
> CREATE INDEX CONCURRENTLY idx1 ON tab(column_name);
> Or
> create index on individual partitions from different sessions, say for
> example create indexes on 30 partitions each from three different sessions
> so as to finish all the 90 partitions faster?
> CREATE INDEX CONCURRENTLY idx1 ON tab_part1(column_name);
> CREATE INDEX CONCURRENTLY idx1 ON tab_part2(column_name);
> .....
> .....
>
> Basically I have three questions:
> 1)If we can do this index creation activity online without impacting the
> incoming transactions or do we have to take down time for this activity?
> 2)If we can't do it online then , what is the fastest method to do this
> index creation activity ?
> 3)Should we change the DB parameters in a certain way to make the process
> faster? We have currently set below parameters
>
> max_parallel_workers-16
> max_parallel_maintenance_workers-2
> maintenance_work_mem- 4GB
>
>
>
 You can first create the index on the table using the "On ONLY"keyword,
something as below.

CREATE INDEX idx ON ONLY tab(col1);

Then create indexes on each partition in "concurrently" from multiple
sessions in chunks.

CREATE INDEX CONCURRENTLY idx_1    ON tab_part1(col1);
CREATE INDEX CONCURRENTLY idx_2    ON tab_part2(col1);

After this step finishes the table level index which was created in the
first step will be in valid state automatically.

Reply via email to