حمزه قائم پناه
حمزه قائم پناه
خواندن ۲ دقیقه·۲ سال پیش

ارور too many connection دیتابیس و راهکار connection pooling

به طور پیش‌فرض، PostgreSQL یک تعداد محدود کانکشن هر نقش در یک زمان می‌تونن ایجاد کنن، بعلاوه اینکه یک محدودیت کلی در حداکثر تعداد کانکشن‌هایی که می‌تونن به دیتابیس متصل بشن وجود داره.

فاکتورهای متفاوتی می‌تونن موجب ارور too many connection بشن، از جمله:

  • ترافیک خیلی زیاد از درخواست‌ها به سرور
  • کوئری ناکارآمد که کانکشن دیتابیس رو برای مدت زمان زیادی مشغول می‌کنه
  • باز رها کردن کانکشن‌های غیرفعال بدون بستن‌شون

راهکارها:

  • افزایش حداکثر تعداد کانکشن در تنظیمات
  • بهبود عملکرد برنامه برای مدیریت بهتر کانکشن‌ها با اجتناب از باز موندن طولانی مدت کانکشن و بستن کانکشن‌ها

Connection Pooling:

کانکشن پولینگ شامل استفاده مجدد از کانکشن‌های موجود دیتابیس بجای ایجاد کانکشن جدید به ازای هر ریکوئسته، که موجب کاهش تعداد کانکشن‌های مورد نیاز میشه.

زمانی که از کانکشن پولینگ استفاده می‌کنیم، یک استخر از کانکشن‌ها ایجاد و نگهداری میشه، و درخواست کانکشن جدید، با اختصاص یک کانکشن موجود در استخر بجای ایجاد کانکشن جدید هندل میشه.

توجه داشته باشین که افزایش بیش از حد pool size می‌تونه، منابع سرور دیتابیس شما رو تحت فشار قرار بده و باعث کاهش عملکردش بشه.

گام‌های راه‌اندازی در node.js:

۱- تنظیم دیتابیس برای استفاده از کانکشن پولینگ:

نصب کانکشن پولر‌هایی مثل pbBouncer و pgpool-II. تنظیم کانفیگ‌ها شامل حداکثر تعداد کانکشن، تایم‌اوت و تنظیمات لاگ‌گیری.

تنظیم دیتابیس PostgreSQL برای پذیرش کانکشن‌ها از کانکشن پولر. معمولا شامل ویرایش فایل pg_hba.conf میشه که ip آدرس کانکشن پولر یا hostname اش و روش اعتبارسنجی رو مشخص می‌کنیم.

و در نهایت، رستارت دیتابیس و کانکشن پولر برای فعال کردن تغییرات.

۲- نصب ماژول‌های مورد نیاز پروژه node.js:

npm install pg npm install typeorm pg-pool

۳- افزودن تنظیمات کانکشن پول به انتهای تنظیمات دیتابیس node.js:

poolSize: 20

۴- کانفیگ پارامتر‌های استخر در برنامه node.js:

const { Pool } = require('pg') const pool = new Pool({ connectionString: 'postgresql://user:password@localhost/mydatabase', max: 20, // maximum number of clients in the pool idleTimeoutMillis: 30000, // how long a client is allowed to remain idle before being closed })

۵- استفاده از کانکشن پول برای اجرای کوئری‌های node.js:

pool.query('SELECT * FROM mytable', (err, res) => { console.log(res.rows) })


node jsconnection poolingpostgresql
مهندس نرم‌افزار و عاشق توسعه فردی - مهندس نرم‌افزار - اکس هم بنیان‌گذار و مدیرفنی و پرداکت استارتاپ کشمون
شاید از این پست‌ها خوشتان بیاید