Browse Source

Merge branch 'mix/database-vacuum-options' into 'develop'

Database vacuum mix task

See merge request pleroma/pleroma!2599
1570-levenshtein-distance-user-search
feld 4 years ago
parent
commit
81db758e8e
3 changed files with 75 additions and 14 deletions
  1. +29
    -0
      docs/administration/CLI_tasks/database.md
  2. +9
    -14
      lib/mix/tasks/pleroma/database.ex
  3. +37
    -0
      lib/pleroma/maintenance.ex

+ 29
- 0
docs/administration/CLI_tasks/database.md View File

@@ -69,3 +69,32 @@ mix pleroma.database update_users_following_followers_counts
```sh tab="From Source"
mix pleroma.database fix_likes_collections
```

## Vacuum the database

### Analyze

Running an `analyze` vacuum job can improve performance by updating statistics used by the query planner. **It is safe to cancel this.**

```sh tab="OTP"
./bin/pleroma_ctl database vacuum analyze
```

```sh tab="From Source"
mix pleroma.database vacuum analyze
```

### Full

Running a `full` vacuum job rebuilds your entire database by reading all of the data and rewriting it into smaller
and more compact files with an optimized layout. This process will take a long time and use additional disk space as
it builds the files side-by-side the existing database files. It can make your database faster and use less disk space,
but should only be run if necessary. **It is safe to cancel this.**

```sh tab="OTP"
./bin/pleroma_ctl database vacuum full
```

```sh tab="From Source"
mix pleroma.database vacuum full
```

+ 9
- 14
lib/mix/tasks/pleroma/database.ex View File

@@ -4,6 +4,7 @@

defmodule Mix.Tasks.Pleroma.Database do
alias Pleroma.Conversation
alias Pleroma.Maintenance
alias Pleroma.Object
alias Pleroma.Repo
alias Pleroma.User
@@ -34,13 +35,7 @@ defmodule Mix.Tasks.Pleroma.Database do
)

if Keyword.get(options, :vacuum) do
Logger.info("Runnning VACUUM FULL")

Repo.query!(
"vacuum full;",
[],
timeout: :infinity
)
Maintenance.vacuum("full")
end
end

@@ -94,13 +89,7 @@ defmodule Mix.Tasks.Pleroma.Database do
|> Repo.delete_all(timeout: :infinity)

if Keyword.get(options, :vacuum) do
Logger.info("Runnning VACUUM FULL")

Repo.query!(
"vacuum full;",
[],
timeout: :infinity
)
Maintenance.vacuum("full")
end
end

@@ -135,4 +124,10 @@ defmodule Mix.Tasks.Pleroma.Database do
end)
|> Stream.run()
end

def run(["vacuum", args]) do
start_pleroma()

Maintenance.vacuum(args)
end
end

+ 37
- 0
lib/pleroma/maintenance.ex View File

@@ -0,0 +1,37 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Maintenance do
alias Pleroma.Repo
require Logger

def vacuum(args) do
case args do
"analyze" ->
Logger.info("Runnning VACUUM ANALYZE.")

Repo.query!(
"vacuum analyze;",
[],
timeout: :infinity
)

"full" ->
Logger.info("Runnning VACUUM FULL.")

Logger.warn(
"Re-packing your entire database may take a while and will consume extra disk space during the process."
)

Repo.query!(
"vacuum full;",
[],
timeout: :infinity
)

_ ->
Logger.error("Error: invalid vacuum argument.")
end
end
end

Loading…
Cancel
Save