Vacuum - це пакет для моніторингу PostgreSQL у Laravel-застосунках, створений Rati Rukhadze. Пакет зчитує статистику, яку PostgreSQL уже збирає у вбудованих view таких як pg_stat_user_tables, pg_stat_activity та pg_stat_statements, після чого складає список виявлених проблем разом із SQL-командами для їх виправлення.
Основні можливості
Vacuum пропонує широкий набір інструментів для моніторингу та аналізу бази даних:
- 13 правил-радників (advisor rules): виявлення wraparound, bloat, dead tuples, невикористовуваних індексів, повільних запитів та інших проблем
- Health score: оцінка здоров'я бази даних за 100-бальною шкалою на основі виявлених проблем
- Підтримка Blade та Filament: готова панель за адресою
/vacuum або плагін для Filament 4 чи 5
- Команда
vacuum:check: може провалити білд у CI/CD при виявленні критичних проблем
- Команда
vacuum:lint: виявляє проблеми зі схемою бази даних, такі як непроіндексовані зовнішні ключі
- Історія: відстеження трендів та прогнозування на основі запланованих знімків (snapshots)
- Уроки (Lessons): 13 пояснень щодо PostgreSQL, які використовують ваші власні таблиці як приклади
- І багато іншого
Dashboard та правила аналізу
Кожна виявлена проблема має рівень серйозності (severity) та оцінку (grade), що в сукупності формує загальний health score із 100 балів.
Детальніше про правила можна дізнатися з readme пакета. Окрім того, пакет надає ендпоінт /learn, який пояснює, чому певні проблеми існують у вашій базі даних, використовуючи ваші власні таблиці як робочі приклади - наприклад, для пояснення N+1 запитів.
Робота з термінала
Ті самі правила можна запускати через командний рядок:
php artisan vacuum:check
php artisan vacuum:check --fail-on=warning # critical, warning, info, or never
php artisan vacuum:check --format=json # score, grade, deductions, findings
Використовуючи заплановану задачу (scheduled job) на staging-оточенні, ви можете налаштувати провал білду, коли freeze age таблиці перевищить критичний поріг. Кожне правило зчитує свої ліміти з конфігураційного файлу config/vacuum.php, зокрема dead_tuple_ratio (0.20) та slow_query_milliseconds (500).
Встановлення
Vacuum версії 1.2.0 вимагає PostgreSQL 14 та Laravel 11+. Розширення pg_stat_statements є опціональним - без нього dashboard просто повідомить про відсутність розширення.
composer require heyosseus/vacuum
php artisan vacuum:install
Налаштування доступу
За замовчуванням dashboard доступний лише в local-оточенні. Щоб відкрити доступ в інших середовищах, можна використати callback через метод Vacuum::auth():
use Heyosseus\Vacuum\Vacuum;
Vacuum::auth(fn (Request $request) => $request->user()?->isAdmin() === true);
Дізнатися більше про пакет, отримати повні інструкції зі встановлення та переглянути вихідний код можна на GitHub.