دیتابیس مدیریتشدهی آروانکلاد سرویسی ابری برای ایجاد و مدیریت آسان دیتابیسهاست. هر کلاستر دیتابیس دارای محدودیت مشخصی در تعداد اتصالهای همزمان یا همان Connection Limit است. زمانی که تعداد اتصالها از این حد عبور کند، خطای Too Many Connections رخ میدهد. علت اصلی این خطا معمولن مدیریت نادرست کانکشنهاست، مثل باز گذاشتن اتصال و نبستن آن پس از استفاده.
در این راهنما، با میزان محدودیت هر فلیور، شیوهی بررسی تعداد اتصالهای فعال و رفع خطای Too Many Connections آشنا میشوید.
Connection Limit در دیتابیس ابری آروانکلاد
Connection Limit به معنای تعداد مجاز اتصال همزمان به دیتابیس است. این مقدار برای هر فلیور بر اساس منابع سختافزاری تعریف شده و در زمان ساخت دیتابیس در پنل آروانکلاد نمایش داده میشود.

توجه داشته باشید کانکشنهای همزمان شامل همهی اتصالهای بکاند اپلیکیشن، وبسایت، کلاینتهای Command Line یا نرمافزارهای مدیریت دیتابیس میشود.
پس از ایجاد دیتابیس، میتوانید وضعیت کانکشنها را در تب مانیتورینگ هر کلاستر مشاهده کنید:

Connections: تعداد کانکشنهای فعال فعلی
Max Used Connections: بیشترین تعداد کانکشن همزمان که در آن بازهی زمانی استفاده شده
Max Connections: تعداد مجاز کانکشن همزمان
جدول Connection Limit بهتفکیک فلیور
در جدول زیر مقادیر Connection Limit برای انجینهای PostgreSQL و MySQL آورده شده است.
| Flavor (CPU – RAM) | PostgreSQL | MySQL |
| 1-2 | 50 | – |
| 2-2 | 100 | 250 |
| 2-4 | 200 | 250 |
| 4-8 | 300 | 800 |
| 4-12 | 400 | 1100 |
| 6-16 | 400 | 1500 |
| 8-16 | 600 | 1500 |
| 6-24 | 800 | 2500 |
| 8-32 | 900 | 3200 |
| 12-48 | 1000 | 3500 |
| 16-64 | 1000 | 4100 |
| 20-96 | 1000 | 5100 |
| 24-128 | 1000 | 6100 |
اگر تعداد کانکشنهای فعال به سقف ظرفیت برسد:
امکان اتصال جدید وجود ندارد.
باید کانکشنهای غیرضروری بسته شوند.
نمونه خطاهای رایج مرتبط با Connection Limit
کاربران معمولن با خطاهای زیر مواجه میشوند:
ERROR 1040 (08004): Too many connections
PostgresException: 53300: remaining connection slots are reserved for roles with the SUPERUSER attribute
پر شدن Connection Pool و در دسترس نبودن دیتابیس
رفع خطای مرتبط با Connection Limit
برای رفع این خطاها و بستن کانکشنهای غیرضروری میتوانید بر اساس انجین دیتابیستان (MySQL/PostgreSQL) از دستورهای زیر استفاده کنید.
توجه داشته باشید در چنین شرایطی که امکان اتصال جدید وجود ندارد، فقط از طریق اتصالهای قبلی میتوانید این دستورها را اجرا کنید. اگر به هیچ اتصال فعالی دسترسی ندارید، باید مشکل را برای رفع به تیم پشتیبانی آروانکلاد ارجاع دهید.
MySQL
ابتدا باید لیست کانکشنهای باز دیتابیس را دریافت کنید. با این کار می توانید بررسی کنید که آیا دیتابیس به آستانهی کانکشنهای مجاز رسیده است یا خیر.
نمایش کانکشنها:
SHOW PROCESSLIST;
خروجی این دستور نشاندهندهی کانکشنها، وضعیت آنها، یوزری که آن کانکشن را ایجاد کرده و آدرس هاستی که کانکشن از روی آن برقرار شده، است.

پس از پیدا کردن کانکشن غیرضروری برای بستن آن در انجین MySQL از دستور زیر استفاده کنید.
بستن یک کانکشن خاص:
KILL <thread_id>;
به جای <thread_id> مقدار ستون Id از خروجی دستور قبل را قرار دهید.
PostgreSQL
برای مشاهدهی کانکشنها در انجین PostgreSQL از دستورهای زیر استفاده کنید:
SELECT pid, usename, datname, client_addr, state
FROM pg_stat_activity;
خروجی این دستور به شکل زیر خواهد بود که نشاندهندهی کانکشنها، وضعیت آنها، آدرس کلاینتی که کانکشن را ایجاد کرده و نام کاربر مرتبط با آن است.

یا از دستور زیر برای دیدن وضعیت خلاصهای از کانکشنها استفاده کنید:
SELECT datname, count(*)
FROM pg_stat_activity
GROUP BY datname;
خروجی این کوئری به شکل زیر است و بهطور خلاصه، تعداد کانکشنها به دیتابیسهای داخلی را نمایش میدهد.

برای بستن یک کانکشن خاص در انجین PostgreSQL از دستور زیر استفاده کنید:
SELECT pg_terminate_backend(<pid>);
بهجای <pid> مقدار ستون pid کانکشن مورد نظر که قصد بستن آن را دارید قرار دهید.
خروجی دستور به شکل زیر خواهد بود:

همچنین برای بستن همهی کانکشنهای یک دیتابیس (غیر از کانکشن فعلی) میتوانید از دستور زیر استفاده کنید:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = '<DB_NAME>' AND pid <> pg_backend_pid();
توجه داشته باشید که بستن همهی کانکشنها میتواند باعث قطع شدن موقت سرویس شود.
راهکار پایدار خطاهای مرتبط با Connection
اگر مشکل شما با بستن کانکشنها بهطور موقت حل میشود ولی به شکل پایدار همچنان به تعداد کانکشن بیشتری نیاز دارید باید از فلیوری بزرگتر استفاده کنید. چراکه افزایش Connection Limit بهشکل دستی یا موقت امکانپذیر نیست.
شما همواره میتوانید بهکمک قابلیت «تغییر اندازه» فلیور کلاسترتان را بدون اختلال یا قطعی تغییر دهید و با افزایش ظرفیت، به منابع و کانکشن بیشتری دسترسی داشته باشید.