Как уменьшить размер файла 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.
Содержание
- Принудительная проверка базы данных
- Настройка параметров SQLite
- Полная очистка файла WAL
- Предотвращение повторного роста
- Альтернативные методы
- Проверка результата
Принудительная проверка базы данных
Самый эффективный способ уменьшить размер файла WAL — выполнить принудительную проверку базы данных. Для этого подключитесь к базе данных SQLite с помощью команды:
sudo sqlite3 /etc/x-ui/x-ui.db
Внутри интерактивной оболочки SQLite выполните команду:
PRAGMA wal_checkpoint(SQLITE_CHECKPOINT_TRUNCATE);
Эта команда принудительно выполняет полную проверку и усекает файл WAL до нулевого размера. Если это не сработает, попробуйте пассивную проверку:
PRAGMA wal_checkpoint(PASSIVE);
Важно: После выполнения команды выйдите из SQLite с помощью
.quit
Настройка параметров SQLite
Чтобы предотвратить повторный рост файла WAL, настройте параметры SQLite. Подключитесь к базе данных:
sudo sqlite3 /etc/x-ui/x-ui.db
Установите ограничение размера журнала:
PRAGMA journal_size_limit = 1048576; -- 1MB
Также можно настроить автоматическую проверку:
PRAGMA synchronous = NORMAL;
PRAGMA cache_size = -10000; -- 10MB cache
Эти параметры помогут контролировать размер файла WAL и предотвратят его чрезмерный рост.
Полная очистка файла WAL
Если принудительная проверка не помогла, можно полностью очистить файл WAL. Для этого:
- Остановите сервис x-ui:
sudo systemctl stop x-ui
- Удалите файл WAL:
sudo rm /etc/x-ui/x-ui.db-wal
- Запустите сервис:
sudo systemctl start x-ui
SQLite автоматически создаст новый файл WAL при следующей записи в базу данных. Этот метод самый радикальный, но эффективный, когда другие способы не работают.
Предотвращение повторного роста
Чтобы предотвратить повторный рост файла WAL, добавьте автоматическую проверку в cron:
sudo crontab -e
Добавьте следующую строку для ежечасной проверки:
0 * * * * sqlite3 /etc/x-ui/x-ui.db "PRAGMA wal_checkpoint(PASSIVE);"
Также можно создать скрипт для мониторинга размера файла WAL:
#!/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
Выполните полную очистку базы данных:
sudo sqlite3 /etc/x-ui/x-ui.db "VACUUM;"
Эта команда пересоздаст базу данных без свободного пространства, что также может уменьшить размер файла WAL.
Изменение режима журналирования
Если WAL режим не критичен для вашего приложения, можно временно отключить его:
sudo sqlite3 /etc/x-ui/x-ui.db "PRAGMA journal_mode = DELETE;"
Это заставит SQLite использовать старый режим журналирования, который не создает отдельных WAL файлов.
Проверка результата
После выполнения процедур проверьте размер файла WAL:
ls -lh /etc/x-ui/x-ui.db-wal
Убедитесь, что сервис x-ui работает корректно:
sudo systemctl status x-ui
Проверьте работу панели управления x-ui, убедившись, что все данные сохраняются правильно.
Если проблема возникает регулярно, рассмотрите возможность:
- Увеличения дискового пространства
- Настройки автоматического резервного копирования базы данных
- Использования базы данных на более быстром накопителе (SSD)
Источники
- SQLite User Forum: WAL journal file-size keeps on growing
- Database Administrators Stack Exchange - SQLite and Write Ahead Logging
- Stack Overflow - SQLITE database WAL file size keeps growing
- The Unterminated String - SQLite: Vacuuming the WALs
- 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.