From d91a823836f416dc0bdf0fe8527695d372dcb347 Mon Sep 17 00:00:00 2001 From: Mark Felder Date: Sat, 22 Apr 2023 16:14:56 +0000 Subject: [PATCH 1/3] Remove unused indexes These indexes were always listed as unused and several grow quite large. The most significant impact is the activities_visibility_index which takes many hours to rebuild when restoring the server from backup even on fast hardware. --- .../20230422154018_drop_unused_indexes.exs | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 priv/repo/migrations/20230422154018_drop_unused_indexes.exs diff --git a/priv/repo/migrations/20230422154018_drop_unused_indexes.exs b/priv/repo/migrations/20230422154018_drop_unused_indexes.exs new file mode 100644 index 000000000..f2ba6b8df --- /dev/null +++ b/priv/repo/migrations/20230422154018_drop_unused_indexes.exs @@ -0,0 +1,88 @@ +defmodule Pleroma.Repo.Migrations.DropUnusedIndexes do + use Ecto.Migration + + @disable_ddl_transaction true + @disable_migration_lock true + + def up do + drop_if_exists( + index(:activities, ["(data->>'actor')", "inserted_at desc"], name: :activities_actor_index) + ) + + drop_if_exists(index(:activities, ["(data->'to')"], name: :activities_to_index)) + + drop_if_exists(index(:activities, ["(data->'cc')"], name: :activities_cc_index)) + + drop_if_exists(index(:activities, ["(split_part(actor, '/', 3))"], name: :activities_hosts)) + + drop_if_exists( + index(:activities, ["(data->'object'->>'inReplyTo')"], name: :activities_in_reply_to) + ) + + drop_if_exists( + index(:activities, ["((data #> '{\"object\",\"likes\"}'))"], name: :activities_likes) + ) + + drop_if_exists( + index(:activities, ["activity_visibility(actor, recipients, data)", "id DESC NULLS LAST"], + name: :activities_visibility_index, + where: "data->>'type' = 'Create'" + ) + ) + end + + def down do + create_if_not_exists( + index(:activities, ["(data->>'actor')", "inserted_at desc"], + name: :activities_actor_index, + concurrently: true + ) + ) + + create_if_not_exists( + index(:activities, ["(data->'to')"], + name: :activities_to_index, + using: :gin, + concurrently: true + ) + ) + + create_if_not_exists( + index(:activities, ["(data->'cc')"], + name: :activities_cc_index, + using: :gin, + concurrently: true + ) + ) + + create_if_not_exists( + index(:activities, ["(split_part(actor, '/', 3))"], + name: :activities_hosts, + concurrently: true + ) + ) + + create_if_not_exists( + index(:activities, ["(data->'object'->>'inReplyTo')"], + name: :activities_in_reply_to, + concurrently: true + ) + ) + + create_if_not_exists( + index(:activities, ["((data #> '{\"object\",\"likes\"}'))"], + name: :activities_likes, + using: :gin, + concurrently: true + ) + ) + + create_if_not_exists( + index(:activities, ["activity_visibility(actor, recipients, data)", "id DESC NULLS LAST"], + name: :activities_visibility_index, + where: "data->>'type' = 'Create'", + concurrently: true + ) + ) + end +end From 10dfa107d5d5d3b6fa7c13eb005c4cd5b6b94661 Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Sun, 11 Jun 2023 16:22:03 +0400 Subject: [PATCH 2/3] Update changelog --- changelog.d/3874.remove | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/3874.remove diff --git a/changelog.d/3874.remove b/changelog.d/3874.remove new file mode 100644 index 000000000..a81f744bf --- /dev/null +++ b/changelog.d/3874.remove @@ -0,0 +1 @@ +Remove a few unused indexes. From 22878cf84afd3f8b844c66e99f37022318c4c55e Mon Sep 17 00:00:00 2001 From: Lain Soykaf Date: Sun, 11 Jun 2023 16:22:16 +0400 Subject: [PATCH 3/3] B Migrations: Don't remove activity_visibility_index for now. --- .../20230422154018_drop_unused_indexes.exs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/priv/repo/migrations/20230422154018_drop_unused_indexes.exs b/priv/repo/migrations/20230422154018_drop_unused_indexes.exs index f2ba6b8df..0d877a798 100644 --- a/priv/repo/migrations/20230422154018_drop_unused_indexes.exs +++ b/priv/repo/migrations/20230422154018_drop_unused_indexes.exs @@ -22,13 +22,6 @@ defmodule Pleroma.Repo.Migrations.DropUnusedIndexes do drop_if_exists( index(:activities, ["((data #> '{\"object\",\"likes\"}'))"], name: :activities_likes) ) - - drop_if_exists( - index(:activities, ["activity_visibility(actor, recipients, data)", "id DESC NULLS LAST"], - name: :activities_visibility_index, - where: "data->>'type' = 'Create'" - ) - ) end def down do @@ -76,13 +69,5 @@ defmodule Pleroma.Repo.Migrations.DropUnusedIndexes do concurrently: true ) ) - - create_if_not_exists( - index(:activities, ["activity_visibility(actor, recipients, data)", "id DESC NULLS LAST"], - name: :activities_visibility_index, - where: "data->>'type' = 'Create'", - concurrently: true - ) - ) end end