تاحالا یه VACUUM گنده اجرا کردید که انگار هیچوقت تموم نمیشه؟بری یه چای دم کنی، برگردی، ناهار بخوری، بازم تموم نشده باشه؟یا یه CREATE INDEX که انقدر طول میکشه که یادت میره اصلاً برای چی داشتی ایندکس میساختی؟
پستگرس ۱۸ با یه قابلیت انقلابی به اسم I/O آسنکرون (AIO) اومده تا این کابوس رو تموم کنه.
مشکل چی بود؟ مدل سنکرون (کافه قدیمی)
فکر کنید تو کافه سفارش میدید و مجبورید کنار پیشخوان میخکوب شید تا قهوهتون آماده شه. هیچ کار دیگهای نمیتونید بکنید.
پستگرس قدیمی دقیقاً همینطور بود، برای هر درخواست I/O منتظر دیسک میموند، "بلاک" میشد و CPU رو هدر میداد.
راهحل چیه؟ مدل آسنکرون (کافه مدرن)
حالا فکر کنید سفارش میدید و بهتون یه پیجر میدن. میرید دنبال کاراتون و وقتی سفارشتون آماده شد، پیجر خبرتون میکنه.
پستگرس ۱۸ همینه. درخواستهاشو به دیسک میده و میره سراغ کارهای محاسباتی دیگه. اینجوری CPU و دیسک همزمان کار میکنن.
جادوی ماجرا چیه؟ io_uring
این قدرت از io_uring در لینوکس میاد. یه جور اتوبان اختصاصی بین پستگرس و کرنل.
به جای اینکه برای هر درخواست به کرنل زنگ بزنه، پستگرس یه لیست بلند از کارها رو با یک زنگ به کرنل میده. نتیجه؟ کاهش شدید بار روی CPU.
فکر کن پستگرس و کرنل یه "دفترچه یادداشت مشترک" دارن که دو تا صفحه داره:
صفحه "کارها برای انجام" (Submission Queue): پستگرس لیست درخواستهاشو (مثلاً اینو بخون، اونو بنویس) اینجا مینویسه.
صفحه "کارهای انجام شده" (Completion Queue): کرنل بعد از اینکه هر کاری رو انجام داد، میاد اینجا تیک میزنه و میگه "اینم از این".
چطور کنترلش کنیم؟
با پارامتر جدید maintenance_io_concurrency. این مثل یه وُلوم کنترله که میگه چندتا کار I/O همزمان ارسال بشن.
مقدارش رو بر اساس قدرت سختافزارتون تنظیم کنید (برای NVMe ها بالاتر و برای HDD ها پایینتر). ولی مراقب باشید، مقدار زیاد روی هارد کند، اوضاع رو بدتر میکنه.
کیا بیشترین سود رو میبرن؟
عملیاتهای سنگین مثل VACUUM, CREATE INDEX, CLUSTER, و COPY به شکل چشمگیری سریعتر میشن.
کوئریهای عادی SELECT و UPDATE فعلاً از این سیستم مستقیم استفاده نمیکنن، ولی این یه قدم اول بزرگه و احتمالاً تو نسخههای بعدی، این قابلیت همهگیرتر میشه.
مخلص کلام:
I/O آسنکرون در PG18 یه آپدیت ساده نیست؛ یه انقلاب معماریه که پستگرس رو به یه هیولای پرفورمنس برای دیتابیسهای بزرگ تبدیل میکنه.