কম্পিউটার টিউটোরিয়াল

ডাটাবেস পারফরম্যান্সে দক্ষতা: বাস্তব মॉनিটরিং এবং অপ্টিমাইজেশন টেকনিক

আপনার অ্যাপ্লিকেশন আর্কিটেকচারের সম্পূর্ণภาพ দেখা, শুধু নির্দিষ্ট দিকগুলো নয়, এবং বোঝা যে বিভিন্ন অংশ কীভাবে সংযুক্ত — এটি অত্যন্ত গুরুত্বপূর্ণ। পর্যবেক্ষণযোগ্যতা (Observability) প্রথমে আসে, তারপর মॉनিটরিং।

ডাটাবেস পারফরম্যান্স কেন মॉनিটর করবেন?

মান लीজিয়ে, একটি কোয়েরি খুব ধীর, এবং আপনার অ্যাপ ফলাফলের জন্য অপেক্ষা করতে হয় — ফলে এন্ড-ইউজারদের জন্য বা আপনার অ্যাপের কোনো অংশে সব কিছু থেমে যায়।

ট্রাফিক জ্যামের মতো, একটি অংশ অন্য কোথাও ঘট रहे কার্যের প্রভাবে নিঃস্পন্দ হয়ে যেতে পারে। যদি অনেক কোয়েরি সমাধান করতে বেশি সময় নেয়, তবে হয়তো অন্যান্য কোয়েরিগুলো বাধা দিচ্ছে।

আপনার লক্ষ্য হলো: অন্য অংশে সমস্যা শুরু হওয়ার আগে ही সমস্যা কোথা থেকে আসছে তা খুঁজে বের করা।

পরবর্তী ধাপ হলো প্রোएक্টিভভাবে মॉनিটরিং ব্যবহার করে আপনার আর্কিটেকচার অপ্টিমাইজ করা এবং দেখা যে কীভাবে জিনিসগুলো দ্রুত করা যায়। কিন্তু আমরা নিজেদের 좀 আগে নিয়ে যাচ্ছি — ধাপ ১ থেকে শুরু করি:

ধাপ ১: মাপা অর্থাৎ ডাটাবেস পারফরম্যান্স ইনস্ট্রুমেন্ট করা

ডাটাবেস মোনিটরিং শুরু হয় সঠিক জিনিসগুলো মাপার নিশ্চিততা পাওয়ায়:

  • ত্রুটি (Errors)

  • পারফরম্যান্স

  • কোয়েরি দৈর্ঘ্যের গড় এবং ৯০তম পারসেন্টাইল

  • মোট থ্রুপুট — থ্রুপুট সমস্যা হলে ট্রিগার/ফ্ল্যাগ সেট করার আরেক পথ দেয়

সৌভাগ্যক্রমে, এই ডেটা সংগ্রহের কাজ আগে থেকেই করা থাকছে: আপনার APM সফটওয়্যার সম্ভবত আপনাকে কী ইনস্ট্রুমেন্ট এবং মাপতে চান তা কনফিগার করার সুবিধা দেয়। আপনি যদি AppSignal ব্যবহার করেন, ডেটা সংগ্রহ এবং একত্রীকরণ স্বয়ংক্রিয়ভাবে হয়, প্রায় কোনো সেটআপ ছাড়া। আমরা আপনার জন্য কঠিন কাজগুলো করে দিয়েছি!

ধাপ ২: একো শুরু — হাই-ইম্প্যাক্ট কোয়েরি খুঁজে বের করা

একবার আপনার অ্যাপ ইনস্ট্রুমেন্ট হয়ে গেলে এবং রিয়েল-ওয়ার্ল্ড ডেটা আসতে শুরু হলে, প্যাটার্নগুলো দেখতে পাবেন। AppSignal-এ, নেভিগেশনের 'Improve' সেকশনে সবচোয়ে ধীর API রিকোয়েস্ট এবং সবচোয়ে ধীর কোয়েরির স্ক্রিন বিল্ট-ইন রয়েছে:

এই স্ক্রিন আপনাকে অপ্টিমাইজেশনের একটি চমৎকার পয়েন্ট দেবে। ডিফল্টভাবে, ধীর কোয়েরিগুলো ইম্প্যাক্ট অনুযায়ী সর্ট করা থাকে। এগুলো হলো আপনি যেসব কোয়েরি বαρবার করেন। ইম্প্যাক্ট = থ্রুপুট × গড় কোয়েরি টাইম।

এই সর্টিংগুলো টগল করলে আপনাকে বোঝা যাবে: সবচোয়ে ভলিউম ওয়ালা কোয়েরিগুলো, সবচোয়ে ধীর কোয়েরিগুলো (যা হয়তো রাতের ব্যাকগ্রাউন্ড জব, যেগুলো আপনি সহজেই উপেক্ষা করতে পারেন), এবং যেসব সবচোয়ে ইম্প্যাক্ট ফেলছে।

একটি ছোট সাইড-স্টেপ: কিছু পৃথক কোয়েরি ঠিক করা

এখন আপনি ঠিক করার জন্য কিছু কোয়েরি খুঁজে পেতে পারেন।

যদি আপনি একটি ধীর কোয়েরিতে ক্লিক করেন, তাহলে ডান পাশে এর সব ডিটেইল দেখতে পাবেন — থ্রুপুট এবং রেসপন্স টাইম থেকে কোয়েরির নাম পর্যন্ত:

রেসপন্স টাইমের শীর্ষে হভার করলে, 'what happened here' অপশনে ক্লিক করে জুম ইন করতে পারেন। তখন আপনি দেখতে পাবেন: সেই সময় কী ত্রুটি হয়েছিল, সেই স্যাম্পলে কী ঘটেছিল, এবং হস্টে কী ঘটেছিল।

আমরা একটি নির্দিষ্ট অ্যান্টি-প্যাটার্ন খুব স্পষ্টভাবে দেখিয়েছি: N+1। N+1 অ্যান্টি-প্যাটার্ন ঘটে যখন একটি কোয়েরি পূর্ববর্তী কোয়েরির প্রতিটি ফলাফলের জন্য এক্সিকিউট হয়।

কোয়েরি কাউন্ট = N + 1, যেখানে N = প্রাথমিক কোয়েরির ফলাফলের সংখ্যা। যদি প্রাথমিক কোয়েরিতে ১ ফলাফল থাকে, N+1 = ২। যদি ১,০০০ ফলাফল থাকে, N+1 = ১,০০১ কোয়েরি। বাম!

যদি কোয়েরিগুলো N+1 অ্যান্টি-প্যাটার্ন ফলো করে, তবে সেটা একটি সুযোগ — এখানে সেগুলো লেবেল করা থাকে যাতে আপনি দ্রুত খুঁজে পান:

এখানে আমরা সেগুলো কীভাবে সমাধান করব সেটা আলোচনা করব না — আমরা N+1 কোয়েরি নিয়ে আলাদা একটি ব্লগ পোস্ট লিখেছি।

ঠিক আছে, ধরি আমরা কিছু বড় সমস্যা ঠিক করলাম, এবং সেগুলো ঠিক করার время আমরা লক্ষ্য করলাম সেগুলো কখন ঘটে এবং সবচোয়ে খারাপ রেসপন্স টাইম।

ধাপ ৩: খুঁজে বের করা প্যাটার্ন নির্ধারণ করা — কী ভুল হয়েছে?

মোনিটরিং প্রায়শই কখন জিনিসগুলো ভুল হয়েছে সেটা দেখার কথা। কিন্তু মোনিটরিংয়ের জটিলতার একটি অংশ হলো: আপনার সেটআপের জন্য কী 'ভুল' ধরে নেওয়া উচিত সেটা ডিফাইন করা। আপনি কী চান — এমন একটি সমস্যায় সতর্ক হওয়া যা بعدে স্বয়ংক্রিয়ভাবে সমাধান হয়ে যায়, নাকি এমন একটি সমস্যা মিস করা যা সমাধান হয় না?

আপনার কোয়েরিগুলোর থ্রুপুট এবং ডুরেশন গড়ে নजर দিন। আপনি আপনার APM সফটওয়্যারে এটা সেট আপ করতে পারেন। আপনি যদি Node.js মোনিটর করতে AppSignal ব্যবহার করেন এবং ডাটাবেস হিসেবে PostgreSQL ব্যবহার করেন, তবে আমরা আপনার জন্য সবচোয়ে গুরুত্বপূর্ণ মেট্রিক্সের ড্যাশবোর্ড স্বয়ংক্রিয়ভাবে তৈরি করে দিয়েছি।

node-postgres ড্যাশবোর্ড এমন ডেটা দেখাবে:

আপনি যদি আপনার অ্যাপের জন্য এটা সেট আপ করতে চান, তবে আরও পড়ুন।

যখন আপনি বিভিন্ন টাইম রেঞ্জের মধ্যে স্যুইচ করবেন, তখন আপনি দেখবেন: ছোট শীর্ষ বিন্দুগুলো এক ঘন্টার গড়ে গুলিয়ে যাচ্ছে, আর দীর্ঘ সময়ের রেঞ্জে জুম আউট করলে কিছু শীর্ষ বিন্দু উঁচুই থাকছে।

সবচোয়ে ধীর কোয়েরি স্ক্রিন দেখে আমাদের এখন মূল দোষীদের এবং সেগুলো কখন শীর্ষে পৌঁছেছে সেটা নিয়ে একটি ধারণা আছে।

থ্রুপুটের নির্দিষ্ট ছোট শীর্ষ বিন্দুগুলো ঠিক থাকতে পারে — হস্টে অন্যান্য প্রসেস চলতে পারে যা কোয়েরিকে ধীর করে দেয়।

আপনি দীর্ঘ সময় ধীর কোয়েরি টাইম বা শীর্ষে পৌঁছানো থ্রুপুটে জুম ইন করতে চাবেন। ৯৫তম পারসেন্টাইল বনাম গড় দেখলে বোঝা যাবে: ধীর কোয়েরিটি সবাই অনুভব করছে কিনা, নাকি কেবল ছোট একটি সাবসেট। এটি কখনও কখনও আপনাকে সংকেত দেয় কী ঠিক করতে হবে।

ধাপ ৪: কী রাখে আপনাকে রাতে জাগিয়ে রাখে?

আমরা সাধারণত রিকমেন্ড করি শোরগোলপূর্ণ দিক থেকে শুরু করা: কিছু ট্রিগার সেট করুন যা আপনাকে এমন একটি চ্যানেলে সতর্ক করবে যা আপনাকে ঘুম থেকে জাগিয়ে দেবে না, যেমন ইমেইল বা Slack, PagerDuty না।

"event_duration" মেট্রিকসে একটি কাস্টম মেট্রিক্স ট্রিগার তৈরি করুন এবং গড় ফিল্ড সিলেক্ট করুন আপনার অ্যাপের গড় কোয়েরি টাইমে সতর্কতা পাওয়ার জন্য। ৯০তম বা ৯৫তম পারসেন্টাইল সিলেক্ট করুন আপনার অ্যাপ যে সবচোয়ে ধীর কোয়েরি সেটা পাওয়ার জন্য।

তারপর আপনি যে টাইপের ইভেন্টে সতর্কতা চান এবং কোন নেমস্পেসে সেটা কনফিগার করুন "group" এবং "namespace" ট্যাগ দিয়ে। উদাহরণস্বরূপ, "active_record" (Rails), "postgres" (Node.js), বা "ecto" (Elixir) গ্রুপের জন্য, এবং "web" বা "background" নেমস্পেসের জন্য:

এক সপ্তাহের পর, আপনি কিছু প্যাটার্ন দেখতে শুরু করবেন এবং বুঝতে পারবেন কোন কেসগুলো আপনার chú ý দরকার এবং কোন কেসগুলো সাধারণত স্বয়ংক্রিয়ভাবে সমাধান হয়ে যায়।

তারপর আপনি ট্রিগারগুলো কম শোরগোলপূর্ণ করতে পারেন এবং নির্দিষ্ট সতর্কতার জন্য আপনাকে ঘুম থেকে জাগিয়ে দেয় এমন চ্যানেল যোগ করতে পারেন।

ধাপ ৫: ডাটাবেস মোনিটরিং সেটআপ সম্পন্ন

এখন, তত্ত্ব상으로, আমাদের একটি সুন্দর মোনিটরিং সেটআপ থাকা উচিত: সঠিক ডেটা আসছে, আমরা ট্রিগার সেট করেছি যাতে সমস্যা বড় হওয়ার আগে সতর্কতা পাই, এবং আমরা কিছু বড় দোষী খুঁজে পেয়েছি। আমরা শেষ, ঠিক না?

বাস্তবে, আপনার অ্যাপের ব্যবহার বৃদ্ধি পেতে পারে এবং নতুন বটলनेक তৈরি করতে পারে। অথবা কোড চেঞ্জ আপনার ডাটাবেসে আঘাত করতে পারে, ফলে ডুরেশন বেড়ে যেতে পারে। অথবা একটি বড় পেলোড ওয়ালা নির্দিষ্ট ফিল্ড কিছু ট্রিগার করতে পারে। আপনি কতটুকু অভিজ্ঞ হোক না কেন, নতুন সমস্যা এবং বটলनेक ঘটবে।

কিন্তু আপনি সান্ত্বনা পেতে পারেন এই বিষয়ে: সঠিক সেটআপ থাকলে আপনি সতর্ক হবেন এবং জানবেন কীভাবে আপনার আর্কিটেকচারে গভীরে उतরিয়ে এই সমস্যাগুলো সমাধান করতে হবে।

এবং হয়তো আপনি বড় 'ইম্প্যাক্টফুল' কোয়েরিগুলো অন্য কোনো স্ক্রু ঢিলে যাওয়ার আগে ही উন্নত করার আনন্দ পাবেন। আমাদের যেটা সবচোয়ে ভালো লাগে — সেটা, আর স্ট্রুপওয়াফেল।

AppSignal ট্রাই করুন, স্ট্রুপওয়াফেল পান 🍪

স্ট্রুপওয়াফেলের কথা বললেই, আমরা সেটা সারা বিশ্বে পাঠিয়ে দিই। আমাদের Ruby, Elixir এবং Node.js-এর জন্য AppSignal APM সফটওয়্যার ট্রাই করুন। আপনি যদি ফ্রি ট্রায়াল সেট আপ করেন এবং আমাদের সাথে যোগাযোগ করেন, তবে আমরা আপনাকে বিনামূল্যে এক বাক্স স্ট্রুপওয়াফেল পাঠিয়ে দেব।

  1. ওয়িনডোজ ১০ পারফরম্যান্স মনিটর মাস্টার করুন: লঞ্চ ও ট্রাবলশুট গাইড

  2. উইন্ডোজ ১০ পিসি পারফরম্যান্স ট্র্যাক করুন দুটি সহজ পদ্ধতিতে

  3. আপনার ম্যাকের পারফরম্যান্স সর্বাধিক করুন: বিশেষজ্ঞ অপ্টিমাইজেশন টিপস

  4. PC পারফরম্যান্স ও সিকিউরিটি স্ক্যান: সিকিউর ও অপ্টিমাইজ করার ধাপে ধাপে গাইড