تو نسخه ۱۹ پُستگرِس بالاخره یه قابلیت جدید و نجاتبخش به اسم WAIT FOR اضافه شد که مشکل قدیمی و رو اعصاب تاخیر رپلیکیشن (Replica Lag) رو کلاً حل میکنه.
تا پیش از این وقتی دیتا رو روی پرایمری مینوشتی و بلافاصله از رپلیکا میخوندی، به خاطر تاخیر همگامسازی، دیتای قدیمی میگرفتی و راهکارهایی مثل Sleep زدن یا روت کردن دوباره کوئری به پرایمری هم واقعاً افتضاح بودن. حالا با این دستور، Session متصل به رپلیکا رو بلاک میکنی تا زمانی که پروسه Replay شدن WAL به یه LSN مشخص برسه و دیتا کاملاً آپدیت و قابل خوندن بشه؛ این کار کلاً ۱ تا ۲ میلیثانیه اوورهِد داره.
البته چند تا نکته فنی هم داره؛ مثلاً چون این دستور نباید اسنپشات نگه داره (تا جلوی آپدیت شدن WAL گرفته نشه)، تو سطح ایزولیشن بالاتر از READ COMMITTED یا داخل فانکشنها اجرا نمیشه و پولرهایی مثل PgBouncer تو حالت Transaction Mode ممکنه سشن و کوئری رو بندازن رو کانکشنهای مختلف و کار رو خراب کنن.
جالبتر اینکه پیشنهاد این قابلیت از سال ۲۰۱۶ مطرح بوده و ۳ بار ریورت شده تا بالاخره تو پستگرس ۱۹ به ثبات رسیده.
@codehalics | کدهالیک
Post #1076
1.04K

- ❤ 2