Vacuum؛ سلامت پستگرس رو از توی لاراول ببین
خلاصهٔ کاملتر
به نوشتهٔ لاراولنیوز، Vacuum یه پکیج مانیتورینگ PostgreSQL برای لاراوله، ساختهٔ Rati Rukhadze. کاری که میکنه سادهست: پستگرس خودش یه عالمه آمار دربارهٔ خودش نگه میداره توی ویوهایی مثل pg_stat_user_tables، pg_stat_activity و pg_stat_statements (یعنی جدولهای آمادهای که دیتابیس مدام پرشون میکنه). Vacuum همینا رو میخونه، مشکلها رو درمیاره و کنار هر کدوم دستور SQL رفعش رو میذاره.
۱۳ تا قانون advisor داره: wraparound، bloat، ردیفهای مرده، ایندکسهای بیاستفاده، کوئریهای کند و چندتای دیگه. هر یافته یه شدت و یه درجه داره و از مجموعشون یه نمرهٔ سلامت از ۱۰۰ درمیاد. داشبوردش روی مسیر /vacuum بالا میاد؛ هم نسخهٔ Blade داره، هم پلاگین Filament 4 و 5.
همین قانونها از ترمینال هم اجرا میشن، که برای CI به درد میخوره:
php artisan vacuum:check --fail-on=warning
php artisan vacuum:lintاولی روی یافتههای بحرانی بیلد رو رد میکنه و آستانهش رو با --fail-on میشه روی critical، warning، info یا never گذاشت؛ با --format=json هم نمره و درجه و یافتهها رو ساختیافته میده. دومی مشکلهای اسکیما مثل کلید خارجی بدون ایندکس رو تو CI علامت میزنه.
حد و مرز هر قانون از config/vacuum.php خونده میشه، مثلاً dead_tuple_ratio با پیشفرض 0.20 و slow_query_milliseconds با پیشفرض 500. نسخهٔ 1.2.0 پستگرس 14 و لاراول 11 به بالا میخواد. اکستنشن pg_stat_statements اختیاریه و اگه نصب نباشه خود داشبورد تذکرش رو میده. داشبورد هم فقط تو محیط local باز میشه و برای بقیهٔ محیطها باید با متد Vacuum::auth() یه callback بنویسی.
یه بخش /learn هم داره با ۱۳ تا توضیح دربارهٔ پستگرس که بهجای مثال فرضی، از جدولهای خود پروژهت استفاده میکنه، مثلاً برای کوئریهای N+1. کنارش History هست که از اسنپشاتهای زمانبندیشده روند و پیشبینی درمیاره.
نکات کلیدی:
- ۱۳ قانون advisor: wraparound، bloat، dead tuples، ایندکس بیاستفاده و کوئری کند
- نمرهٔ سلامت از ۱۰۰ بر اساس شدت و درجهٔ یافتهها
- دستور vacuum:check با --fail-on بیلد رو روی یافتهٔ بحرانی رد میکنه
- دستور vacuum:lint کلید خارجی بدون ایندکس و مشکلهای اسکیما رو تو CI میگیره
- نسخهٔ 1.2.0 نیازمند PostgreSQL 14 و Laravel 11+ ـه
- پیشفرضهای config/vacuum.php: dead_tuple_ratio روی 0.20 و slow_query_milliseconds روی 500




