হ্যাঁ, করে — PgBouncer ছাড়া। প্রতিটা user-এর জন্য আলাদা OS process তৈরি হয়, RAM শেষ হয়, server পড়ে যায়।
রহিম-করিম-জাবের-হাচান — সবাই একসাথে আসলে কী হয়? Animation দেখো।
রহিম যখন database-এ connect করে, PostgreSQL তার জন্য একটা আলাদা OS process তৈরি করে। এই process-এর নিজের RAM, নিজের CPU time লাগে।
১০০০ × ৭MB = ৭ GB RAM শুধু connections-এ! PostgreSQL এই ধাক্কায় crash করে। বাকি app-এর জন্য RAM নেই।
App মনে করে সরাসরি PostgreSQL-এ connect করছে। কিন্তু আসলে PgBouncer-এ। Connection reuse হয়।
৫টা connection — রহিম, করিম, জাবের, হাচান সবাই served। নতুন connection বানানো হয়নি!
প্রতিটা Lambda function invocation = নতুন DB connection। ১০০০ simultaneous request = ১০০০ connections। PostgreSQL crash করে।
১০০০ Lambda function → সবাই PgBouncer-এর pool share করে → DB মাত্র ২০টা connection দেখে → শান্তিতে কাজ করে।
Transaction mode-এ server-side prepared statements সমস্যা করে। Prisma-তে ?pgbouncer=true দিতে হবে।
PostgreSQL-এর max_connections-এর বেশি pool_size দিলে connection refused। সবসময় DB limit-এর নিচে রাখো।
Transaction mode-এ দীর্ঘ transaction connection ধরে রাখে। Queue জমে যায়। query_wait_timeout সেট করো।
Transaction mode-এ SET LOCAL পরবর্তী user-এ leak হতে পারে। Careful!