আপনার টিয়ারের জন্য ডেটাবেস মেমরি কনফিগার করা
VDS-1…VDS-6-এর জন্য PostgreSQL ও MySQL-এর নির্দিষ্ট বাফার মান, এবং ডেটাবেস, অ্যাপ্লিকেশন ও সিস্টেমের মধ্যে মেমরি বণ্টনের নিয়ম।
আপডেট: ২৩ আগস্ট, ২০২৬
ডিফল্ট ডেটাবেস সেটিংস যেকোনো জায়গায় চালু হওয়ার জন্য তৈরি, দ্রুত চলার জন্য নয়। ৮ জিবি মেমরির VDS-3-এ PostgreSQL বক্সের বাইরে ক্যাশের জন্য ১২৮ এমবি ব্যবহার করে — অর্থাৎ এটি প্রায় সবকিছু ডিস্ক থেকে পড়ে, যদিও মেমরি থেকে পড়া সম্ভব ছিল।
বরাদ্দের নিয়ম
টিয়ারের মেমরি মোটামুটি এভাবে ভাগ করুন:
- সিস্টেম ও সার্ভিস প্রসেস — ১০–১৫%;
- অ্যাপ্লিকেশন (PHP-FPM, Node, gunicorn) — ওয়ার্কারের সংখ্যা অনুযায়ী;
- ডেটাবেস — যা বাকি থাকে, তবে মোট মেমরির ৬০–৭০%-এর বেশি নয়।
ডেটাবেসকে কখনোই সব মেমরি দেবেন না: সিস্টেম swap-এ চলে যাবে, আর NVMe আপনাকে বাঁচাতে পারবে না — লেটেন্সি কয়েক ডজন গুণ বেড়ে যাবে।
এই মুহূর্তে কতটা ব্যবহৃত হচ্ছে:
free -h
ps -eo pmem,rss,comm --sort=-rss | head
এক ঘণ্টা, এক দিন, এক সপ্তাহ ও এক মাসের মেমরি গ্রাফ প্যানেলের /hosting/vds/m/<id>-এর "Overview"-এ পাওয়া যায় — এগুলো আসল পিক দেখায়, বর্তমান মুহূর্ত নয়।
PostgreSQL
/etc/postgresql/17/main/postgresql.conf:
| টিয়ার | shared_buffers | effective_cache_size | work_mem | maintenance_work_mem | max_connections |
|---|---|---|---|---|---|
| VDS-1 (2 GB) | 384MB | 1GB | 8MB | 96MB | 40 |
| VDS-2 (4 GB) | 1GB | 2GB | 12MB | 256MB | 60 |
| VDS-3 (8 GB) | 2GB | 5GB | 16MB | 512MB | 100 |
| VDS-4 (16 GB) | 4GB | 10GB | 24MB | 1GB | 150 |
| VDS-5 (24 GB) | 6GB | 16GB | 32MB | 2GB | 200 |
| VDS-6 (32 GB) | 8GB | 22GB | 48MB | 2GB | 250 |
সাথে সাধারণ NVMe সেটিংস:
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem প্রতি কানেকশনে নয়, প্রতি সর্ট অপারেশনে বরাদ্দ হয়: জটিল সর্টিংসহ একশো সমান্তরাল কোয়েরি এটিকে কয়েকশো গুণ বাড়িয়ে দেবে। এটি খুব বেশি সেট করবেন না।
প্রয়োগ: systemctl restart postgresql (shared_buffers পরিবর্তনের জন্য অবশ্যই রিস্টার্ট প্রয়োজন)।
MySQL ও MariaDB
| টিয়ার | innodb_buffer_pool_size | innodb_log_file_size | max_connections |
|---|---|---|---|
| VDS-1 | 512M | 128M | 60 |
| VDS-2 | 1G | 256M | 100 |
| VDS-3 | 3G | 512M | 150 |
| VDS-4 | 8G | 1G | 200 |
| VDS-5 | 12G | 1G | 250 |
| VDS-6 | 18G | 2G | 300 |
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 1
innodb_io_capacity = 2000
বাফার পুল মূল প্যারামিটার: এটি যদি কার্যকর ডেটা সেটে ধরে, তবে ডিস্ক প্রায় পড়াই হয় না।
প্রভাব যাচাই
SELECT sum(blks_hit)*100/sum(blks_hit+blks_read) FROM pg_stat_database;
MySQL-এর জন্য SHOW ENGINE INNODB STATUS এবং Innodb_buffer_pool_reads-এর সাথে Innodb_buffer_pool_read_requests-এর অনুপাত দেখুন। ৯৫%-এর নিচে ক্যাশ হিট রেট মানে ডেটাবেসের যথেষ্ট মেমরি নেই।
সাধারণ ভুল
| লক্ষণ | কারণ |
|---|---|
| সম্পাদনার পর ডেটাবেস চালু হয় না | উপলব্ধ মেমরির চেয়ে বেশি চাওয়া হয়েছে — journal দেখুন |
| প্রসেসটি OOM-এ নিহত হয়েছে | ডেটাবেস, অ্যাপ্লিকেশন ও সিস্টেম মিলে টিয়ারের মেমরি ছাড়িয়ে গেছে |
| "অপ্টিমাইজেশনের" পর ধীর হয়ে গেছে | work_mem খুব বেশি সেট করা, মেশিন swap করছে |
| ডিস্ক ক্রমাগত পড়া হচ্ছে | বাফার খুব ছোট, কার্যকর সেট ধরে না |
মেমরি টিউন করার পরও যদি দেয়ালে ধাক্কা খান, সমস্যা কনফিগে নয় — ডেটার পরিমাণে। আপনি কেবল প্ল্যান আপগ্রেড করতে পারবেন, পরিশোধিত মেয়াদের বাকি দিনগুলোর জন্য আনুপাতিক পেমেন্টসহ; ডাউনগ্রেড পাওয়া যায় না, তাই পরবর্তী টিয়ার সচেতনভাবে বেছে নিন।