Skip to content
VDS · ডেটাবেস

আপনার টিয়ারের জন্য ডেটাবেস মেমরি কনফিগার করা

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_bufferseffective_cache_sizework_memmaintenance_work_memmax_connections
VDS-1 (2 GB)384MB1GB8MB96MB40
VDS-2 (4 GB)1GB2GB12MB256MB60
VDS-3 (8 GB)2GB5GB16MB512MB100
VDS-4 (16 GB)4GB10GB24MB1GB150
VDS-5 (24 GB)6GB16GB32MB2GB200
VDS-6 (32 GB)8GB22GB48MB2GB250

সাথে সাধারণ NVMe সেটিংস:

random_page_cost = 1.1
effective_io_concurrency = 200

work_mem প্রতি কানেকশনে নয়, প্রতি সর্ট অপারেশনে বরাদ্দ হয়: জটিল সর্টিংসহ একশো সমান্তরাল কোয়েরি এটিকে কয়েকশো গুণ বাড়িয়ে দেবে। এটি খুব বেশি সেট করবেন না।

প্রয়োগ: systemctl restart postgresql (shared_buffers পরিবর্তনের জন্য অবশ্যই রিস্টার্ট প্রয়োজন)।

MySQL ও MariaDB

টিয়ারinnodb_buffer_pool_sizeinnodb_log_file_sizemax_connections
VDS-1512M128M60
VDS-21G256M100
VDS-33G512M150
VDS-48G1G200
VDS-512G1G250
VDS-618G2G300
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 করছে
ডিস্ক ক্রমাগত পড়া হচ্ছেবাফার খুব ছোট, কার্যকর সেট ধরে না

মেমরি টিউন করার পরও যদি দেয়ালে ধাক্কা খান, সমস্যা কনফিগে নয় — ডেটার পরিমাণে। আপনি কেবল প্ল্যান আপগ্রেড করতে পারবেন, পরিশোধিত মেয়াদের বাকি দিনগুলোর জন্য আনুপাতিক পেমেন্টসহ; ডাউনগ্রেড পাওয়া যায় না, তাই পরবর্তী টিয়ার সচেতনভাবে বেছে নিন।