НейроАгент

Как уменьшить размер x-ui.db-wal на Ubuntu

Узнайте эффективные способы уменьшить размер файла x-ui.db-wal на Ubuntu 22.04. Принудительная проверка SQLite, настройка параметров и полное удаление файла WAL. Решение проблемы с 11 ГБ файла.

Вопрос

Как уменьшить размер файла x-ui.db-wal? Файл /etc/x-ui/x-ui.db-wal занимает 11 ГБ на диске объемом 30 ГБ, что кажется чрезмерно большим для базы данных с 40 клиентами. Перезагрузка сервера, остановка сервиса, обновление 3X-ui и Xray не помогли решить проблему. Как можно уменьшить размер этого файла на Ubuntu 22.04?

НейроАгент

Чтобы уменьшить размер файла x-ui.db-wal, вам нужно выполнить принудительную проверку (checkpoint) базы данных SQLite. Проблема возникает, когда файл WAL (Write-Ahead Logging) не автоматически сжимается после обработки транзакций. Вот эффективные решения для Ubuntu 22.04.

Содержание


Принудительная проверка базы данных

Самый эффективный способ уменьшить размер файла WAL — выполнить принудительную проверку базы данных. Для этого подключитесь к базе данных SQLite с помощью команды:

bash
sudo sqlite3 /etc/x-ui/x-ui.db

Внутри интерактивной оболочки SQLite выполните команду:

sql
PRAGMA wal_checkpoint(SQLITE_CHECKPOINT_TRUNCATE);

Эта команда принудительно выполняет полную проверку и усекает файл WAL до нулевого размера. Если это не сработает, попробуйте пассивную проверку:

sql
PRAGMA wal_checkpoint(PASSIVE);

Важно: После выполнения команды выйдите из SQLite с помощью .quit


Настройка параметров SQLite

Чтобы предотвратить повторный рост файла WAL, настройте параметры SQLite. Подключитесь к базе данных:

bash
sudo sqlite3 /etc/x-ui/x-ui.db

Установите ограничение размера журнала:

sql
PRAGMA journal_size_limit = 1048576; -- 1MB

Также можно настроить автоматическую проверку:

sql
PRAGMA synchronous = NORMAL;
PRAGMA cache_size = -10000; -- 10MB cache

Эти параметры помогут контролировать размер файла WAL и предотвратят его чрезмерный рост.


Полная очистка файла WAL

Если принудительная проверка не помогла, можно полностью очистить файл WAL. Для этого:

  1. Остановите сервис x-ui:
bash
sudo systemctl stop x-ui
  1. Удалите файл WAL:
bash
sudo rm /etc/x-ui/x-ui.db-wal
  1. Запустите сервис:
bash
sudo systemctl start x-ui

SQLite автоматически создаст новый файл WAL при следующей записи в базу данных. Этот метод самый радикальный, но эффективный, когда другие способы не работают.


Предотвращение повторного роста

Чтобы предотвратить повторный рост файла WAL, добавьте автоматическую проверку в cron:

bash
sudo crontab -e

Добавьте следующую строку для ежечасной проверки:

bash
0 * * * * sqlite3 /etc/x-ui/x-ui.db "PRAGMA wal_checkpoint(PASSIVE);"

Также можно создать скрипт для мониторинга размера файла WAL:

bash
#!/bin/bash
WAL_SIZE=$(du -b /etc/x-ui/x-ui.db-wal | cut -f1)
if [ $WAL_SIZE -gt 1073741824 ]; then # 1GB
    sqlite3 /etc/x-ui/x-ui.db "PRAGMA wal_checkpoint(TRUNCATE);"
fi

Сохраните этот скрипт и добавьте его в cron для периодического запуска.


Альтернативные методы

Использование vacuum

Выполните полную очистку базы данных:

bash
sudo sqlite3 /etc/x-ui/x-ui.db "VACUUM;"

Эта команда пересоздаст базу данных без свободного пространства, что также может уменьшить размер файла WAL.

Изменение режима журналирования

Если WAL режим не критичен для вашего приложения, можно временно отключить его:

bash
sudo sqlite3 /etc/x-ui/x-ui.db "PRAGMA journal_mode = DELETE;"

Это заставит SQLite использовать старый режим журналирования, который не создает отдельных WAL файлов.


Проверка результата

После выполнения процедур проверьте размер файла WAL:

bash
ls -lh /etc/x-ui/x-ui.db-wal

Убедитесь, что сервис x-ui работает корректно:

bash
sudo systemctl status x-ui

Проверьте работу панели управления x-ui, убедившись, что все данные сохраняются правильно.

Если проблема возникает регулярно, рассмотрите возможность:

  • Увеличения дискового пространства
  • Настройки автоматического резервного копирования базы данных
  • Использования базы данных на более быстром накопителе (SSD)

Источники

  1. SQLite User Forum: WAL journal file-size keeps on growing
  2. Database Administrators Stack Exchange - SQLite and Write Ahead Logging
  3. Stack Overflow - SQLITE database WAL file size keeps growing
  4. The Unterminated String - SQLite: Vacuuming the WALs
  5. Ask Ubuntu - The tracker file meta.db-wal filled my drive

Заключение

  • Размер файла x-ui.db-wal можно эффективно уменьшить с помощью принудительной проверки PRAGMA wal_checkpoint(TRUNCATE)
  • Настройка параметров SQLite (journal_size_limit, synchronous) поможет предотвратить повторный рост файла
  • При необходимости можно полностью удалить файл WAL после остановки сервиса
  • Автоматизация проверки через cron обеспечит постоянный контроль размера файла WAL
  • Регулярный мониторинг базы данных поможет及时发现 и предотвращать проблемы с размером WAL файлов

Эти методы помогут решить проблему чрезмерного размера файла WAL и обеспечить стабильную работу вашего сервера x-ui на Ubuntu 22.04.